Coverage for hdl_registers/generator/test/test_register_code_generator_helpers.py: 100%
51 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-29 06:41 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-29 06:41 +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.generator.register_code_generator_helpers import RegisterCodeGeneratorHelpers
13from hdl_registers.register import Register
14from hdl_registers.register_modes import REGISTER_MODES
17def test_register_utilized_width():
18 register = Register(name="apa", index=0, mode=REGISTER_MODES["r"], description="")
20 assert RegisterCodeGeneratorHelpers.register_utilized_width(register) == 32
22 register.append_bit(name="a", description="", default_value="1")
23 assert RegisterCodeGeneratorHelpers.register_utilized_width(register) == 1
25 register.append_bit_vector(name="b", description="", width=2, default_value="11")
26 assert RegisterCodeGeneratorHelpers.register_utilized_width(register) == 3
28 register.append_enumeration(
29 name="c", description="", elements={"d": "", "e": "", "f": ""}, default_value="d"
30 )
31 assert RegisterCodeGeneratorHelpers.register_utilized_width(register) == 5
33 register.append_integer(name="g", description="", min_value=0, max_value=10, default_value=0)
34 assert RegisterCodeGeneratorHelpers.register_utilized_width(register) == 9
37def test_register_default_value_uint():
38 register = Register(name="apa", index=0, mode=REGISTER_MODES["r"], description="")
39 register.append_bit(name="foo", description="", default_value="1")
40 register.append_bit(name="foo", description="", default_value="0")
41 register.append_bit(name="foo", description="", default_value="1")
42 register.append_bit_vector(name="foo", description="", width=4, default_value="0110")
43 register.append_bit_vector(name="foo", description="", width=4, default_value="0101")
45 assert (
46 RegisterCodeGeneratorHelpers.register_default_value_uint(register)
47 == 1 * 2**0 + 1 * 2**2 + 6 * 2**3 + 5 * 2**7
48 )
51def test_default_value_can_be_updated():
52 register = Register(name="apa", index=0, mode=REGISTER_MODES["r"], description="")
53 register.append_bit(name="foo", description="", default_value="1")
55 assert RegisterCodeGeneratorHelpers.register_default_value_uint(register) == 1
57 register.fields[0].default_value = "0"
58 assert RegisterCodeGeneratorHelpers.register_default_value_uint(register) == 0
61def test_field_setter_should_read_modify_write():
62 register = Register(name="", index=0, mode=REGISTER_MODES["r_w"], description="")
64 register.append_bit(name="", description="", default_value="0")
65 assert not RegisterCodeGeneratorHelpers.field_setter_should_read_modify_write(register)
67 register.append_bit(name="", description="", default_value="0")
68 assert RegisterCodeGeneratorHelpers.field_setter_should_read_modify_write(register)
70 register.append_bit(name="", description="", default_value="0")
71 assert RegisterCodeGeneratorHelpers.field_setter_should_read_modify_write(register)
74def test_field_setter_should_read_modify_write_should_raise_exception_if_there_are_no_fields():
75 register = Register(name="", index=0, mode=REGISTER_MODES["r_w"], description="")
77 with pytest.raises(ValueError) as exception_info:
78 RegisterCodeGeneratorHelpers.field_setter_should_read_modify_write(register)
79 assert str(exception_info.value) == "Should not end up here if the register has no fields."
82def test_field_setter_should_read_modify_write_raise_exception_if_the_register_is_not_writable():
83 register = Register(name="", index=0, mode=REGISTER_MODES["r"], description="")
84 register.append_bit(name="", description="", default_value="0")
86 with pytest.raises(ValueError) as exception_info:
87 RegisterCodeGeneratorHelpers.field_setter_should_read_modify_write(register)
88 assert str(exception_info.value).startswith("Got non-writeable register:")
91def test_to_pascal_case():
92 assert RegisterCodeGeneratorHelpers.to_pascal_case("test") == "Test"
93 assert RegisterCodeGeneratorHelpers.to_pascal_case("test_two") == "TestTwo"