|
| 1 | +#-*- coding: utf8 -*- |
| 2 | +''' |
| 3 | + Testing the datatype framewok. |
| 4 | +''' |
| 5 | + |
| 6 | +from plot_script.measurement_data_structure import PhysicalProperty |
| 7 | +from numpy import * |
| 8 | +import unittest |
| 9 | + |
| 10 | +class TestPhysicalProperty(unittest.TestCase): |
| 11 | + ''' |
| 12 | + Check the behavior of the base data holding array type. |
| 13 | + ''' |
| 14 | + |
| 15 | + def setUp(self): |
| 16 | + self.error=array([2. for ignore in range(100)], dtype=float32) |
| 17 | + self.values=arange(1., 101., 1.0, dtype=float32) |
| 18 | + self.data=PhysicalProperty('x', '°', self.values, self.error) |
| 19 | + |
| 20 | + def test_add(self): |
| 21 | + # test the base calculations with addition |
| 22 | + add_res=self.data+self.data |
| 23 | + self.assertEqual(add_res.view(ndarray).tolist(), |
| 24 | + (2.*self.values).tolist(), |
| 25 | + "Add results") |
| 26 | + self.assertEqual(add_res.error.tolist(), |
| 27 | + (sqrt(2.)*self.error).tolist(), |
| 28 | + "Add errors") |
| 29 | + |
| 30 | + def test_sub(self): |
| 31 | + # test the base calculations with subtraction |
| 32 | + sub_res=self.data-self.data |
| 33 | + self.assertEqual(sub_res.view(ndarray).tolist(), |
| 34 | + (zeros_like(self.values)).tolist(), |
| 35 | + "Subtract results") |
| 36 | + self.assertEqual(sub_res.error.tolist(), |
| 37 | + (sqrt(2.)*self.error).tolist(), |
| 38 | + "Subtract errors") |
| 39 | + |
| 40 | + def test_mul(self): |
| 41 | + # test the base calculations with multiplication |
| 42 | + mul_res=self.data*self.data |
| 43 | + self.assertEqual(mul_res.view(ndarray).tolist(), |
| 44 | + (self.values**2).tolist(), |
| 45 | + "Multiply results") |
| 46 | + self.assertEqual(mul_res.error.tolist(), |
| 47 | + (sqrt((self.error*self.values)**2+ |
| 48 | + (self.error*self.values)**2)).tolist(), |
| 49 | + "Multiply errors") |
| 50 | + |
| 51 | + def test_div(self): |
| 52 | + # test the base calculations with division |
| 53 | + div_res=self.data/self.data |
| 54 | + self.assertEqual(div_res.view(ndarray).tolist(), |
| 55 | + (ones_like(self.values)).tolist(), |
| 56 | + "Devision results") |
| 57 | + self.assertEqual(div_res.error.tolist(), |
| 58 | + (sqrt((self.error/self.values)**2+ |
| 59 | + (self.error/self.values)**2)).tolist(), |
| 60 | + "Devision errors") |
| 61 | + |
| 62 | + def test_unit_conversions(self): |
| 63 | + # test automatic and manual unit conversion |
| 64 | + deg=self.data |
| 65 | + rad=deg%'rad' |
| 66 | + self.assertEqual(rad.unit, 'rad', |
| 67 | + "Unit conversion from ° to rad - Unit") |
| 68 | + self.assertEqual((deg*(pi/180.)).tolist(), |
| 69 | + rad.tolist(), |
| 70 | + "Unit conversion from ° to rad - Value") |
| 71 | + # automatic conversion when added |
| 72 | + degrad=deg+rad |
| 73 | + self.assertEqual(degrad.tolist(), (2.*deg).tolist(), |
| 74 | + "Unit auto conversion in addition") |
| 75 | + # automatic conversion for angle functions |
| 76 | + degsin=sin(deg) |
| 77 | + radsin=sin(rad) |
| 78 | + self.assertEqual(degsin.tolist(), radsin.tolist(), |
| 79 | + "Unit auto conversion in sin(x)") |
| 80 | + |
| 81 | + |
| 82 | +class TestBla(unittest.TestCase): |
| 83 | + pass |
| 84 | + |
| 85 | +if __name__=='__main__': |
| 86 | + #unittest.main() |
| 87 | + loader=unittest.TestLoader() |
| 88 | + suite=loader.loadTestsFromTestCase(TestPhysicalProperty) |
| 89 | + suite.addTest(loader.loadTestsFromTestCase(TestBla)) |
| 90 | + unittest.TextTestRunner(verbosity=2).run(suite) |
0 commit comments