@@ -75,6 +75,131 @@ bit_array.print() # 비트 순서 반전 출력
75
75
76
76
---
77
77
78
+ ``` python
79
+ # ###################################
80
+ # Unit test function
81
+ # ###################################
82
+ def runTests ():
83
+ print (" Testing BitArray class...\n " )
84
+
85
+ # Test: Constructor and clear
86
+ print (" Test: Constructor and clear" )
87
+ bit_array = BitArray([0b 11000000 ], 8 ) # decimal 192
88
+ bit_array.print() # 1100 0000
89
+ assert bit_array.size() == 8
90
+ bit_array.clear()
91
+ assert bit_array.size() == 0
92
+ assert bit_array.data() == []
93
+ print (" Passed\n " )
94
+
95
+ # Test: from_array and size
96
+ print (" Test: from_array and size" )
97
+ bit_array.from_array([0b 11110000 , 0b 10101010 ], 16 ) # decimal 240, 252
98
+ bit_array.print() # 1111 0000 1010 1010
99
+ assert bit_array.size() == 16
100
+ print (" Passed\n " )
101
+
102
+ # Test: set_bits
103
+ print (" Test: set_bits" )
104
+ new_bit_buffer_size = 10
105
+ bit_array.set_bits(new_bit_buffer_size)
106
+ bit_array.print() # 0000 0000 00
107
+ assert bit_array.size() == new_bit_buffer_size
108
+ assert all (bit == 0 for bit in bit_array.to_array())
109
+ print (" Passed\n " )
110
+
111
+ # Test: set_bytes
112
+ print (" Test: set_bytes" )
113
+ new_byte_buffer_size = 2
114
+ bit_array.set_bytes(new_byte_buffer_size)
115
+ bit_array.print() # 0000 0000 0000 0000
116
+ assert bit_array.size() == (new_byte_buffer_size* 8 )
117
+ assert all (bit == 0 for bit in bit_array.to_array())
118
+ print (" Passed\n " )
119
+
120
+ # Test: to_int_array
121
+ print (" Test: to_int_array" )
122
+ bit_array.from_array([0b 10101010 , 0b 11001100 ], 16 ) # decimal 170, 204
123
+ int_array = bit_array.to_int_array()
124
+ print (" Int Array:" , int_array) # [1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0]
125
+ assert int_array == [
126
+ 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 ,
127
+ 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0
128
+ ]
129
+ print (" Passed\n " )
130
+
131
+ # Test: get
132
+ print (" Test: get" )
133
+ sub_array = bit_array.get(4 , 8 )
134
+ # Data 1010 1010 1100 1100
135
+ # Offset 0123 4567 8901 2345
136
+ sub_array.print() # 1010 1100
137
+ assert sub_array.to_int_array() == [1 , 0 , 1 , 0 , 1 , 1 , 0 , 0 ]
138
+ print (" Passed\n " )
139
+
140
+ # Test: merge
141
+ print (" Test: merge" )
142
+ bit_array.clear()
143
+ bit_array.set_bits(16 )
144
+ merge_array = BitArray([0b 11110000 ], 8 )
145
+ assert bit_array.merge(merge_array, 4 )
146
+ bit_array.print() # 0000 1111 0000 0000
147
+ assert bit_array.to_int_array() == [
148
+ 0 , 0 , 0 , 0 ,
149
+ 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , # merge data
150
+ 0 , 0 , 0 , 0
151
+ ]
152
+ print (" Passed\n " )
153
+
154
+ # Test: operator +
155
+ print (" Test: operator +" )
156
+ array1 = BitArray([0b 11000000 ], 3 ) # 110
157
+ array2 = BitArray([0b 01000000 ], 2 ) # 01
158
+ combined = array1 + array2 # 110 + 01
159
+ combined.print() # 1100 1
160
+ assert combined.size() == 5
161
+ assert combined.to_array() == [1 , 1 , 0 , 0 , 1 ]
162
+ print (" Passed\n " )
163
+
164
+ combined = BitArray([0b 11100000 ], 5 ) # 이진수 1 1 1 0 0 (5 bit)
165
+
166
+ # Test: operator >>
167
+ print (" Test: operator >>" )
168
+ shifted_right = combined >> 2
169
+ shifted_right.print()
170
+ assert shifted_right.to_int_array() == [0 , 0 , 1 , 1 , 1 ]
171
+ print (" Passed\n " )
172
+
173
+ # Test: operator <<
174
+ print (" Test: operator <<" )
175
+ combined.print() # 11100
176
+ shifted_left = combined << 2
177
+ shifted_left.print() # 10000
178
+ assert shifted_left.to_int_array() == [1 , 0 , 0 , 0 , 0 ]
179
+ print (" Passed\n " )
180
+
181
+ # Test: reverser
182
+ print (" Test: reverser" )
183
+ reversed_array = BitArray([0b 11010000 , 0b 10100000 ], 10 )
184
+ reversed_array.print() # 1101 0000 10
185
+ reversed_array.reverser()
186
+ reversed_array.print() # 0100 0010 11
187
+ assert reversed_array.to_int_array() == [
188
+ 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 ]
189
+ print (" Passed\n " )
190
+
191
+ # Test: data
192
+ print (" Test: data" )
193
+ byte_data = reversed_array.data()
194
+ print (" Byte Data:" , byte_data)
195
+ assert byte_data == [0b 01000010 , 0b 11000000 ]
196
+ print (" Passed\n " )
197
+
198
+ print (" All tests passed!" )
199
+ ```
200
+
201
+ ---
202
+
78
203
### 활용 가능 분야
79
204
- ** 네트워크 프로토콜 분석** : 비트 기반의 데이터 패킷 처리.
80
205
- ** 파일 포맷 해석** : 바이너리 데이터 처리.
0 commit comments