diff options
| -rw-r--r-- | spec/evendoors_spec.rb | 67 | 
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  | 
