Newer
Older
Angus Lothian
committed
import numpy as np
Angus Lothian
committed
from b_asic._b_asic import FastSimulation as Simulation
Angus Lothian
committed
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]
)
Angus Lothian
committed
Angus Lothian
committed
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
assert output[0] == 304
assert output[1] == 505
assert simulation.results["0"][100] == 304
assert simulation.results["1"][100] == 505
assert simulation.results["in1"][0] == 3
assert simulation.results["in2"][0] == 1
assert simulation.results["add1"][0] == 4
assert simulation.results["add2"][0] == 5
assert simulation.results["0"][0] == 4
assert simulation.results["1"][0] == 5
assert simulation.results["in1"][1] == 4
assert simulation.results["in2"][1] == 3
assert simulation.results["add1"][1] == 7
assert simulation.results["add2"][1] == 10
assert simulation.results["0"][1] == 7
assert simulation.results["1"][1] == 10
assert simulation.results["in1"][2] == 5
assert simulation.results["in2"][2] == 5
assert simulation.results["add1"][2] == 10
assert simulation.results["add2"][2] == 15
assert simulation.results["0"][2] == 10
assert simulation.results["1"][2] == 15
assert simulation.results["in1"][3] == 6
assert simulation.results["in2"][3] == 7
assert simulation.results["add1"][3] == 13
assert simulation.results["add2"][3] == 20
assert simulation.results["0"][3] == 13
assert simulation.results["1"][3] == 20
Angus Lothian
committed
def test_with_numpy_arrays_as_input(self, sfg_two_inputs_two_outputs):
input0 = np.array([5, 9, 25, -5, 7])
Angus Lothian
committed
simulation = Simulation(sfg_two_inputs_two_outputs, [input0, input1])
Angus Lothian
committed
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
assert output[0] == 9
assert output[1] == 11
assert isinstance(simulation.results["in1"], np.ndarray)
assert isinstance(simulation.results["in2"], np.ndarray)
assert isinstance(simulation.results["add1"], np.ndarray)
assert isinstance(simulation.results["add2"], np.ndarray)
assert isinstance(simulation.results["0"], np.ndarray)
assert isinstance(simulation.results["1"], np.ndarray)
assert simulation.results["in1"][0] == 5
assert simulation.results["in2"][0] == 7
assert simulation.results["add1"][0] == 12
assert simulation.results["add2"][0] == 19
assert simulation.results["0"][0] == 12
assert simulation.results["1"][0] == 19
assert simulation.results["in1"][1] == 9
assert simulation.results["in2"][1] == 3
assert simulation.results["add1"][1] == 12
assert simulation.results["add2"][1] == 15
assert simulation.results["0"][1] == 12
assert simulation.results["1"][1] == 15
assert simulation.results["in1"][2] == 25
assert simulation.results["in2"][2] == 3
assert simulation.results["add1"][2] == 28
assert simulation.results["add2"][2] == 31
assert simulation.results["0"][2] == 28
assert simulation.results["1"][2] == 31
assert simulation.results["in1"][3] == -5
assert simulation.results["in2"][3] == 54
assert simulation.results["add1"][3] == 49
assert simulation.results["add2"][3] == 103
assert simulation.results["0"][3] == 49
assert simulation.results["1"][3] == 103
assert simulation.results["0"][4] == 9
assert simulation.results["1"][4] == 11
Angus Lothian
committed
def test_with_numpy_array_overflow(self, sfg_two_inputs_two_outputs):
input0 = np.array([5, 9, 25, -5, 7])
Angus Lothian
committed
simulation = Simulation(sfg_two_inputs_two_outputs, [input0, input1])
simulation.run_for(5)
with pytest.raises(IndexError):
simulation.step()
def test_run_whole_numpy_array(self, sfg_two_inputs_two_outputs):
input0 = np.array([5, 9, 25, -5, 7])
Angus Lothian
committed
simulation = Simulation(sfg_two_inputs_two_outputs, [input0, input1])
simulation.run()
assert len(simulation.results["0"]) == 5
assert len(simulation.results["1"]) == 5
with pytest.raises(IndexError):
simulation.step()
def test_delay(self, sfg_delay):
simulation = Simulation(sfg_delay)
simulation.set_input(0, [5, -2, 25, -6, 7, 0])
Angus Lothian
committed
assert simulation.results["0"][0] == 0
assert simulation.results["0"][1] == 5
assert simulation.results["0"][2] == -2
assert simulation.results["0"][3] == 25
assert simulation.results["0"][4] == -6
assert simulation.results["0"][5] == 7
def test_find_result_key(self, precedence_sfg_delays):
sim = Simulation(
precedence_sfg_delays,
[[0, 4, 542, 42, 31.314, 534.123, -453415, 5431]],
)
Angus Lothian
committed
sim.run()
sim.results[precedence_sfg_delays.find_result_keys_by_name("ADD2")[0]][4]
sim.results[precedence_sfg_delays.find_result_keys_by_name("A1")[0]][2]
Angus Lothian
committed
class TestRun:
def test_save_results(self, sfg_two_inputs_two_outputs):
simulation = Simulation(sfg_two_inputs_two_outputs, [2, 3])
assert not simulation.results
Angus Lothian
committed
assert not simulation.results
simulation.run_for(10)
assert len(simulation.results["0"]) == 10
assert len(simulation.results["1"]) == 10
Angus Lothian
committed
assert len(simulation.results["0"]) == 20
assert len(simulation.results["1"]) == 20
Angus Lothian
committed
assert len(simulation.results["0"]) == 20
assert len(simulation.results["1"]) == 20
Angus Lothian
committed
assert len(simulation.results["0"]) == 33
assert len(simulation.results["1"]) == 33
Angus Lothian
committed
assert len(simulation.results["0"]) == 33
assert len(simulation.results["1"]) == 33
simulation.step()
assert len(simulation.results["0"]) == 34
assert len(simulation.results["1"]) == 34
simulation.clear_results()
assert not simulation.results
def test_nested(self, sfg_nested):
input0 = np.array([5, 9])
input1 = np.array([7, 3])
simulation = Simulation(sfg_nested, [input0, input1])
output0 = simulation.step()
output1 = simulation.step()
assert output0[0] == 11405
assert output1[0] == 4221
Angus Lothian
committed
def test_accumulator(self, sfg_accumulator):
data_in = np.array([5, -2, 25, -6, 7, 0])
Angus Lothian
committed
simulation = Simulation(sfg_accumulator, [data_in, reset])
output0 = simulation.step()
output1 = simulation.step()
output2 = simulation.step()
output3 = simulation.step()
output4 = simulation.step()
output5 = simulation.step()
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_accumulator(self, sfg_simple_accumulator):
data_in = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
simulation = Simulation(sfg_simple_accumulator, [data_in])
simulation.run()
assert list(simulation.results["0"]) == [
0,
1,
3,
6,
10,
15,
21,
28,
36,
45,
]
Angus Lothian
committed
def test_simple_filter(self, sfg_simple_filter):
input0 = np.array([1, 2, 3, 4, 5])
simulation = Simulation(sfg_simple_filter, [input0])
assert all(simulation.results["0"] == np.array([0, 1.0, 2.5, 4.25, 6.125]))
Angus Lothian
committed
def test_custom_operation(self, sfg_custom_operation):
simulation = Simulation(sfg_custom_operation, [lambda n: n + 1])
simulation.run_for(5)
assert all(simulation.results["0"] == np.array([2, 4, 6, 8, 10]))
assert all(simulation.results["1"] == np.array([2, 4, 8, 16, 32]))