I have problem with converting output (here puts) to string and then equal him with expected value
In this class (tree.rb) at the bottom "output" works well it show us result but in second class it is not working
Node = Struct.new(:value, :left, :right)
class Tree
attr_accessor :root
def initialize(value = nil)
puts "initializing with " + value.to_s
@root = Node.new(value)
end
def Tree.build_tree(array)
tree = Tree.new
array.each do |value|
tree.insert(value)
end
return tree
end
def insert(value)
puts "inserting: " + value.to_s
@root = Node.new(value) if @root.value == nil
current_node = @root
while current_node != nil
if (value < current_node.value) && (current_node.left == nil)
current_node.left = Node.new(value)
elsif (value > current_node.value) && (current_node.right == nil)
current_node.right = Node.new(value)
elsif (value < current_node.value)
current_node = current_node.left
elsif (value > current_node.value)
current_node = current_node.right
else
return
end
end
end
#(self,left,right)
def pre_order_traversal(node= @root)
return if (node == nil)
pre_order_traversal(node.left)
pre_order_traversal(node.right)
print node.value.to_s
end
#(left,self,right)
def in_order_traversal(node = @root)
return if (node == nil)
in_order_traversal(node.left)
print node.value.to_s
in_order_traversal(node.right)
end
# Post-Order Traversal (left,right,self)
def post_order_traversal(node = @root)
return if (node == nil)
print node.value.to_s
post_order_traversal(node.left)
post_order_traversal(node.right)
end
def postOrderToString(wartosc)
tmp =wartosc.to_s
return tmp.to_s
end
end
###############TESTY################
@tree = Tree.build_tree([1,2,3,4,5]) #inserting 1,2,3,4,5
output = @tree.pre_order_traversal
output
puts puts
output = @tree.in_order_traversal
puts output
puts
output = @tree.post_order_traversal
puts
Second class tree_spec.rb
require 'tree'
describe 'Drzewo:' do
before (:each) do # kazde
@tree = Tree.new()
end
it 'oczekuje korzenia jako nil' do
expect(@tree.root.value).to eq(nil)
end
it 'oczekuje korzenia jako 1' do
@tree.insert(1)
expect(@tree.root.value).to eq(1)
end
it 'wrzuca do lewego dziecka kiedy wartosc jest wieksza od korzenia' do
@tree.insert(1)
@tree.insert(2)
expect(@tree.root.right.value).to eq(2)
end
it 'wrzuca do prawego dziecka kiedy wartosc jest wieksza od korzenia' do
@tree.insert(3)
@tree.insert(2)
expect(@tree.root.left.value).to eq(2)
end
it 'wartosc mniejsza od korzenia dodawana do lewego dziecka dziecka' do
@tree.insert(3)
@tree.insert(2)
@tree.insert(1)
expect(@tree.root.left.left.value).to eq(1)
end
it 'wartosc mniejsza od korzenia dodawana do prawego dziecka dziecka' do
@tree.insert(3)
@tree.insert(4)
@tree.insert(5)
expect(@tree.root.right.right.value).to eq(5)
end
it 'dodanie liczb, trawersowanie do odpowiedniej pozycji' do
@tree.insert(3)
@tree.insert(2)
@tree.insert(1)
@tree.insert(5)
@tree.insert(4)
expect(@tree.root.right.left.value).to eq(4)
end
it 'budowanie drzewa przez tablice' do
@tree = Tree.build_tree([3,2,1,5,4])
expect(@tree.root.right.left.value).to eq(4)
end
it 'budowanie za pomoca tablicy w pre-order' do
@tree = Tree.build_tree([3,2,1,5,4])
output = @tree.pre_order_traversal
expect(output).to eq("54321")
end
it 'budowanie za pomoca tablicy w in-order' do
@tree = Tree.build_tree([3,2,1,5,4])
output @tree.in_order_traversal.to_s
expect(output).to eq("12345")
end
it 'budowanie za pomoca tablicy w post-order' do
@tree = Tree.build_tree([3,2,1,5,4])
output = @tree.post_order_traversal
expect(output).to eq("32154")
end
end
When i am trying match expect(output).to eq("32154") rspec is telling me that output is nil.
Why and how i can fix it?
Rspect output:
Drzewo: budowanie za pomoca tablicy w pre-order Failure/Error: expect(output).to eq("54321")
expected: "54321" got: nil (compared using ==)
Aucun commentaire:
Enregistrer un commentaire