123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- # cython: c_string_type=str, c_string_encoding=utf8
- from util.generic.vector cimport TVector
- from util.generic.string cimport TString
- import pytest
- import unittest
- def _check_convert(TVector[TString] x):
- return x
- class TestVector(unittest.TestCase):
- def test_ctor1(self):
- cdef TVector[int] tmp = TVector[int]()
- self.assertEqual(tmp.size(), 0)
- def test_ctor2(self):
- cdef TVector[int] tmp = TVector[int](10)
- self.assertEqual(tmp.size(), 10)
- self.assertEqual(tmp[0], 0)
- def test_ctor3(self):
- cdef TVector[int] tmp = TVector[int](10, 42)
- self.assertEqual(tmp.size(), 10)
- self.assertEqual(tmp[0], 42)
- def test_ctor4(self):
- cdef TVector[int] tmp = TVector[int](10, 42)
- cdef TVector[int] tmp2 = TVector[int](tmp)
- self.assertEqual(tmp2.size(), 10)
- self.assertEqual(tmp2[0], 42)
- def test_operator_assign(self):
- cdef TVector[int] tmp2
- tmp2.push_back(1)
- tmp2.push_back(2)
- cdef TVector[int] tmp3
- tmp3.push_back(1)
- tmp3.push_back(3)
- self.assertEqual(tmp2[1], 2)
- self.assertEqual(tmp3[1], 3)
- tmp3 = tmp2
- self.assertEqual(tmp2[1], 2)
- self.assertEqual(tmp3[1], 2)
- def test_compare(self):
- cdef TVector[int] tmp1
- tmp1.push_back(1)
- tmp1.push_back(2)
- cdef TVector[int] tmp2
- tmp2.push_back(1)
- tmp2.push_back(2)
- cdef TVector[int] tmp3
- tmp3.push_back(1)
- tmp3.push_back(3)
- self.assertTrue(tmp1 == tmp2)
- self.assertTrue(tmp1 != tmp3)
- self.assertTrue(tmp1 < tmp3)
- self.assertTrue(tmp1 <= tmp3)
- self.assertTrue(tmp3 > tmp1)
- self.assertTrue(tmp3 >= tmp1)
- def test_index(self):
- cdef TVector[int] tmp = TVector[int](10, 42)
- self.assertEqual(tmp[0], 42)
- self.assertEqual(tmp[5], 42)
- self.assertEqual(tmp.data()[0], 42)
- self.assertEqual(tmp.data()[5], 42)
- self.assertEqual(tmp.at(0), 42)
- self.assertEqual(tmp.at(5), 42)
- with pytest.raises(IndexError):
- tmp.at(100)
- def test_push_pop_back(self):
- cdef TVector[int] tmp
- self.assertEqual(tmp.size(), 0)
- tmp.push_back(42)
- self.assertEqual(tmp.size(), 1)
- self.assertEqual(tmp.back(), 42)
- tmp.push_back(77)
- self.assertEqual(tmp.size(), 2)
- self.assertEqual(tmp.back(), 77)
- tmp.pop_back()
- self.assertEqual(tmp.size(), 1)
- self.assertEqual(tmp.back(), 42)
- tmp.pop_back()
- self.assertEqual(tmp.size(), 0)
- def test_front(self):
- cdef TVector[int] tmp
- tmp.push_back(42)
- self.assertEqual(tmp.front(), 42)
- def test_empty(self):
- cdef TVector[int] tmp
- self.assertTrue(tmp.empty())
- tmp.push_back(42)
- self.assertFalse(tmp.empty())
- def test_max_size(self):
- cdef TVector[int] tmp
- self.assertTrue(tmp.max_size() > 0)
- def test_reserve_resize(self):
- cdef TVector[int] tmp
- tmp.reserve(1000)
- self.assertEqual(tmp.capacity(), 1000)
- tmp.resize(100)
- self.assertEqual(tmp.size(), 100)
- self.assertEqual(tmp.front(), 0)
- self.assertEqual(tmp.back(), 0)
- tmp.shrink_to_fit()
- tmp.clear()
- tmp.resize(100, 42)
- self.assertEqual(tmp.size(), 100)
- self.assertEqual(tmp.front(), 42)
- self.assertEqual(tmp.back(), 42)
- def test_iter(self):
- cdef TVector[int] tmp
- tmp.push_back(1)
- tmp.push_back(20)
- tmp.push_back(300)
- self.assertEqual([i for i in tmp], [1, 20, 300])
- def test_iterator(self):
- cdef TVector[int] tmp
- self.assertTrue(tmp.begin() == tmp.end())
- self.assertTrue(tmp.rbegin() == tmp.rend())
- self.assertTrue(tmp.const_begin() == tmp.const_end())
- self.assertTrue(tmp.const_rbegin() == tmp.const_rend())
- tmp.push_back(1)
- self.assertTrue(tmp.begin() != tmp.end())
- self.assertTrue(tmp.rbegin() != tmp.rend())
- self.assertTrue(tmp.const_begin() != tmp.const_end())
- self.assertTrue(tmp.const_rbegin() != tmp.const_rend())
- self.assertTrue(tmp.begin() < tmp.end())
- self.assertTrue(tmp.rbegin() < tmp.rend())
- self.assertTrue(tmp.const_begin() < tmp.const_end())
- self.assertTrue(tmp.const_rbegin() < tmp.const_rend())
- self.assertTrue(tmp.begin() + 1 == tmp.end())
- self.assertTrue(tmp.rbegin() + 1 == tmp.rend())
- self.assertTrue(tmp.const_begin() + 1 == tmp.const_end())
- self.assertTrue(tmp.const_rbegin() + 1 == tmp.const_rend())
- def test_assign(self):
- cdef TVector[int] tmp
- tmp.assign(10, 42)
- self.assertEqual(tmp.size(), 10)
- self.assertEqual(tmp.front(), 42)
- self.assertEqual(tmp.back(), 42)
- def test_insert(self):
- cdef TVector[int] tmp
- tmp.push_back(1)
- tmp.push_back(2)
- tmp.push_back(3)
- cdef TVector[int] tmp2
- tmp2.push_back(7)
- tmp2.push_back(9)
- tmp.insert(tmp.begin(), 8)
- self.assertEqual([i for i in tmp], [8, 1, 2, 3])
- tmp.insert(tmp.begin(), 2, 6)
- self.assertEqual([i for i in tmp], [6, 6, 8, 1, 2, 3])
- tmp.insert(tmp.begin(), tmp2.begin(), tmp2.end())
- self.assertEqual([i for i in tmp], [7, 9, 6, 6, 8, 1, 2, 3])
- def test_erase(self):
- cdef TVector[int] tmp
- tmp.push_back(1)
- tmp.push_back(2)
- tmp.push_back(3)
- tmp.push_back(4)
- tmp.erase(tmp.begin() + 1)
- self.assertEqual([i for i in tmp], [1, 3, 4])
- tmp.erase(tmp.begin(), tmp.begin() + 2)
- self.assertEqual([i for i in tmp], [4])
- def test_convert(self):
- src = ['foo', 'bar', 'baz']
- self.assertEqual(_check_convert(src), src)
- bad_src = ['foo', 42]
- with self.assertRaises(TypeError):
- _check_convert(bad_src)
|