From 55d5c6e9cdf36cee9344b2ec358fb0cecd3ec7b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Sat, 2 Jun 2012 22:28:45 +0200 Subject: test/test_evendoors.rb -> test/test_iotas.rb --- test/test_evendoors.rb | 168 ------------------------------------------------- test/test_iotas.rb | 168 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+), 168 deletions(-) delete mode 100644 test/test_evendoors.rb create mode 100644 test/test_iotas.rb diff --git a/test/test_evendoors.rb b/test/test_evendoors.rb deleted file mode 100644 index 057742f..0000000 --- a/test/test_evendoors.rb +++ /dev/null @@ -1,168 +0,0 @@ -#! /usr/bin/env ruby -# -*- coding: UTF-8 -*- - -require 'iotas' - -HBN_PATH='hibernate.json' -# -class InputDoor < Iotas::Door - # - @count = 0 - # - class << self - attr_accessor :count - end - # - def initialize n, p - super n, p - @lines = [ "#{name} says : hello", "world ( from #{path} )" ] - @idx = 0 - end - # - def start! - puts " -> start #{self.class.name} (#{@path})" - # stimulate myself - p = require_p Iotas::Particle - # p.add_dst Iotas::ACT_GET, path - send_p p, Iotas::ACT_GET - end - # - def stop! - puts " >- stop #{self.class.name} (#{@path})" - end - # - def hibernate! - puts " !! hibernate #{self.class.name} (#{@path})" - # we want to remember where we are in the data flow - {'idx'=>@idx} - end - # - def resume! o - puts " !! resume #{self.class.name} (#{@path})" - # restore idx - @idx = o['idx'] - end - # - def receive_p p - puts " @ #{self.class.name} (#{@path}) receive_p : #{p.action}" - if p.action==Iotas::ACT_GET - p.reset! - p.set_data 'line', @lines[@idx] - p.set_data 'f0', 'v0' - p.set_data 'f1', 'v1' - p.set_data 'f2', 'v2' - send_p p # will follow the link - @idx+=1 - if @idx<@lines.length - # there is more to read, restimulate myself - p = require_p Iotas::Particle - p.add_dst Iotas::ACT_GET, name - send_p p - end - else - # we can release it or let the Door do it - release_p p - end - # I want to hibernate now! - self.class.count+=1 - if self.class.count==3 - p = require_p Iotas::Particle - p[Iotas::FIELD_HIBERNATE_PATH] = HBN_PATH - p.add_dst Iotas::SYS_ACT_HIBERNATE - send_sys_p p - end - end - # -end -# -class ConcatBoard < Iotas::Board - # - def initialize n, p, m=false - super n, p - @manual = m - end - # - def start! - puts " -> start #{self.class.name} (#{@path})" - end - # - def stop! - puts " >- stop #{self.class.name} (#{@path})" - end - # - def receive_p p - puts " @ #{self.class.name} receive_p : #{p.action}" - if p.action==Iotas::ACT_ERROR - # - else - if @manual - # cleanup unnecessary p2 Particle - p2 = p.merged_shift - p.set_data 'line', (p.data('line')+' '+p2.data('line')) - release_p p2 - else - # Or let the system do it - p.set_data 'line', (p.data('line')+' '+p.merged(0).data('line')) - end - send_p p - end - end - # -end -# -class OutputDoor < Iotas::Door - # - def initialize n, p, c=false - super n, p - @clean = c - end - # - def start! - puts " -> start #{self.class.name} (#{@path})" - end - # - def stop! - puts " >- stop #{self.class.name} (#{@path})" - end - # - def receive_p p - puts " #==> #{self.class.name} (#{@path}) receive_p : #{p.get_data('line')}" - if @clean - release_p p - else - # we do nothing Iotas::Door#process_p will detect it and release it - end - end - # -end -# -spin = Iotas::Spin.new 'dom0', :debug_routing=>false, :debug_errors=>true -# -room0 = Iotas::Room.new 'room0', spin -room1 = Iotas::Room.new 'room1', spin -# -input0 = InputDoor.new 'input0', room0 -output0 = OutputDoor.new 'output0', room0 -# -input1 = InputDoor.new 'input1', room1 -output1 = OutputDoor.new 'output1', room1, true -concat1 = ConcatBoard.new 'concat1', room1 -# -room0.add_link Iotas::Link.new('input0', 'output0', nil, nil, nil) -# -p0 = spin.require_p Iotas::Particle -p0.set_data Iotas::LNK_SRC, 'input1' -p0.set_data Iotas::LNK_DSTS, 'concat1?follow,output1' -p0.set_data Iotas::LNK_FIELDS, 'f0,f2' -p0.set_data Iotas::LNK_CONDF, 'f0,f1,f2' -p0.set_data Iotas::LNK_CONDV, 'v0v1v2' -p0.add_dst Iotas::SYS_ACT_ADD_LINK, room1.path -room1.send_sys_p p0 # send_sys_p -> room0 -> spin -> room1 -> input1 -# -spin.spin! -# -dom0 = Iotas::Spin.resume! HBN_PATH -dom0.spin! -File.unlink HBN_PATH if File.exists? HBN_PATH -# -# EOF diff --git a/test/test_iotas.rb b/test/test_iotas.rb new file mode 100644 index 0000000..057742f --- /dev/null +++ b/test/test_iotas.rb @@ -0,0 +1,168 @@ +#! /usr/bin/env ruby +# -*- coding: UTF-8 -*- + +require 'iotas' + +HBN_PATH='hibernate.json' +# +class InputDoor < Iotas::Door + # + @count = 0 + # + class << self + attr_accessor :count + end + # + def initialize n, p + super n, p + @lines = [ "#{name} says : hello", "world ( from #{path} )" ] + @idx = 0 + end + # + def start! + puts " -> start #{self.class.name} (#{@path})" + # stimulate myself + p = require_p Iotas::Particle + # p.add_dst Iotas::ACT_GET, path + send_p p, Iotas::ACT_GET + end + # + def stop! + puts " >- stop #{self.class.name} (#{@path})" + end + # + def hibernate! + puts " !! hibernate #{self.class.name} (#{@path})" + # we want to remember where we are in the data flow + {'idx'=>@idx} + end + # + def resume! o + puts " !! resume #{self.class.name} (#{@path})" + # restore idx + @idx = o['idx'] + end + # + def receive_p p + puts " @ #{self.class.name} (#{@path}) receive_p : #{p.action}" + if p.action==Iotas::ACT_GET + p.reset! + p.set_data 'line', @lines[@idx] + p.set_data 'f0', 'v0' + p.set_data 'f1', 'v1' + p.set_data 'f2', 'v2' + send_p p # will follow the link + @idx+=1 + if @idx<@lines.length + # there is more to read, restimulate myself + p = require_p Iotas::Particle + p.add_dst Iotas::ACT_GET, name + send_p p + end + else + # we can release it or let the Door do it + release_p p + end + # I want to hibernate now! + self.class.count+=1 + if self.class.count==3 + p = require_p Iotas::Particle + p[Iotas::FIELD_HIBERNATE_PATH] = HBN_PATH + p.add_dst Iotas::SYS_ACT_HIBERNATE + send_sys_p p + end + end + # +end +# +class ConcatBoard < Iotas::Board + # + def initialize n, p, m=false + super n, p + @manual = m + end + # + def start! + puts " -> start #{self.class.name} (#{@path})" + end + # + def stop! + puts " >- stop #{self.class.name} (#{@path})" + end + # + def receive_p p + puts " @ #{self.class.name} receive_p : #{p.action}" + if p.action==Iotas::ACT_ERROR + # + else + if @manual + # cleanup unnecessary p2 Particle + p2 = p.merged_shift + p.set_data 'line', (p.data('line')+' '+p2.data('line')) + release_p p2 + else + # Or let the system do it + p.set_data 'line', (p.data('line')+' '+p.merged(0).data('line')) + end + send_p p + end + end + # +end +# +class OutputDoor < Iotas::Door + # + def initialize n, p, c=false + super n, p + @clean = c + end + # + def start! + puts " -> start #{self.class.name} (#{@path})" + end + # + def stop! + puts " >- stop #{self.class.name} (#{@path})" + end + # + def receive_p p + puts " #==> #{self.class.name} (#{@path}) receive_p : #{p.get_data('line')}" + if @clean + release_p p + else + # we do nothing Iotas::Door#process_p will detect it and release it + end + end + # +end +# +spin = Iotas::Spin.new 'dom0', :debug_routing=>false, :debug_errors=>true +# +room0 = Iotas::Room.new 'room0', spin +room1 = Iotas::Room.new 'room1', spin +# +input0 = InputDoor.new 'input0', room0 +output0 = OutputDoor.new 'output0', room0 +# +input1 = InputDoor.new 'input1', room1 +output1 = OutputDoor.new 'output1', room1, true +concat1 = ConcatBoard.new 'concat1', room1 +# +room0.add_link Iotas::Link.new('input0', 'output0', nil, nil, nil) +# +p0 = spin.require_p Iotas::Particle +p0.set_data Iotas::LNK_SRC, 'input1' +p0.set_data Iotas::LNK_DSTS, 'concat1?follow,output1' +p0.set_data Iotas::LNK_FIELDS, 'f0,f2' +p0.set_data Iotas::LNK_CONDF, 'f0,f1,f2' +p0.set_data Iotas::LNK_CONDV, 'v0v1v2' +p0.add_dst Iotas::SYS_ACT_ADD_LINK, room1.path +room1.send_sys_p p0 # send_sys_p -> room0 -> spin -> room1 -> input1 +# +spin.spin! +# +dom0 = Iotas::Spin.resume! HBN_PATH +dom0.spin! +File.unlink HBN_PATH if File.exists? HBN_PATH +# +# EOF -- cgit v1.1-2-g2b99