summaryrefslogtreecommitdiffstats
path: root/spec/evendoors_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/evendoors_spec.rb')
-rw-r--r--spec/evendoors_spec.rb67
1 files changed, 67 insertions, 0 deletions
diff --git a/spec/evendoors_spec.rb b/spec/evendoors_spec.rb
index 48a6a1a..259c3bc 100644
--- a/spec/evendoors_spec.rb
+++ b/spec/evendoors_spec.rb
@@ -328,4 +328,71 @@ describe EvenDoors do
#
end
#
+ describe EvenDoors::Board do
+ #
+ it "require_p release_p should work" do
+ board = EvenDoors::Board.new 'hell'
+ p0 = board.require_p EvenDoors::Particle
+ p0.src.should be board
+ p1 = board.require_p EvenDoors::Particle
+ p1.src.should be board
+ (p0===p1).should be_false
+ board.release_p p0
+ p2 = board.require_p EvenDoors::Particle
+ p2.src.should be board
+ (p0===p2).should be_true
+ end
+ #
+ it "should" do
+ p0 = EvenDoors::Particle.new
+ p0['k0'] = 'v0'
+ p0['k1'] = 'neither'
+ p0['k2'] = 'v2'
+ p0.set_link_fields 'k0,k2'
+ p0.link_value.should eql 'v0v2'
+ p1 = EvenDoors::Particle.new
+ p1['k0'] = 'v0'
+ p1['k1'] = 'nore'
+ p1['k2'] = 'v2'
+ p1.set_link_fields 'k0,k2'
+ p1.link_value.should eql 'v0v2'
+ P0 = p0
+ P1 = p1
+ class Board0 < EvenDoors::Board
+ attr_reader :ok, :follow
+ def receive_p p
+ @ok = false
+ case p.action
+ when EvenDoors::ACT_FOLLOW
+ @follow = true
+ @ok = (p===P0 and p.merged(0)===P1)
+ else
+ @follow = false
+ @ok = (p===P1 and p.merged(0)===P0)
+ end
+ end
+ end
+ b0 = Board0.new 'door0'
+ b0.process_p p0
+ p0.merged(0).should be_nil
+ b0.process_p p1
+ b0.ok.should be_true
+ b0.follow.should be_false
+ #
+ p1.merged_shift
+ #
+ b0.process_p p0
+ p0.merged(0).should be_nil
+ # need to set it to p0 too, so casein Board0 is ok
+ p0.set_dst! EvenDoors::ACT_FOLLOW
+ p0.split_dst!
+ p1.set_dst! EvenDoors::ACT_FOLLOW
+ p1.split_dst!
+ b0.process_p p1
+ b0.ok.should be_true
+ b0.follow.should be_true
+ end
+ #
+ end
+ #
end