Exemple #1
0
    def test_engine_named_inout_multiin(self):
        # a block should work with multiple inputs
        engine = Engine("op1", "op2", "op3")
        
        engine.op1.set(self.mult_opt)
        engine.op1.setup(in_name="in1", out_name="out1")
        engine.op2.set(self.plus_comp)
        engine.op2.setup(in_name="in1", out_name="out2")
        engine.op3.set(MinusTwoInputs())
        engine.op3.setup(in_name=["out1", "out2"], out_name="out3")

        res = engine.play(3) # (mult * 5) - (3 + 2)
        assert res['in1'] == 3
        assert res['out1'] == 3*5
        assert res['out2'] == 3+2
        assert res['out3'] == (3*5) - (3+2)

        # it should be possible to have a multi in as first component !
        engine = Engine("op3")
        engine.op3.set(MinusTwoInputs())
        engine.op3.setup(in_name=["in1", "in2"], out_name="out")
        res = engine.play(3, 40)
        assert res['out'] == -37

        # it should not validate if multiple data are not present
        engine = Engine("op1", "op3")
        engine.op1.set(self.mult_opt)
        engine.op1.setup(in_name="in1", out_name="out1")
        engine.op3.set(MinusTwoInputs())
        engine.op3.setup(in_name=["out1", "out2"], out_name="out3")

        with self.assertRaises(ReliureError):
            engine.validate()
Exemple #2
0
 def test_empty_engine(self):
     engine = Engine()
     # empty should not validate
     with self.assertRaises(ReliureError):
         engine.validate()
     # should not be possible to require some blocks...
     with self.assertRaises(ValueError):
         engine.requires()
     with self.assertRaises(ValueError):
         engine.requires("foo", "foo")
Exemple #3
0
    def test_engine_default_pipeline(self):
        engine = Engine("op1", "op2", "op3")
        # should have a __len__
        assert len(engine) == 3
        # should have a __contains__
        assert "op1" in engine
        assert "op2" in engine
        assert "op3" in engine
        assert not "op4" in engine
        # should not be possible to require a block that do not exist
        with self.assertRaises(ReliureError):
            engine.requires("op4")
        # should be possible to set the component for each block
        engine.op1.set(self.mult_opt)
        # but not on non existing blocks 
        with self.assertRaises(ValueError):
            engine.op4.set(self.mult_opt)
        with self.assertRaises(ValueError):
            engine["op4"].set(self.mult_opt)
        with self.assertRaises(ValueError):
            engine.set("op4", self.mult_opt)
        
        # should not validate if there is no component for all blocks
        with self.assertRaises(ReliureError):
            engine.validate()

        #should be posisble to 'append' a possible component to the block
        engine.op2.append(self.mult_opt)
        # and to set is as default in the same time
        engine.op2.append(self.plus_comp, default=True)
        
        # should be possible to select on component
        engine.op1.select("mult_opt")

        # should be possible to know if one block is multiple
        assert not engine.op2.multiple
        # to know wich component will be run
        assert engine.op2.selected() == ["plus_comp"]
        # to play just one block !
        assert engine.op2.play(10) == {'op2': 12}

        # and then is should validate is every block has som components
        engine.set("op3", self.mult_opt, self.plus_comp, self.max_comp)
        engine.validate()

        # should play !
        res = engine.play(3) # mult * 5 | + 2 | mult
        # and all intermediare results should be available
        assert res['input'] == 3
        assert res['op1'] == 3*5
        assert res['op2'] == 3*5+2
        assert res['op3'] == (3*5+2)*5
Exemple #4
0
    def test_engine_named_inout_error(self):
        engine = Engine("op1", "op2", "op3")

        engine.op1.set(self.mult_opt)
        engine.op1.setup(in_name="in1", out_name="out1")

        engine.op2.set(self.plus_comp)
        engine.op2.setup(in_name="out_not_exist", out_name="out2")

        engine.op3.set(self.mult_opt)
        engine.op3.setup(in_name="out1", out_name="out3")

        with self.assertRaises(ReliureError):
            engine.validate()
        
        engine.op2.setup(in_name="in1", out_name="out2")
        engine.validate()

        engine.op2.setup(required=False)
        engine.op3.setup(in_name="out2")
        with self.assertRaises(ReliureError):
            engine.validate()