/
test.py
105 lines (82 loc) · 3.66 KB
/
test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
50
51
52
53
54
55
56
57
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
99
100
101
102
103
104
105
import unittest
import parser
import spicemix
import gaussian
from math import exp
from main import find_n_m_size
from stamp_builder import StampBuilder
class ParserStampTests(unittest.TestCase):
def setUp(self):
self.entries = {'* Whole line comment': None,
'R1 1 2 1000 * Это комментарий':
(spicemix.Resistor, 1, 1, 2, 1000),
'R2 2 0 1000':
(spicemix.Resistor, 2, 2, 0, 1000),
'V1 1 0 2':
(spicemix.Voltage, 1, 1, 0, 2),
'D1 2 0':
(spicemix.Diode, 1, 2, 0, None),
}
self.n = 3
self.m = 1
self.v0 = 0.8
i = 1e-12 * (exp(self.v0 / 25.85e-3) - 1)
self.cut_matrix_a = [[1e-3, -1e-3, 1],
[-1e-3, 1e-3 + 1e-3 + i / 25.85e-3, 0],
[1, 0, 0],
]
self.cut_matrix_z = [0, -(i - i / 25.85e-3 * self.v0), 2]
self.parser = parser.Parser()
self.builder = StampBuilder(self.n, self.m)
def test_correct_type_nodes_anything(self):
comps_linear = []
comps_diodes = []
for entry, value in self.entries.items():
comp = self.parser.next_entry(entry)
if isinstance(comp, spicemix.Diode):
comp.set_voltage(0.8)
if comp is None and value is not None:
raise Exception('There is a component but parser returns None')
if comp is not None:
self.assertEqual(comp.get_id(), value[1], 'Wrong id')
self.assertEqual(comp.get_p_node(), value[2], 'Wrong p node')
self.assertEqual(comp.get_n_node(), value[3], 'Wrong n node')
self.assertEqual(comp.get_value(), value[4], 'Wrong value')
assert isinstance(comp, value[0])
if isinstance(comp, spicemix.Diode):
comps_diodes.append(comp)
else:
comps_linear.append(comp)
for c in comps_linear:
self.builder.add_component(c)
for c in comps_diodes:
c.set_vol_zero(self.v0)
self.builder.add_component(c)
n, m = find_n_m_size(comps_linear + comps_diodes)
self.assertEqual(n, self.n)
self.assertEqual(m, self.m)
self.builder.clear_zer()
builder_a, builder_z = self.builder.get_a_z()
self.assertEqual(self.cut_matrix_a, builder_a)
self.assertEqual(self.cut_matrix_z, builder_z)
gaussian.print_matrix(gaussian.gaussian_elimintaion(self.cut_matrix_a, self.cut_matrix_z))
class GaussianTest(unittest.TestCase):
"""Test for gaussian elimination"""
def setUp(self):
self.matrix = [[2, 5, 7], [6, 3, 4], [5, -2, -3]]
self.matrix_transposed = [[2, 6, 5], [5, 3, -2], [7, 4, -3]]
self.epic_matrix = [[3, -3, -5, 8], [-3, 2, 4, -6],
[2, -5, -7, 5], [-4, 3, 5, -6]]
self.minor_0_1 = [[6, 4], [5, -3]]
self.minor_1_2 = [[2, 5], [5, -2]]
self.det = -1
self.epic_det = 18
def test_minor_determinant(self):
self.assertEqual(self.minor_0_1, gaussian.minor(self.matrix, 0, 1))
self.assertEqual(self.minor_1_2, gaussian.minor(self.matrix, 1, 2))
self.assertEqual(self.det, gaussian.determinant(self.matrix))
self.assertEqual(self.epic_det, gaussian.determinant(self.epic_matrix))
def test_transpose(self):
self.assertEqual(self.matrix_transposed, gaussian.transpose(self.matrix))
if __name__ == '__main__':
unittest.main()