|
#!/usr/bin/env python |
|
|
|
from unittest import TestCase, main |
|
from code import * |
|
|
|
class Test256Encoding(TestCase): |
|
|
|
def test_reduce_number_to_one_byte(self): |
|
self.assertEqual( |
|
'A', |
|
number_to_byte(65) |
|
) |
|
|
|
def test_large_number_to_byte(self): |
|
self.assertEqual( |
|
'\xf0', |
|
number_to_byte(240) |
|
) |
|
|
|
def test_empty_arr_to_bytes(self): |
|
self.assertEqual('', arr_to_bytes([])) |
|
|
|
def test_any_arr_to_bytes(self): |
|
self.assertEqual( |
|
'A', |
|
arr_to_bytes([65]) |
|
) |
|
|
|
self.assertEqual( |
|
'A\xf0', |
|
arr_to_bytes([65, 240]) |
|
) |
|
|
|
self.assertEqual( |
|
'A\x00C\xff', |
|
arr_to_bytes([65, 0, 67, 255]) |
|
) |
|
|
|
def test_points_to_bytes(self): |
|
self.assertEqual( |
|
'', |
|
points_to_bytes([]) |
|
) |
|
|
|
self.assertEqual( |
|
'\x00\x00', |
|
points_to_bytes([[0, 0]]) |
|
) |
|
|
|
self.assertEqual( |
|
'AC\x00\x00', |
|
points_to_bytes([[65, 67], [0, 0]]) |
|
) |
|
|
|
def test_points_header(self): |
|
self.assertEqual( |
|
'\x00' * 6, |
|
points_header(0, 0, 0) |
|
) |
|
|
|
self.assertEqual( |
|
'\x01\x04\x00\x02\x00\xff', |
|
points_header(1025, 512, -256) |
|
) |
|
|
|
def setUp(self): |
|
self.arr1 = [[65, 67], [0, 0]] |
|
self.arr2 = [[512, -256], [(512+255), -2], [513, -250]] |
|
self.arr3 = [self.arr2[0], self.arr1[0], self.arr2[1], self.arr1[1], self.arr2[2]] |
|
|
|
def test_square_to_bytes(self): |
|
self.assertEqual( |
|
square_to_bytes(0, 0, []), |
|
'\x00' * 6 |
|
) |
|
|
|
self.assertEqual( |
|
square_to_bytes(0, 0, self.arr1), |
|
'\x02\x00\x00\x00\x00\x00AC\x00\x00' |
|
) |
|
|
|
self.assertEqual( |
|
square_to_bytes(512, -256, self.arr2), |
|
'\x03\x00\x00\x02\x00\xff\x00\x00\xff\xfe\x01\x06' |
|
) |
|
|
|
def test_split_to_squares(self): |
|
self.assertEqual( |
|
split_to_squares([]), |
|
{} |
|
) |
|
|
|
self.assertEqual( |
|
split_to_squares(self.arr1), |
|
{(0, 0): self.arr1} |
|
) |
|
|
|
self.assertEqual( |
|
split_to_squares(self.arr2), |
|
{(512, -256): self.arr2} |
|
) |
|
|
|
self.assertEqual( |
|
split_to_squares(self.arr3), |
|
{ |
|
(0, 0): self.arr1, |
|
(512, -256): self.arr2 |
|
} |
|
) |
|
|
|
def test_points_to_bytes(self): |
|
self.assertEqual( |
|
points_to_256_squares([]), |
|
'' |
|
) |
|
|
|
self.assertEqual( |
|
points_to_256_squares([[0, 0]]), |
|
'\x01\x00' + '\x00' * 4 + '\x00' * 2 |
|
) |
|
|
|
self.assertEqual( |
|
points_to_256_squares(self.arr1), |
|
'\x02\x00\x00\x00\x00\x00AC\x00\x00' |
|
) |
|
|
|
self.assertEqual( |
|
points_to_256_squares(self.arr2), |
|
'\x03\x00\x00\x02\x00\xff\x00\x00\xff\xfe\x01\x06' |
|
) |
|
|
|
self.assertEqual( |
|
points_to_256_squares(self.arr3), |
|
'\x03\x00\x00\x02\x00\xff\x00\x00\xff\xfe\x01\x06' + \ |
|
'\x02\x00\x00\x00\x00\x00AC\x00\x00' |
|
) |
|
|
|
def test_large_file(self): |
|
lines = open('ints.csv').readlines() |
|
lines = [l.split(',') for l in lines] |
|
points = [[int(l[0]), int(l[1])] for l in lines] |
|
|
|
self.assertEqual(len(points), 50000) |
|
self.assertEqual( |
|
len(points_to_256_squares(points)), |
|
109600 |
|
) |
|
|
|
if __name__ == '__main__': |
|
main() |