dimanche 13 novembre 2016

Rspec stdout to string - BST structure

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