L'exercice dans le premier chapitre du Vol 1 de L'art de la programmation par ordinateur de Donald Knuth - A à faire avec les moyennes des étapes restantes en utilisant l'algorithme gcd d'Euclid. Mon code renvoie le GCD parfaitement et a été testé pour le faire. Je ne peux pas l'obtenir pour retourner les étapes restantes et mon deuxième test marqué échec test avec un commentaire dans le code ne parvient pas à obtenir les étapes restantes correctes, et retournera seulement 1 pour gcdRemainerSteps sur le gcdTestObject.Test d'un compteur pour un exercice d'introduction à 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
Un deuxième morceau de code que je l'ai écrit pour tester le comptage dans un programme jusqu'à ce que fonctionne splendidement Il a passé tous les tests parfaitement.
Et cela renvoie le compteur à 100 comme prévu et le test sont dans le vert.
#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
Merci J'utilisais les variables d'instance. Et euclidGcd a détruit l'intégrité des variables d'instance. Je réinitialise les variables d'instance à de nouveaux noms et le test est passé. Merci pour votre aide monsieur! –
De rien. Vous devriez utiliser le lien "ajouter un commentaire" ci-dessous ma réponse au lieu d'utiliser le "réponse" vide. Sinon, le site présente votre commentaire comme une réponse alternative aux autres visiteurs. - Jim U il y a 9 mins –