0
Donald Knuthによるコンピュータプログラミングの第1巻第1章の練習 - ユークリッドのgcdアルゴリズムを使用して残りのステップの平均を取ることと関連があります。私のコードはGCDを完全に返し、そうするためにテストされています。残りのステップを返すことができず、2番目のテストで失敗したテストがマークされ、コード内のコメントで正しい残りのステップが得られず、gcdTestObjectのgcdRemainerStepsに1が返されます。TAOCP Knuthの入門練習用カウンタのテスト
require 'minitest/autorun'
class GCDTest < Minitest::Test
def test_euclid_gcd
gcdTestObject=GCD.new(20,5)
assert gcdTestObject.euclidGcd==5
assert gcdTestObject.gcdRemainderSteps==1
end
def test_euclid_two
gcdTestObject=GCD.new(13,8)
assert gcdTestObject.euclidGcd==1
#Failing TEST Passes on 1 not on 5
assert gcdTestObject.gcdRemainderSteps==5
end
end
class GCD
attr_accessor :m,:n
def initialize(m,n)
@m=m
@n=n
end
def euclidGcd
r= @m % @n
until r==0
@[email protected]
@n=r
r= @m % @n
end
return @n
end
def gcdRemainderSteps
[email protected] % @n
counter=1
until r==0
counter+=1
@[email protected]
@n=r
[email protected] % @n
end
return counter
end
end
私がプログラムされるまでにカウントテストするために書かれているコードの2番目の作品は見事に動作し、それは完全にすべてのテストに合格しました。
これは、予想通り100でカウンタを返し、テストは緑色になります。
#until_loop_test.rb
require 'minitest/autorun'
class Until_test < Minitest::Test
def test_till_100_steps
myUntilTestObject=UntilTester.new
assert myUntilTestObject.untilLoopCount==100
end
end
class UntilTester
def untilLoopCount
x=0
counter=0
until x==100
x+=1
counter+=1
end
return counter
end
end
は、私はインスタンス変数を使用していた、ありがとうございました。そして、euclidGcdはインスタンス変数の完全性を破壊しました。インスタンス変数を新しい名前にリセットし、テストに合格しました。助けてくれてありがとう! –
ようこそ。 "答え"の空白を使用する代わりに、私の答えの下に "コメントを追加"リンクを使用する必要があります。それ以外の場合は、他の訪問者への代替回答としてコメントが表示されます。 - Jim U 9分前 –