|
1 | 1 | import os
|
2 | 2 | import unittest
|
3 | 3 | import canopen
|
| 4 | +from canopen.objectdictionary.eds import _signed_int_from_hex |
4 | 5 |
|
5 | 6 | EDS_PATH = os.path.join(os.path.dirname(__file__), 'sample.eds')
|
6 | 7 |
|
7 | 8 |
|
8 | 9 | class TestEDS(unittest.TestCase):
|
9 | 10 |
|
| 11 | + test_data = { |
| 12 | + "int8": [ |
| 13 | + {"hex_str": "7F", "bit_length": 8, "expected": 127}, |
| 14 | + {"hex_str": "80", "bit_length": 8, "expected": -128}, |
| 15 | + {"hex_str": "FF", "bit_length": 8, "expected": -1}, |
| 16 | + {"hex_str": "00", "bit_length": 8, "expected": 0}, |
| 17 | + {"hex_str": "01", "bit_length": 8, "expected": 1} |
| 18 | + ], |
| 19 | + "int16": [ |
| 20 | + {"hex_str": "7FFF", "bit_length": 16, "expected": 32767}, |
| 21 | + {"hex_str": "8000", "bit_length": 16, "expected": -32768}, |
| 22 | + {"hex_str": "FFFF", "bit_length": 16, "expected": -1}, |
| 23 | + {"hex_str": "0000", "bit_length": 16, "expected": 0}, |
| 24 | + {"hex_str": "0001", "bit_length": 16, "expected": 1} |
| 25 | + ], |
| 26 | + "int32": [ |
| 27 | + {"hex_str": "7FFFFFFF", "bit_length": 32, "expected": 2147483647}, |
| 28 | + {"hex_str": "80000000", "bit_length": 32, "expected": -2147483648}, |
| 29 | + {"hex_str": "FFFFFFFF", "bit_length": 32, "expected": -1}, |
| 30 | + {"hex_str": "00000000", "bit_length": 32, "expected": 0}, |
| 31 | + {"hex_str": "00000001", "bit_length": 32, "expected": 1} |
| 32 | + ], |
| 33 | + "int64": [ |
| 34 | + {"hex_str": "7FFFFFFFFFFFFFFF", "bit_length": 64, "expected": 9223372036854775807}, |
| 35 | + {"hex_str": "8000000000000000", "bit_length": 64, "expected": -9223372036854775808}, |
| 36 | + {"hex_str": "FFFFFFFFFFFFFFFF", "bit_length": 64, "expected": -1}, |
| 37 | + {"hex_str": "0000000000000000", "bit_length": 64, "expected": 0}, |
| 38 | + {"hex_str": "0000000000000001", "bit_length": 64, "expected": 1} |
| 39 | + ] |
| 40 | + } |
| 41 | + |
10 | 42 | def setUp(self):
|
11 | 43 | self.od = canopen.import_od(EDS_PATH, 2)
|
12 | 44 |
|
@@ -58,11 +90,18 @@ def test_record_with_limits(self):
|
58 | 90 | self.assertEqual(uint8.max, 10)
|
59 | 91 | int32 = self.od[0x3030]
|
60 | 92 | self.assertEqual(int32.min, -2147483648)
|
61 |
| - self.assertEqual(int32.max, 0) |
| 93 | + self.assertEqual(int32.max, -1) |
62 | 94 | int64 = self.od[0x3040]
|
63 | 95 | self.assertEqual(int64.min, -10)
|
64 | 96 | self.assertEqual(int64.max, +10)
|
65 | 97 |
|
| 98 | + def test_signed_int_from_hex(self): |
| 99 | + for data_type, test_cases in self.test_data.items(): |
| 100 | + for test_case in test_cases: |
| 101 | + with self.subTest(data_type=data_type, test_case=test_case): |
| 102 | + result = _signed_int_from_hex('0x' + test_case["hex_str"], test_case["bit_length"]) |
| 103 | + self.assertEqual(result, test_case["expected"]) |
| 104 | + |
66 | 105 | def test_array_compact_subobj(self):
|
67 | 106 | array = self.od[0x1003]
|
68 | 107 | self.assertIsInstance(array, canopen.objectdictionary.Array)
|
|
0 commit comments