bits/tests/test_bit.py

83 lines
3.0 KiB
Python

from unittest import TestCase
from .context import Bit
class TestBit(TestCase):
def setUp(self):
self.true = ["1", 1, True]
self.false = ["0", 0, False]
pass
def test_init(self):
"""
Test creation of bit object
"""
for t in self.true:
self.assertTrue(Bit(t), f"Bit({t}) == True")
for f in self.false:
self.assertFalse(Bit(f), f"Bit({f}) == False")
def test_conversion(self):
"""
Test the conversion methods
"""
self.assertEqual(str(Bit(True)), "1", f'str(Bit(True)) == "1"')
self.assertEqual(str(Bit(False)), "0", f'str(Bit(False)) == "0"')
self.assertEqual(int(Bit(True)), 1, f'int(Bit(True)) == 1')
self.assertEqual(int(Bit(False)), 0, f'int(Bit(False)) == 0')
self.assertEqual(bool(Bit(True)), True, f'bool(Bit(True)) == True')
self.assertEqual(bool(Bit(False)), False, f'bool(Bit(False)) == False')
def test_comparison(self):
"""
Test the comparison operators
"""
self.assertNotEqual(Bit(False), Bit(True), 'Bit(False) != Bit(True)')
self.assertNotEqual(Bit(True), Bit(False), 'Bit(True) != Bit(False)')
self.assertLess(Bit(False), Bit(True), 'Bit(False) < Bit(True)')
self.assertGreater(Bit(True), Bit(False), 'Bit(True) > Bit(False)')
self.assertLessEqual(Bit(False), Bit(True), 'Bit(False) <= Bit(True)')
self.assertLessEqual(Bit(True), Bit(True), 'Bit(True) <= Bit(True)')
self.assertLessEqual(Bit(False), Bit(False),
'Bit(False) <= Bit(False)')
self.assertGreaterEqual(Bit(True), Bit(False),
'Bit(True) >= Bit(False)')
self.assertGreaterEqual(Bit(True), Bit(True),
'Bit(True) >= Bit(True)')
self.assertGreaterEqual(Bit(False), Bit(False),
'Bit(False) >= Bit(False)')
def test_lie(self):
"""
Test the lie function/property
"""
self.assertFalse(Bit(True).lie, "Bit(True).lie == False")
self.assertTrue(Bit(False).lie, "Bit(False).lie == True")
def test_toggle(self):
"""
Test the toggle function
"""
var = Bit(True)
var.toggle()
self.assertFalse(var, "Bit(True).toggle() == False")
var.toggle()
self.assertTrue(var, "Bit(False).toggle() == True")
def test_errors(self):
"""
Test that errors are raised for invalid values
"""
with self.subTest("Raise TypeError"):
self.assertRaises(TypeError, Bit, 12.7)
self.assertRaises(TypeError, Bit, b'xyz')
self.assertRaises(TypeError, Bit, [True, False])
self.assertRaises(TypeError, Bit, [True])
with self.subTest("Raise ValueError"):
self.assertRaises(ValueError, Bit, "2")
self.assertRaises(ValueError, Bit, 2)
self.assertRaises(ValueError, Bit, -1)
self.assertRaises(ValueError, Bit, "-2")