# 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)