Coverage for gpkit\tests\t_keydict.py: 0%
58 statements
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-23 21:35 -0400
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-23 21:35 -0400
1"""Test KeyDict class"""
2import unittest
3import numpy as np
4from gpkit import Variable, VectorVariable
5import gpkit
6from gpkit.keydict import KeyDict
7from gpkit.tests.helpers import run_tests
10class TestKeyDict(unittest.TestCase):
11 """TestCase for the KeyDict class"""
13 def test_nonnumeric(self):
14 x = VectorVariable(2, "x")
15 kd = KeyDict()
16 kd[x[1]] = "2"
17 self.assertTrue(np.isnan(kd[x[0]]))
18 self.assertEqual(kd[x[1]], "2")
19 self.assertNotIn(x[0], kd)
20 self.assertIn(x[1], kd)
22 def test_setattr(self):
23 kd = KeyDict()
24 x = Variable("x", lineage=(("test", 0),))
25 kd[x] = 1
26 self.assertIn(x, kd)
27 self.assertEqual(set(kd), set([x.key]))
29 def test_getattr(self):
30 kd = KeyDict()
31 x = Variable("x", lineage=[("Motor", 0)])
32 kd[x] = 52
33 self.assertEqual(kd[x], 52)
34 self.assertEqual(kd[x.key], 52)
35 self.assertEqual(kd["x"], 52)
36 self.assertEqual(kd["Motor.x"], 52)
37 self.assertNotIn("x.Someothermodelname", kd)
39 def test_failed_getattr(self):
40 kd = KeyDict()
41 with self.assertRaises(KeyError):
42 _ = kd["waldo"]
43 # issue 893: failed __getitem__ caused state change
44 self.assertNotIn("waldo", kd)
45 waldo = Variable("waldo")
46 kd.update({waldo: 5})
47 res = kd["waldo"]
48 self.assertEqual(res, 5)
49 self.assertIn("waldo", kd)
51 def test_vector(self):
52 v = VectorVariable(3, "v")
53 kd = KeyDict()
54 kd[v] = np.array([2, 3, 4])
55 self.assertTrue(all(kd[v] == kd[v.key])) # pylint:disable=no-member
56 self.assertTrue(all(kd["v"] == np.array([2, 3, 4])))
57 self.assertEqual(v[0].key.idx, (0,))
58 self.assertEqual(kd[v][0], kd[v[0]])
59 self.assertEqual(kd[v][0], 2)
60 kd[v[0]] = 6
61 self.assertEqual(kd[v][0], kd[v[0]])
62 self.assertEqual(kd[v][0], 6)
63 self.assertTrue(all(kd[v] == np.array([6, 3, 4])))
64 v = VectorVariable(3, "v", "m")
65 kd[v] = np.array([2, 3, 4])
66 if gpkit.units:
67 kd[v[0]] = gpkit.units("inch")
70TESTS = [TestKeyDict]
73if __name__ == "__main__": # pragma: no cover
74 run_tests(TESTS)