spec/by_need_spec.rb in dataflow-0.1.1 vs spec/by_need_spec.rb in dataflow-0.2.0

- old
+ new

@@ -1,12 +1,55 @@ require "#{File.dirname(__FILE__)}/spec_helper" -describe 'A by_need trigger' do - it 'creates a need when a method is called on it' do - local do |x, y, z| - Thread.new { unify y, by_need { 4 } } - Thread.new { unify z, x + y } - Thread.new { unify x, by_need { 3 } } - z.should == 7 +describe 'A by_need expression' do + describe 'when a method is called on it' do + it 'binds its variable' do + local do |x, y, z| + Thread.new { unify y, by_need { 4 } } + Thread.new { unify z, x + y } + Thread.new { unify x, by_need { 3 } } + z.should == 7 + end + end + end + + describe 'when a bound variable is unified to it' do + it 'passes unififcation for equal values' do + local do |x| + unify x, by_need { 1 } + unify x, 1 + x.should == 1 + + y = by_need { 1 } + unify y, 1 + y.should == 1 + end + end + + it 'fails unififcation for unequal values' do + local do |x| + unify x, by_need { 1 } + lambda { unify x, 2 }.should raise_error(Dataflow::UnificationError) + + y = by_need { 1 } + lambda { unify y, 2 }.should raise_error(Dataflow::UnificationError) + end + end + + describe 'when it is unified to a bound variable' do + it 'passes unififcation for equal values' do + local do |x| + unify x, 1 + unify x, by_need { 1 } + x.should == 1 + end + end + + it 'fails unification for unequal values' do + local do |x| + unify x, 1 + lambda { unify x, by_need { 2 } }.should raise_error(Dataflow::UnificationError) + end + end end end end