123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- # cython: c_string_type=str, c_string_encoding=utf8
- from libcpp.string cimport string as std_string
- from util.generic.string cimport TString
- from util.memory.blob cimport TBlob
- import pytest
- import unittest
- class TestBlob(unittest.TestCase):
- def test_ctor(self):
- cdef TBlob tmp = TBlob()
- cdef TBlob tmp2 = TBlob(tmp)
- self.assertEqual(tmp.Size(), 0)
- self.assertEqual(tmp2.Size(), 0)
- def test_empty_data(self):
- cdef TBlob tmp = TBlob()
- self.assertEqual(tmp.Data() == NULL, True)
- self.assertEqual(tmp.AsCharPtr() == NULL, True)
- self.assertEqual(tmp.AsUnsignedCharPtr() == NULL, True)
- self.assertEqual(tmp.Empty(), True)
- self.assertEqual(tmp.IsNull(), True)
- def test_empty_is_null(self):
- cdef TBlob tmp = TBlob.NoCopy("", 0)
- self.assertEqual(tmp.Empty(), True)
- self.assertEqual(tmp.IsNull(), False)
- def test_data_types(self):
- cdef const char* char_data = TBlob().AsCharPtr()
- cdef const unsigned char* uchar_data = TBlob().AsUnsignedCharPtr()
- cdef const void* void_data = TBlob().Data()
- def test_no_copy(self):
- cdef const char* txt = "hello world"
- cdef TBlob tmp = TBlob.NoCopy(txt, len(txt))
- self.assertEqual(tmp.AsCharPtr() - txt, 0)
- self.assertEqual(tmp.Size(), 11)
- self.assertEqual(tmp.AsCharPtr()[:tmp.Size()], "hello world")
- self.assertEqual(tmp.Empty(), False)
- self.assertEqual(tmp.IsNull(), False)
- def test_copy(self):
- cdef const char* txt = "hello world"
- cdef TBlob tmp = TBlob.Copy(txt, len(txt))
- self.assertNotEqual(tmp.AsCharPtr() - txt, 0)
- self.assertEqual(tmp.Size(), 11)
- self.assertEqual(tmp.AsCharPtr()[:tmp.Size()], "hello world")
- self.assertEqual(tmp.Empty(), False)
- self.assertEqual(tmp.IsNull(), False)
- def test_from_string(self):
- cdef TBlob tmp = TBlob.FromString(TString("hello world"))
- self.assertEqual(tmp.Size(), 11)
- self.assertEqual(tmp.AsCharPtr()[:tmp.Size()], "hello world")
- self.assertEqual(tmp.Empty(), False)
- self.assertEqual(tmp.IsNull(), False)
- def test_from_file(self):
- with open("file", "w") as f:
- f.write("hello world")
- cdef TBlob tmp = TBlob.FromFile("file")
- self.assertEqual(tmp.Size(), 11)
- self.assertEqual(tmp.AsCharPtr()[:tmp.Size()], "hello world")
- self.assertEqual(tmp.Empty(), False)
- self.assertEqual(tmp.IsNull(), False)
- def test_precharged_from_file(self):
- with open("precharged", "w") as f:
- f.write("hello world")
- cdef TBlob tmp = TBlob.PrechargedFromFile("precharged")
- self.assertEqual(tmp.Size(), 11)
- self.assertEqual(tmp.AsCharPtr()[:tmp.Size()], "hello world")
- self.assertEqual(tmp.Empty(), False)
- self.assertEqual(tmp.IsNull(), False)
- def test_swap_drop(self):
- cdef TBlob tmp = TBlob.NoCopy("hello world", 11)
- cdef TBlob tmp2
- tmp2.Swap(tmp)
- self.assertEqual(tmp2.Size(), 11)
- self.assertEqual(tmp.Size(), 0)
- self.assertEqual(tmp2.AsCharPtr()[:tmp2.Size()], "hello world")
- tmp2.Swap(tmp)
- self.assertEqual(tmp2.Size(), 0)
- self.assertEqual(tmp.Size(), 11)
- tmp.Drop()
- self.assertEqual(tmp.Size(), 0)
-
- def test_operator_brackets(self):
- cdef TBlob tmp = TBlob.NoCopy("hello world", 11)
- self.assertEqual(tmp[0], ord('h'))
- self.assertEqual(tmp[1], ord('e'))
- self.assertEqual(tmp[2], ord('l'))
- self.assertEqual(tmp[3], ord('l'))
- self.assertEqual(tmp[4], ord('o'))
- self.assertEqual(tmp[5], ord(' '))
- self.assertEqual(tmp[6], ord('w'))
- self.assertEqual(tmp[7], ord('o'))
- self.assertEqual(tmp[8], ord('r'))
- self.assertEqual(tmp[9], ord('l'))
- self.assertEqual(tmp[10], ord('d'))
- def test_operator_equal(self):
- cdef TBlob foo = TBlob.NoCopy("foo", 3)
- cdef TBlob bar = TBlob.NoCopy("bar", 3)
- self.assertEqual(foo.AsCharPtr(), "foo")
- self.assertEqual(bar.AsCharPtr(), "bar")
- bar = foo
- self.assertEqual(foo.AsCharPtr(), "foo")
- self.assertEqual(bar.AsCharPtr(), "foo")
- def test_sub_blob(self):
- cdef TBlob tmp = TBlob.NoCopy("hello world", 11)
- self.assertEqual(tmp.SubBlob(0).Size(), 0)
- self.assertEqual(tmp.SubBlob(1).Size(), 1)
- self.assertEqual(tmp.SubBlob(5).Size(), 5)
- self.assertEqual(tmp.AsCharPtr() - tmp.SubBlob(0).AsCharPtr(), 0)
- self.assertEqual(tmp.SubBlob(0, 0).Size(), 0)
- self.assertEqual(tmp.SubBlob(0, 1).Size(), 1)
- self.assertEqual(tmp.SubBlob(0, 5).Size(), 5)
- self.assertEqual(tmp.AsCharPtr() - tmp.SubBlob(0, 0).AsCharPtr(), 0)
- self.assertEqual(tmp.SubBlob(1, 1).Size(), 0)
- self.assertEqual(tmp.SubBlob(1, 2).Size(), 1)
- self.assertEqual(tmp.SubBlob(1, 6).Size(), 5)
- self.assertEqual(tmp.SubBlob(1, 1).AsCharPtr() - tmp.AsCharPtr(), 1)
- with self.assertRaises(Exception):
- tmp.SubBlob(2, 1)
- def test_deep_copy(self):
- cdef TBlob tmp = TBlob.NoCopy("hello world", 11)
- cdef TBlob tmp2 = tmp.DeepCopy()
- self.assertEqual(tmp.AsCharPtr()[:tmp.Size()], "hello world")
- self.assertEqual(tmp2.AsCharPtr()[:tmp2.Size()], "hello world")
- self.assertNotEqual(tmp2.AsCharPtr() - tmp.AsCharPtr(), 0)
|