@@ -75,6 +75,131 @@ bit_array.print() # 비트 순서 반전 출력
7575
7676---
7777
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+
78203### 활용 가능 분야
79204- ** 네트워크 프로토콜 분석** : 비트 기반의 데이터 패킷 처리.
80205- ** 파일 포맷 해석** : 바이너리 데이터 처리.
0 commit comments