#! /usr/bin/ruby # -*- coding: utf-8 -*- require 'minitest/spec' require 'minitest/autorun' require_relative '../lib/y_petri' # tested component itself # require 'y_petri' # require 'sy' describe YPetri::Place do before do @pç = pç = Class.new YPetri::Place @p = pç.avid default_marking: 3.2, marking: 1.1, quantum: 0.1, name: "P1" end it "should support #name" do assert_respond_to @p, :name assert_equal @p.name, :P1 end it "should have marking and related methods" do @p.marking.must_equal 1.1 # Attention, #marking overloaded with guard setup! @p.quantum.must_equal 0.1 @p.add 1 @p.value.must_equal 2.1 # near-alias of #marking (no guard setup) @p.subtract 0.5 @p.m.must_equal 1.6 # alias of #value @p.reset_marking @p.marking.must_equal 3.2 @p.marking = 42 @p.m.must_equal 42 @p.m = 43 @p.m.must_equal 43 @p.value = 44 @p.m.must_equal 44 end it "should have decent #inspect and #to_s methods" do assert @p.inspect.start_with? "# { g2.validate Complex( 1, 1 ) }.must_raise YPetri::GuardError @p.marking "must be in 0..10" do |m| fail unless ( 0..10 ) === m end @p.guards.size.must_equal 4 g = @p.federated_guard_closure -> { g.( 11.1 ) }.must_raise YPetri::GuardError begin; @p.marking = -1.11; rescue YPetri::GuardError => err err.message.must_equal 'Marking -1.11:Float of P1 should not be negative!' end end end