def test_base(self): block = uuid_generator.create('user'), uuid_generator.create('post'), 0 block_id = self.index.append(*block) find_block = self.index.get_block(block_id) self.assertEqual(find_block.user_id, block[0]) self.assertEqual(find_block.post_id, block[1])
def test_padding(self): block_data = uuid_generator.create('user'), uuid_generator.create('post'), 1, 0, 0, '\0' block = self.index.block_class(*block_data) paddings = \ [ block._fields_by_name['user_id'].padding , block._fields_by_name['post_id'].padding , block._fields_by_name['id'].padding , block._fields_by_name['prev_p'].padding , block._fields_by_name['next_p'].padding , block._fields_by_name['skip'].padding ] self.assertListEqual([0, 16, 32, 36, 40, 44], paddings) self.assertEqual(45, len(block))
def test_sorting_dict(self): d = dict() keys = range(10000) while keys: choice = random.choice(keys) d[choice] = uuid_generator.create('user') keys.remove(choice) self.assertListEqual(d.keys(), sorted(range(10000)))
def create_index(self, block_num=1000, user_num=10): users = dict() for user_id in self.create_uuids(user_num, bytes=True): users[user_id] = 0 for i in xrange(block_num): choosed_user = random.choice(users.keys()) block = choosed_user, uuid_generator.create('post').bytes, users[choosed_user] block_id = self.index.append(*block, bytes=True) users[choosed_user] = block_id return users
def create_index2(self, users=10000, posts=10 ** 6): Block = namedtuple('Block', 'created user_id post_id') users = self.create_uuids(num=users, node='user', bytes=True) result = [] created_initial = int(round(time.time() * 1000)) for i in xrange(posts): choosed_user = random.choice(users) result.append( Block( created=created_initial + 1 , user_id=choosed_user , post_id=uuid_generator.create('post').bytes ) ) return users, result
def create_index(self, users=10000, posts=100000): users = self.create_uuids(num=users, node='user', bytes=True) index = self.index created_initial = int(round(time.time() * 1000)) for i in xrange(posts): choosed_user = random.choice(users) index.append(self.block_class(created_initial + i, choosed_user, uuid_generator.create('post').bytes, _bytes=True)) index.storage.commit() return users, created_initial, created_initial + posts
def create_uuids(self, num=1000, node='user', bytes=False): result = [] for i in xrange(num): result.append(bytes and uuid_generator.create(node).bytes or uuid_generator.create(node)) return result
def test_by_search_sortedblist_algo(self): u1 = uuid_generator.create('user').bytes u2 = uuid_generator.create('user').bytes u3 = uuid_generator.create('user').bytes p1 = uuid_generator.create('post').bytes p2 = uuid_generator.create('post').bytes p3 = uuid_generator.create('post').bytes p4 = uuid_generator.create('post').bytes p5 = uuid_generator.create('post').bytes p6 = uuid_generator.create('post').bytes p7 = uuid_generator.create('post').bytes p8 = uuid_generator.create('post').bytes p9 = uuid_generator.create('post').bytes self.index.append(u1, p1, 0, bytes=True) self.index.append(u2, p2, 0, bytes=True) self.index.append(u3, p3, 0, bytes=True) self.index.append(u1, p4, 1, bytes=True) self.index.append(u2, p5, 2, bytes=True) self.index.append(u3, p6, 3, bytes=True) self.index.append(u3, p7, 6, bytes=True) self.index.append(u2, p8, 5, bytes=True) self.index.append(u2, p9, 8, bytes=True) user_last_post = blist.sortedlist([9, 7, 4]) result = list() while user_last_post: b = self.index.get_block(user_last_post.pop()) result.append(b.id) b.prev_p and user_last_post.add(b.prev_p) self.assertListEqual([9, 8, 7, 6, 5, 4, 3, 2, 1], result)
def test_by_search_list_algo(self): u1 = uuid_generator.create('user').bytes u2 = uuid_generator.create('user').bytes u3 = uuid_generator.create('user').bytes p1 = uuid_generator.create('post').bytes p2 = uuid_generator.create('post').bytes p3 = uuid_generator.create('post').bytes p4 = uuid_generator.create('post').bytes p5 = uuid_generator.create('post').bytes p6 = uuid_generator.create('post').bytes p7 = uuid_generator.create('post').bytes p8 = uuid_generator.create('post').bytes p9 = uuid_generator.create('post').bytes self.index.append(u1, p1, 0, bytes=True) self.index.append(u2, p2, 0, bytes=True) self.index.append(u3, p3, 0, bytes=True) self.index.append(u1, p4, 1, bytes=True) self.index.append(u2, p5, 2, bytes=True) self.index.append(u3, p6, 3, bytes=True) self.index.append(u3, p7, 6, bytes=True) self.index.append(u2, p8, 5, bytes=True) self.index.append(u2, p9, 8, bytes=True) user_last_post = \ [ [u1, 4] , [u2, 9] , [u3, 7] ] user_last_post.sort(key=lambda v: v[1], reverse=True) user_last_post_len = len(user_last_post) result = list() while user_last_post_len: b = self.index.get_block(user_last_post[0][1]) result.append(b.id) if not b.prev_p: del user_last_post[0] user_last_post_len -= 1 continue user_last_post[0][1] = b.prev_p if user_last_post_len > 1 and b.prev_p < user_last_post[1][1]: user_last_post.sort(key=lambda v: v[1], reverse=True) self.assertListEqual([9, 8, 7, 6, 5, 4, 3, 2, 1], result)
def test_datetime(self): u = uuid_generator.create('user') print uuid_to_dt(u)
def test_create(self): u = uuid_generator.create('user') self.assertEqual(u.node, 1)