Skip to content
Snippets Groups Projects
test_simulation.py 5.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • import pytest
    import numpy as np
    
    from b_asic import SFG, Output, Simulation
    
    
    
    class TestRunFor:
        def test_with_lambdas_as_input(self, sfg_two_inputs_two_outputs):
    
            simulation = Simulation(sfg_two_inputs_two_outputs, [lambda n: n + 3, lambda n: 1 + n * 2], save_results = True)
    
            output = simulation.run_for(101)
    
            assert output[0] == 304
            assert output[1] == 505
    
            assert simulation.results[100]["0"] == 304
            assert simulation.results[100]["1"] == 505
    
            assert simulation.results[0]["in1"] == 3
            assert simulation.results[0]["in2"] == 1
            assert simulation.results[0]["add1"] == 4
            assert simulation.results[0]["add2"] == 5
            assert simulation.results[0]["0"] == 4
            assert simulation.results[0]["1"] == 5
    
            assert simulation.results[1]["in1"] == 4
            assert simulation.results[1]["in2"] == 3
            assert simulation.results[1]["add1"] == 7
            assert simulation.results[1]["add2"] == 10
            assert simulation.results[1]["0"] == 7
            assert simulation.results[1]["1"] == 10
    
            assert simulation.results[2]["in1"] == 5
            assert simulation.results[2]["in2"] == 5
            assert simulation.results[2]["add1"] == 10
            assert simulation.results[2]["add2"] == 15
            assert simulation.results[2]["0"] == 10
            assert simulation.results[2]["1"] == 15
    
            assert simulation.results[3]["in1"] == 6
            assert simulation.results[3]["in2"] == 7
            assert simulation.results[3]["add1"] == 13
            assert simulation.results[3]["add2"] == 20
            assert simulation.results[3]["0"] == 13
            assert simulation.results[3]["1"] == 20
    
    
        def test_with_numpy_arrays_as_input(self, sfg_two_inputs_two_outputs):
    
            input0 = np.array([5, 9, 25, -5, 7])
            input1 = np.array([7, 3, 3,  54, 2])
            simulation = Simulation(sfg_two_inputs_two_outputs, [input0, input1])
            simulation.save_results = True
    
            output = simulation.run_for(5)
    
            assert output[0] == 9
            assert output[1] == 11
    
            assert simulation.results[0]["in1"] == 5
            assert simulation.results[0]["in2"] == 7
            assert simulation.results[0]["add1"] == 12
            assert simulation.results[0]["add2"] == 19
            assert simulation.results[0]["0"] == 12
            assert simulation.results[0]["1"] == 19
    
            assert simulation.results[1]["in1"] == 9
            assert simulation.results[1]["in2"] == 3
            assert simulation.results[1]["add1"] == 12
            assert simulation.results[1]["add2"] == 15
            assert simulation.results[1]["0"] == 12
            assert simulation.results[1]["1"] == 15
    
            assert simulation.results[2]["in1"] == 25
            assert simulation.results[2]["in2"] == 3
            assert simulation.results[2]["add1"] == 28
            assert simulation.results[2]["add2"] == 31
            assert simulation.results[2]["0"] == 28
            assert simulation.results[2]["1"] == 31
    
            assert simulation.results[3]["in1"] == -5
            assert simulation.results[3]["in2"] == 54
            assert simulation.results[3]["add1"] == 49
            assert simulation.results[3]["add2"] == 103
            assert simulation.results[3]["0"] == 49
            assert simulation.results[3]["1"] == 103
    
            assert simulation.results[4]["0"] == 9
            assert simulation.results[4]["1"] == 11
    
        
        def test_with_numpy_array_overflow(self, sfg_two_inputs_two_outputs):
    
            input0 = np.array([5, 9, 25, -5, 7])
            input1 = np.array([7, 3, 3,  54, 2])
            simulation = Simulation(sfg_two_inputs_two_outputs, [input0, input1])
            simulation.run_for(5)
            with pytest.raises(IndexError):
                simulation.run_for(1)
    
    
            simulation = Simulation(sfg_delay, save_results = True)
            simulation.set_input(0, [5, -2, 25, -6, 7, 0])
            simulation.run_for(6)
    
            assert simulation.results[0]["0"] == 0
            assert simulation.results[1]["0"] == 5
            assert simulation.results[2]["0"] == -2
            assert simulation.results[3]["0"] == 25
            assert simulation.results[4]["0"] == -6
            assert simulation.results[5]["0"] == 7
    
    
    class TestRun:
        def test_nested(self, sfg_nested):
            input0 = np.array([5, 9])
            input1 = np.array([7, 3])
            simulation = Simulation(sfg_nested, [input0, input1])
    
            output0 = simulation.run()
            output1 = simulation.run()
    
            assert output0[0] == 11405
            assert output1[0] == 4221
    
        def test_accumulator(self, sfg_accumulator):
    
            data_in = np.array([5, -2, 25, -6, 7, 0])
            reset   = np.array([0, 0,  0,  1,  0, 0])
            simulation = Simulation(sfg_accumulator, [data_in, reset])
            output0 = simulation.run()
            output1 = simulation.run()
            output2 = simulation.run()
            output3 = simulation.run()
            output4 = simulation.run()
            output5 = simulation.run()
            assert output0[0] == 0
            assert output1[0] == 5
            assert output2[0] == 3
            assert output3[0] == 28
            assert output4[0] == 0
    
            assert output5[0] == 7
            
        def test_simple_filter(self, simple_filter):
            input0 = np.array([1, 2, 3, 4, 5])
            simulation = Simulation(simple_filter, [input0], save_results=True)
            output0 = [simulation.run()[0] for _ in range(len(input0))]
            assert output0 == [0, 1.0, 2.5, 4.25, 6.125]