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
« 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# --------------------------------------------------------------------------------------------------
10import pytest
12from hdl_registers.field.bit import Bit
15def test_get_value():
16 bit = Bit(name="", index=2, description="", default_value="1")
18 register_value = int("11110_11", base=2)
19 assert bit.get_value(register_value) == 0
21 register_value = int("00001_00", base=2)
22 assert bit.get_value(register_value) == 1
25def test_set_value():
26 bit = Bit(name="", index=0, description="", default_value="1")
27 assert bit.set_value(0b1) == 0b1
29 with pytest.raises(ValueError):
30 bit.set_value(0b11)
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
36 with pytest.raises(ValueError):
37 bit.set_value(0b11)
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"))
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 )
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 )
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 )
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 )
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
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 )
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 )
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 )
90def test_can_update_default_value():
91 bit = Bit(name="hest", index=0, description="", default_value="1")
92 assert bit.default_value == "1"
94 bit.default_value = "0"
95 assert bit.default_value == "0"
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")
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 )