Test operations for given field_size.
(self, field_size)
| 140 | """Test class for basic arithmetic properties of GF2Ops.""" |
| 141 | |
| 142 | def field_size_test(self, field_size): |
| 143 | """Test operations for given field_size.""" |
| 144 | |
| 145 | gf = GF2Ops(field_size) |
| 146 | for i in range(100): |
| 147 | x = random.randrange(1 << field_size) |
| 148 | y = random.randrange(1 << field_size) |
| 149 | x2 = gf.mul2(x) |
| 150 | xy = gf.mul(x, y) |
| 151 | self.assertEqual(x2, gf.mul(x, 2)) # mul2(x) == x*2 |
| 152 | self.assertEqual(x2, gf.mul(2, x)) # mul2(x) == 2*x |
| 153 | self.assertEqual(xy == 0, x == 0 or y == 0) |
| 154 | self.assertEqual(xy == x, y == 1 or x == 0) |
| 155 | self.assertEqual(xy == y, x == 1 or y == 0) |
| 156 | self.assertEqual(xy, gf.mul(y, x)) # x*y == y*x |
| 157 | if i < 10: |
| 158 | xp = x |
| 159 | for _ in range(field_size): |
| 160 | xp = gf.sqr(xp) |
| 161 | self.assertEqual(xp, x) # x^(2^field_size) == x |
| 162 | if y != 0: |
| 163 | yi = gf.inv(y) |
| 164 | self.assertEqual(y == yi, y == 1) # y==1/x iff y==1 |
| 165 | self.assertEqual(gf.mul(y, yi), 1) # y*(1/y) == 1 |
| 166 | yii = gf.inv(yi) |
| 167 | self.assertEqual(y, yii) # 1/(1/y) == y |
| 168 | if x != 0: |
| 169 | xi = gf.inv(x) |
| 170 | xyi = gf.inv(xy) |
| 171 | self.assertEqual(xyi, gf.mul(xi, yi)) # (1/x)*(1/y) == 1/(x*y) |
| 172 | |
| 173 | def test(self): |
| 174 | """Run tests.""" |