summaryrefslogtreecommitdiffstats
path: root/spec/door_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/door_spec.rb')
-rw-r--r--spec/door_spec.rb70
1 files changed, 70 insertions, 0 deletions
diff --git a/spec/door_spec.rb b/spec/door_spec.rb
new file mode 100644
index 0000000..93cd975
--- /dev/null
+++ b/spec/door_spec.rb
@@ -0,0 +1,70 @@
+#! /usr/bin/env ruby
+# -*- coding: UTF-8 -*-
+#
+
+require 'spec_helper'
+#
+describe EvenDoors::Door do
+ #
+ it "require_p release_p" do
+ door = EvenDoors::Door.new 'hell'
+ p0 = door.require_p EvenDoors::Particle
+ p0.src.should be door
+ p1 = door.require_p EvenDoors::Particle
+ p1.src.should be door
+ (p0===p1).should be_false
+ door.release_p p0
+ p2 = door.require_p EvenDoors::Particle
+ p2.src.should be door
+ (p0===p2).should be_true
+ end
+ #
+ it "send_p, send_sys_p, release_p and release of lost particles" do
+ class Door0 < EvenDoors::Door
+ def receive_p p
+ case p.action
+ when 'RELEASE'
+ release_p p
+ when 'SEND'
+ send_p p
+ when 'SEND_SYS'
+ send_sys_p p
+ else
+ # lost!!
+ end
+ end
+ end
+ f = Fake.new
+ d0 = Door0.new 'door0', f
+ p0 = EvenDoors::Spin.require_p EvenDoors::Particle
+ #
+ p0.set_dst! 'SEND'
+ p0.split_dst!
+ d0.process_p p0
+ f.p.should eql p0
+ #
+ p0.set_dst! 'SEND_SYS'
+ p0.split_dst!
+ d0.process_p p0
+ f.sp.should eql p0
+ #
+ p0.set_dst! 'RELEASE'
+ p0.split_dst!
+ d0.process_p p0
+ p1 = EvenDoors::Spin.require_p EvenDoors::Particle
+ p1.should be p0
+ #
+ p0.set_dst! 'LOST'
+ p0.split_dst!
+ d0.process_p p0
+ p1 = EvenDoors::Spin.require_p EvenDoors::Particle
+ p1.should be p0
+ #
+ d0.process_sys_p p0
+ p1 = EvenDoors::Spin.require_p EvenDoors::Particle
+ p1.should be p0
+ end
+ #
+end
+#
+# EOF