Coverage for tsfpga/test/test_math_utils.py: 100%

99 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-02-21 20:51 +0000

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

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

3# 

4# This file is part of the tsfpga project, a project platform for modern FPGA development. 

5# https://tsfpga.com 

6# https://github.com/tsfpga/tsfpga 

7# -------------------------------------------------------------------------------------------------- 

8 

9import pytest 

10 

11from tsfpga.math_utils import ( 

12 to_binary_nibble_string, 

13 to_binary_string, 

14 to_hex_byte_string, 

15 to_hex_string, 

16) 

17 

18 

19def test_to_binary_string(): 

20 assert to_binary_string(value=0, result_width=1) == "0" 

21 assert to_binary_string(value=1, result_width=1) == "1" 

22 assert to_binary_string(value=2, result_width=3) == "010" 

23 assert to_binary_string(value=15, result_width=4) == "1111" 

24 assert to_binary_string(value=0, result_width=5) == "00000" 

25 

26 

27def test_to_binary_string_width_out_of_range_should_raise_exception(): 

28 with pytest.raises(ValueError) as exception_info: 

29 to_binary_string(value=15, result_width=0) 

30 assert str(exception_info.value) == 'Invalid result width "0".' 

31 

32 with pytest.raises(ValueError) as exception_info: 

33 to_binary_string(value=-7, result_width=-3) 

34 assert str(exception_info.value) == 'Invalid result width "-3".' 

35 

36 

37def test_to_binary_string_value_out_of_range_should_raise_exception(): 

38 with pytest.raises(ValueError) as exception_info: 

39 to_binary_string(value=15, result_width=3) 

40 assert str(exception_info.value) == 'Value "15" out of 3-bit range.' 

41 

42 with pytest.raises(ValueError) as exception_info: 

43 to_binary_string(value=-7, result_width=10) 

44 assert str(exception_info.value) == 'Value "-7" out of 10-bit range.' 

45 

46 

47def test_to_binary_nibble_string(): 

48 assert to_binary_nibble_string(value=0, result_width_bits=1) == "0" 

49 assert to_binary_nibble_string(value=1, result_width_bits=1) == "1" 

50 

51 assert to_binary_nibble_string(value=2, result_width_bits=3) == "010" 

52 assert to_binary_nibble_string(value=7, result_width_bits=3) == "111" 

53 

54 assert to_binary_nibble_string(value=15, result_width_bits=4) == "1111" 

55 

56 assert to_binary_nibble_string(value=0, result_width_bits=5) == "0_0000" 

57 assert to_binary_nibble_string(value=16, result_width_bits=5) == "1_0000" 

58 

59 assert to_binary_nibble_string(value=265, result_width_bits=9) == "1_0000_1001" 

60 assert to_binary_nibble_string(value=565, result_width_bits=10) == "10_0011_0101" 

61 assert to_binary_nibble_string(value=565, result_width_bits=12) == "0010_0011_0101" 

62 assert to_binary_nibble_string(value=2345, result_width_bits=12) == "1001_0010_1001" 

63 

64 assert to_binary_nibble_string(value=5345, result_width_bits=13) == "1_0100_1110_0001" 

65 

66 

67def test_to_binary_nibble_string_width_out_of_range_should_raise_exception(): 

68 with pytest.raises(ValueError) as exception_info: 

69 to_binary_nibble_string(value=15, result_width_bits=0) 

70 assert str(exception_info.value) == 'Invalid result width "0".' 

71 

72 with pytest.raises(ValueError) as exception_info: 

73 to_binary_nibble_string(value=-7, result_width_bits=-3) 

74 assert str(exception_info.value) == 'Invalid result width "-3".' 

75 

76 

77def test_to_binary_nibble_string_value_out_of_range_should_raise_exception(): 

78 with pytest.raises(ValueError) as exception_info: 

79 to_binary_nibble_string(value=15, result_width_bits=3) 

80 assert str(exception_info.value) == 'Value "15" out of 3-bit range.' 

81 

82 with pytest.raises(ValueError) as exception_info: 

83 to_binary_nibble_string(value=-7, result_width_bits=10) 

84 assert str(exception_info.value) == 'Value "-7" out of 10-bit range.' 

85 

86 

87def test_to_hex_string(): 

88 assert to_hex_string(value=0, result_width_bits=1) == "0" 

89 assert to_hex_string(value=1, result_width_bits=1) == "1" 

90 assert to_hex_string(value=2, result_width_bits=3) == "2" 

91 assert to_hex_string(value=2, result_width_bits=4) == "2" 

92 assert to_hex_string(value=2, result_width_bits=5) == "02" 

93 assert to_hex_string(value=15, result_width_bits=4) == "F" 

94 assert to_hex_string(value=0, result_width_bits=5) == "00" 

95 

96 

97def test_to_hex_string_width_out_of_range_should_raise_exception(): 

98 with pytest.raises(ValueError) as exception_info: 

99 to_hex_string(value=15, result_width_bits=0) 

100 assert str(exception_info.value) == 'Invalid result width "0".' 

101 

102 with pytest.raises(ValueError) as exception_info: 

103 to_hex_string(value=-7, result_width_bits=-3) 

104 assert str(exception_info.value) == 'Invalid result width "-3".' 

105 

106 

107def test_to_hex_string_value_out_of_range_should_raise_exception(): 

108 with pytest.raises(ValueError) as exception_info: 

109 to_hex_string(value=15, result_width_bits=3) 

110 assert str(exception_info.value) == 'Value "15" out of 3-bit range.' 

111 

112 with pytest.raises(ValueError) as exception_info: 

113 to_hex_string(value=-7, result_width_bits=10) 

114 assert str(exception_info.value) == 'Value "-7" out of 10-bit range.' 

115 

116 

117def test_to_hex_byte_string(): 

118 assert to_hex_byte_string(value=0, result_width_bits=1) == "0" 

119 assert to_hex_byte_string(value=1, result_width_bits=1) == "1" 

120 

121 assert to_hex_byte_string(value=2, result_width_bits=3) == "2" 

122 assert to_hex_byte_string(value=7, result_width_bits=3) == "7" 

123 

124 assert to_hex_byte_string(value=15, result_width_bits=4) == "F" 

125 

126 assert to_hex_byte_string(value=0, result_width_bits=5) == "00" 

127 assert to_hex_byte_string(value=15, result_width_bits=5) == "0F" 

128 assert to_hex_byte_string(value=16, result_width_bits=5) == "10" 

129 

130 assert to_hex_byte_string(value=265, result_width_bits=9) == "1_09" 

131 assert to_hex_byte_string(value=565, result_width_bits=10) == "2_35" 

132 assert to_hex_byte_string(value=565, result_width_bits=12) == "2_35" 

133 assert to_hex_byte_string(value=2345, result_width_bits=12) == "9_29" 

134 

135 assert to_hex_byte_string(value=5345, result_width_bits=13) == "14_E1" 

136 

137 

138def test_to_hex_byte_string_width_out_of_range_should_raise_exception(): 

139 with pytest.raises(ValueError) as exception_info: 

140 to_hex_byte_string(value=15, result_width_bits=0) 

141 assert str(exception_info.value) == 'Invalid result width "0".' 

142 

143 with pytest.raises(ValueError) as exception_info: 

144 to_hex_byte_string(value=-7, result_width_bits=-3) 

145 assert str(exception_info.value) == 'Invalid result width "-3".' 

146 

147 

148def test_to_hex_byte_string_value_out_of_range_should_raise_exception(): 

149 with pytest.raises(ValueError) as exception_info: 

150 to_hex_byte_string(value=15, result_width_bits=3) 

151 assert str(exception_info.value) == 'Value "15" out of 3-bit range.' 

152 

153 with pytest.raises(ValueError) as exception_info: 

154 to_hex_byte_string(value=-7, result_width_bits=10) 

155 assert str(exception_info.value) == 'Value "-7" out of 10-bit range.'