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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license
import unittest
import dns.serial
def S2(v):
return dns.serial.Serial(v, bits=2)
def S8(v):
return dns.serial.Serial(v, bits=8)
class SerialTestCase(unittest.TestCase):
def test_rfc_1982_2_bit_cases(self):
self.assertEqual(S2(0) + S2(1), S2(1))
self.assertEqual(S2(1) + S2(1), S2(2))
self.assertEqual(S2(2) + S2(1), S2(3))
self.assertEqual(S2(3) + S2(1), S2(0))
self.assertTrue(S2(1) > S2(0))
self.assertTrue(S2(2) > S2(1))
self.assertTrue(S2(3) > S2(2))
self.assertTrue(S2(0) > S2(3))
self.assertFalse(S2(2) > S2(0))
self.assertFalse(S2(0) > S2(2))
self.assertFalse(S2(2) < S2(0))
self.assertFalse(S2(0) < S2(2))
def test_rfc_1982_8_bit_cases(self):
self.assertEqual(S8(255) + S8(1), S8(0))
self.assertEqual(S8(100) + S8(100), S8(200))
self.assertEqual(S8(200) + S8(100), S8(44))
self.assertTrue(S8(1) > S8(0))
self.assertTrue(S8(44) > S8(0))
self.assertTrue(S8(100) > S8(0))
self.assertTrue(S8(100) > S8(44))
self.assertTrue(S8(200) > S8(100))
self.assertTrue(S8(255) > S8(200))
self.assertTrue(S8(0) > S8(255))
self.assertTrue(S8(255) < S8(0))
self.assertTrue(S8(100) > S8(255))
self.assertTrue(S8(0) > S8(200))
self.assertTrue(S8(44) > S8(200))
self.assertFalse(S8(0) > S8(128))
self.assertFalse(S8(128) > S8(0))
self.assertFalse(S8(0) < S8(128))
self.assertFalse(S8(128) < S8(0))
self.assertFalse(S8(1) > S8(129))
self.assertFalse(S8(129) > S8(1))
def test_incremental_ops(self):
v = S8(255)
v += 1
self.assertEqual(v, 0)
v = S8(255)
v += S8(1)
self.assertEqual(v, 0)
v = S8(0)
v -= 1
self.assertEqual(v, 255)
v = S8(0)
v -= S8(1)
self.assertEqual(v, 255)
def test_sub(self):
self.assertEqual(S8(0) - S8(1), S8(255))
def test_addition_bounds(self):
self.assertRaises(ValueError, lambda: S8(0) + 128)
self.assertRaises(ValueError, lambda: S8(0) - 128)
def bad1():
v = S8(0)
v += 128
self.assertRaises(ValueError, bad1)
def bad2():
v = S8(0)
v -= 128
self.assertRaises(ValueError, bad2)
def test_casting(self):
self.assertTrue(S8(0) == 0)
self.assertTrue(S8(0) != 1)
self.assertTrue(S8(0) < 1)
self.assertTrue(S8(0) <= 1)
self.assertTrue(S8(0) > 255)
self.assertTrue(S8(0) >= 255)
def test_uncastable(self):
self.assertRaises(ValueError, lambda: S8(0) + "a")
self.assertRaises(ValueError, lambda: S8(0) - "a")
def bad1():
v = S8(0)
v += "a"
self.assertRaises(ValueError, bad1)
def bad2():
v = S8(0)
v -= "a"
self.assertRaises(ValueError, bad2)
def test_uncomparable(self):
self.assertFalse(S8(0) == S2(0))
self.assertFalse(S8(0) == "a")
self.assertTrue(S8(0) != "a")
self.assertRaises(TypeError, lambda: S8(0) < "a")
self.assertRaises(TypeError, lambda: S8(0) <= "a")
self.assertRaises(TypeError, lambda: S8(0) > "a")
self.assertRaises(TypeError, lambda: S8(0) >= "a")
def test_modulo(self):
self.assertEqual(S8(-1), 255)
self.assertEqual(S8(257), 1)
def test_repr(self):
self.assertEqual(repr(S8(1)), "dns.serial.Serial(1, 8)")
def test_not_equal(self):
self.assertNotEqual(S8(0), S8(1))
self.assertNotEqual(S8(0), S2(0))
|