From 0d6568c23656c056af1ff46b9b8d63ff4e6be8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl> Date: Fri, 9 Jul 2021 17:50:28 +0200 Subject: [PATCH] fixed bugs --- setup.cfg | 2 +- tempsdb/varlen.pyx | 19 +++++++++++++------ tests/test_varlen.py | 11 ++++++++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/setup.cfg b/setup.cfg index a01c3e7..f57ca6c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ # coding: utf-8 [metadata] name = tempsdb -version = 0.6.4a8 +version = 0.6.4rc1 long-description = file: README.md long-description-content-type = text/markdown; charset=UTF-8 license_files = LICENSE diff --git a/tempsdb/varlen.pyx b/tempsdb/varlen.pyx index 3f4e1df..e92e495 100644 --- a/tempsdb/varlen.pyx +++ b/tempsdb/varlen.pyx @@ -83,7 +83,6 @@ cdef class VarlenEntry: else: if len_v > self.length(): return False - cdef bytes b = self.slice(self.len-len_v, self.len) return b == v @@ -183,7 +182,7 @@ cdef class VarlenEntry: int segment = 0 int pointer = 0 int next_chunk_len - int start_reading_at + int start_reading_at = 0 # Track down the right segment to start the read while pointer < start: @@ -196,13 +195,17 @@ cdef class VarlenEntry: cdef: int write_pointer = 0 - int chunk_len = self.parent.get_length_for(segment) + int chunk_len = self.parent.get_length_for(segment) - start_reading_at int len_to_read = self.parent.get_length_for(segment) - start_reading_at Chunk chunk = self.chunks[segment] bytes temp_data - int offset = self.parent.size_field + int offset = start_reading_at + + if segment == 0: + offset += self.parent.size_field while write_pointer < length: + if chunk_len-start_reading_at >= + (length - write_pointer): # We have all the data that we require try: @@ -214,15 +217,19 @@ cdef class VarlenEntry: b[write_pointer:length] = temp_data return bytes(b) - if chunk_len > length - write_pointer: - chunk_len = length - write_pointer try: temp_data = chunk.get_slice_of_piece_at(self.item_no[segment], offset, offset+chunk_len) except IndexError: raise ValueError('Invalid indices') + b[write_pointer:write_pointer+chunk_len] = temp_data write_pointer += chunk_len segment += 1 + try: + chunk = self.chunks[segment] + except IndexError: + raise ValueError('Invalid indices') + chunk_len = self.parent.get_length_for(segment) start_reading_at = 0 offset = 0 return bytes(b) diff --git a/tests/test_varlen.py b/tests/test_varlen.py index f028b46..e458402 100644 --- a/tests/test_varlen.py +++ b/tests/test_varlen.py @@ -35,11 +35,11 @@ class TestVarlen(unittest.TestCase): ve = iterator.get_next() while ve is not None: self.assertTrue(ve.startswith(b'test ')) - # self.assertTrue(ve.endswith(b'skarabeusza')) + self.assertTrue(ve.endswith(b'skarabeusza')) self.assertEqual(ve.get_byte_at(3), ord('t')) self.assertFalse(ve.startswith(b'tost')) self.assertTrue(ve.slice(0, 4), b'test') - # self.assertFalse(ve.endswith(b'skerabeusza')) + self.assertFalse(ve.endswith(b'skerabeusza')) self.assertGreater(ve, b'tes') self.assertLess(ve, b'tez') self.assertGreaterEqual(ve, b'tes') @@ -47,7 +47,12 @@ class TestVarlen(unittest.TestCase): self.assertLessEqual(ve, b'tez') hash(ve) self.assertNotEqual(ve, b'test') - + self.assertTrue(ve.startswith(b'test ')) + self.assertTrue(ve.endswith(b'skarabeusza')) + self.assertEqual(ve.get_byte_at(3), ord('t')) + self.assertFalse(ve.startswith(b'tost')) + self.assertTrue(ve.slice(0, 4), b'test') + self.assertFalse(ve.endswith(b'skerabeusza')) ve = iterator.get_next() def test_varlen_gzip(self): -- GitLab