Coverage for hdl_registers/field/test/test_bit.py: 100%

47 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-03-12 11:11 +0000

1# -------------------------------------------------------------------------------------------------- 

2# Copyright (c) Lukas Vik. All rights reserved. 

3# 

4# This file is part of the hdl-registers project, an HDL register generator fast enough to run 

5# in real time. 

6# https://hdl-registers.com 

7# https://github.com/hdl-registers/hdl-registers 

8# -------------------------------------------------------------------------------------------------- 

9 

10import pytest 

11 

12from hdl_registers.field.bit import Bit 

13 

14 

15def test_get_value(): 

16 bit = Bit(name="", index=2, description="", default_value="1") 

17 

18 register_value = int("11110_11", base=2) 

19 assert bit.get_value(register_value) == 0 

20 

21 register_value = int("00001_00", base=2) 

22 assert bit.get_value(register_value) == 1 

23 

24 

25def test_set_value(): 

26 bit = Bit(name="", index=0, description="", default_value="1") 

27 assert bit.set_value(0b1) == 0b1 

28 

29 with pytest.raises(ValueError): 

30 bit.set_value(0b11) 

31 

32 bit = Bit(name="", index=4, description="", default_value="0") 

33 assert bit.set_value(0b0) == 0b0 

34 assert bit.set_value(0b1) == 0b1_0000 

35 

36 with pytest.raises(ValueError): 

37 bit.set_value(0b11) 

38 

39 

40def test_repr(): 

41 # Check that repr is an actual representation, not just "X object at 0xABCDEF" 

42 assert "apa" in repr(Bit(name="apa", index=0, description="", default_value="0")) 

43 

44 # Different name 

45 assert repr(Bit(name="apa", index=0, description="", default_value="0")) != repr( 

46 Bit(name="hest", index=0, description="", default_value="0") 

47 ) 

48 

49 # Different index 

50 assert repr(Bit(name="apa", index=0, description="", default_value="0")) != repr( 

51 Bit(name="apa", index=1, description="", default_value="0") 

52 ) 

53 

54 # Different description 

55 assert repr(Bit(name="apa", index=0, description="Blah", default_value="0")) != repr( 

56 Bit(name="apa", index=0, description="Gaah", default_value="0") 

57 ) 

58 

59 # Different default_value 

60 assert repr(Bit(name="apa", index=0, description="", default_value="1")) != repr( 

61 Bit(name="apa", index=0, description="", default_value="0") 

62 ) 

63 

64 

65def test_default_value_uint(): 

66 assert Bit(name="apa", index=0, description="", default_value="1").default_value_uint == 1 

67 assert Bit(name="apa", index=0, description="", default_value="0").default_value_uint == 0 

68 

69 

70def test_invalid_default_value_should_raise_exception(): 

71 with pytest.raises(TypeError) as exception_info: 

72 Bit(name="hest", index=0, description="", default_value=1) 

73 assert str(exception_info.value) == ( 

74 'Bit "hest" should have string value for "default_value". Got "1".' 

75 ) 

76 

77 with pytest.raises(ValueError) as exception_info: 

78 Bit(name="hest", index=0, description="", default_value="11") 

79 assert str(exception_info.value) == ( 

80 'Bit "hest" invalid binary value for "default_value". Got: "11".' 

81 ) 

82 

83 with pytest.raises(ValueError) as exception_info: 

84 Bit(name="hest", index=0, description="", default_value="2") 

85 assert str(exception_info.value) == ( 

86 'Bit "hest" invalid binary value for "default_value". Got: "2".' 

87 ) 

88 

89 

90def test_can_update_default_value(): 

91 bit = Bit(name="hest", index=0, description="", default_value="1") 

92 assert bit.default_value == "1" 

93 

94 bit.default_value = "0" 

95 assert bit.default_value == "0" 

96 

97 

98def test_updating_to_invalid_default_value_should_raise_exception(): 

99 # Create with a valid default_value 

100 bit = Bit(name="hest", index=0, description="", default_value="1") 

101 

102 # Update to an invalid value 

103 with pytest.raises(ValueError) as exception_info: 

104 bit.default_value = "2" 

105 assert str(exception_info.value) == ( 

106 'Bit "hest" invalid binary value for "default_value". Got: "2".' 

107 )