def experiment_fill(n): sparse_array = SparseArray(n) seq = [i for i in range(n)] start_time = time.time() sparse_array.fill(seq) end_time = time.time() return end_time - start_time
class TestSparseArray(unittest.TestCase): #def __init__(self): # self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) def test_get(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) assert self.sa[4] == 2 def test_splice(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) assert self.sa[2:5] == (0,0,2) def test_set(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) self.sa[6] = 9 assert self.sa[6] == 9 def test_append(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) self.sa.append(7) assert self.sa[:] == (1,0,0,0,2,0,0,0,5,7) def test_del(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) del(self.sa[0]) assert self.sa[:] == (0,0,0,2,0,9,0,5)
class TestSparseArray(unittest.TestCase): def test_get(self): self.sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) assert self.sa[4] == 2 def test_splice(self): self.sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) assert self.sa[2:5] == [0, 0, 2] def test_splice_step(self): self.sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) assert self.sa[0:6:2] == [1, 0, 2] def test_set(self): self.sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) self.sa[6] = 9 assert self.sa[6] == 9 def test_append(self): self.sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) self.sa.append(7) assert self.sa[:] == [1, 0, 0, 0, 2, 0, 0, 0, 5, 7] def test_del(self): self.sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) del (self.sa[0]) assert self.sa[:] == [0, 0, 0, 2, 0, 0, 0, 5]
def test_eq(): ## good to define __eq__ early, so you can use it in tests sa1 = SparseArray([0, 2, 4, 0, 1]) sa2 = SparseArray([0, 2, 4, 0, 1]) sa3 = SparseArray([0, 2, 3, 0, 1]) assert sa1 == sa2 assert not sa1 == sa3
def test_set_index3(): sa = SparseArray([0, 1, 0, 2, 0, 3]) sa[-1] = 0 assert sa == SparseArray([0, 1, 0, 2, 0, 0]) with pytest.raises(IndexError): sa[-8] = 8
def test_index(): sa1 = SparseArray([1, 0, 4, 0, 0, 5, 0, 6]) sa2 = SparseArray([0, 3, 6, 3, 0, 0, 8, 0, 9, 0, 0]) assert sa1[1] == 0 assert sa2[10] == 0 assert sa1[5] == 5 print(sa2[3], sa2[4], sa2[5]) assert sa2[3] == 3
def test_delete(): sa = SparseArray([1, 2, 3, 4]) del sa[2] assert sa[1] == 2 assert sa[2] == 4 sa2 = SparseArray([1, 0, 0, 4, 5, 3]) del sa2[1] print(sa2) assert sa2[2] == 4
def test_set_element_outside(): """ if an element is set outside the current size, the array is expanded to fit - makes sense for sparse, as yo know the missing values are zero """ sa = SparseArray([1, 0, 2]) sa[5] = 2 assert len(sa) == 6 assert sa == SparseArray([1, 0, 2, 0, 0, 2]) # add one just on the end sa[6] = 10 assert sa[6] == 10 assert sa == SparseArray([1, 0, 2, 0, 0, 2, 10])
def test_slice(): sp = SparseArray(test_list) assert sp[1::2] == test_list[1::2] assert sp[::-1] == test_list[::-1] assert sp[::] == test_list[::] assert sp[0:3] == test_list[0:3] assert sp[6:0:-2] == test_list[6:0:-2]
def test_initial_storage(): sp = SparseArray(test_list) assert 0 not in sp.storage.values() assert len(sp) == len(test_list) for i in range(len(test_list)): assert test_list[i] == sp[i]
def test_add(): sa = SparseArray([0, 1, 0]) answer = sa.size answer += 1 assert answer == 4
def experiment_setitem(n): sparse_array = SparseArray(n) for i in range(n): sparse_array[i - 1] = i start_time = time.time() sparse_array[n - 1] = "This one" end_time = time.time() return end_time - start_time
def test_get_index(): sa = SparseArray([0, 1, 2, 3, 4, 0]) assert sa[0] == 0 assert sa[2] == 2 assert sa[5] == 0 assert sa[-1] == 0 assert sa[-2] == 4
def test_getvalue(): sa = SparseArray([7,29,0,0,0,0,13,0,0,72]) test_a = sa[6] test_b = sa[1] test_c = sa[5] assert test_a == 13 assert test_b == 29 assert test_c == 0
def test_sparsearray_del(): """ Tests that you can delete an element from the sparse array """ sa = SparseArray(my_array) del sa[4] print(sa) assert sa[4] == 0 assert len(sa) == 8
def experiment_getitem(n): sparse_array = SparseArray(n) for i, e in enumerate([i for i in range(n)]): sparse_array[i] = e start_time = time.time() x = sparse_array[n - 1] end_time = time.time() return end_time - start_time
def test_set_item(): sa = SparseArray([1, 0, 4, 0, 0, 5, 0, 6]) assert sa[1] == 0 sa[1] = 2 assert sa[1] == 2 print("pre addition: " + str(len(sa))) sa[10] = 0 print(len(sa)) print(sa[10]) assert sa[8] == 0 assert sa[10] == 0
def test_construction(): sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) assert len(sa) == 9 assert sa[0] == 1 assert sa[1] == 0 assert sa[2] == 0 assert sa[3] == 0 assert sa[4] == 2 assert sa[5] == 0 assert sa[6] == 0 assert sa[7] == 0 assert sa[8] == 5
def test_append(): sa = SparseArray([0, 1, 0, 3, 4, 0]) assert len(sa) == 6 sa.append(8) assert len(sa) == 7 assert sa == SparseArray([0, 1, 0, 3, 4, 0, 8]) assert sa != SparseArray([0, 1, 0, 3, 4, 0])
def test_append(): sp = SparseArray(test_list) sp.append(20) assert sp[len(sp) - 1] == 20 sp.append(0) assert sp[len(sp) - 1] == 0 assert 0 not in sp.storage.values()
def test_set_item(): sp = SparseArray(test_list) assert test_list[3] == sp[3] sp[3] = 9 assert test_list[3] != sp[3] assert sp[3] == 9 sp[2] = 9 assert test_list[2] != sp[2] assert sp[2] == 9 sp[0] = 0 assert sp[0] == 0 assert 0 not in sp.storage.values()
def test_set_item_out_of_range(): sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) try: sa[9] = 1 except IndexError: pass else: assert False try: sa[10] = 0 except IndexError: pass else: assert False
def test_set_item(): sa = SparseArray((1, 0, 0, 0, 2, 0, 0, 0, 5)) sa[1] = 2 sa[4] = 0 sa[7] = 10 sa[8] = 6 assert len(sa) == 9 assert sa[0] == 1 assert sa[1] == 2 assert sa[2] == 0 assert sa[3] == 0 assert sa[4] == 0 assert sa[5] == 0 assert sa[6] == 0 assert sa[7] == 10 assert sa[8] == 6
def test_exceptions(): sp = SparseArray(test_list) try: sp[300] except IndexError as ie: assert str(ie) == "SparseArray index out of range." try: sp[900] = 2353 except IndexError as ie: assert str(ie) == "SparseArray index out of range." try: sp[-80] = 2 except IndexError as ie: assert str(ie) == "SparseArray index out of range." try: sp["Cresenta"] except TypeError as te: assert str(te) == "SparseArray indicies must be integers or slices, not str"
def test_append(): a = SA([1,0,0,0,0,3,0,0,0,4,0,5]) a.append(8) assert a[12] == 8
def test_del(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) del(self.sa[0]) assert self.sa[:] == (0,0,0,2,0,9,0,5)
def test_append(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) self.sa.append(7) assert self.sa[:] == (1,0,0,0,2,0,0,0,5,7)
def test_set(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) self.sa[6] = 9 assert self.sa[6] == 9
def test_splice(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) assert self.sa[2:5] == (0,0,2)
def test_get(self): self.sa = SparseArray( (1,0,0,0,2,0,0,0,5) ) assert self.sa[4] == 2
def test_append_array(): a = SA([1,0,0,0,0,3,0,0,0,4,0,5]) a.append([0,9]) assert a[12] == 0 assert a[13] == 9 assert a.length == 14
app = Flask(__name__) api = Api(app) one_result = api.model('Occurrence', { 'word': fields.String, 'occurrence': fields.String, }) results_fields = api.model('Result', { 'result': fields.List(fields.Nested(one_result)), }) parser = reqparse.RequestParser() parser.add_argument('query', type=str, help='words separated by comma, ex: x,y,z') sparse_array = SparseArray(os.environ['INPUT']) @api.route('/api') class HelloWorld(Resource): @api.marshal_with(results_fields) @api.expect(parser) def get(self): args = parser.parse_args() result = sparse_array.compute(args['query'].split(",")) output = [] for word, occurrence in result.items(): output.append({'word': word, 'occurrence': occurrence}) return {'result': output}
def test_append0(): a = SA([1,0,0,0,0,3,0,0,0,4,0,5]) a.append(0) assert a[12] == 0 assert a.length == 13