vector_ut.pyx 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. # cython: c_string_type=str, c_string_encoding=utf8
  2. from util.generic.vector cimport TVector
  3. from util.generic.string cimport TString
  4. import pytest
  5. import unittest
  6. def _check_convert(TVector[TString] x):
  7. return x
  8. class TestVector(unittest.TestCase):
  9. def test_ctor1(self):
  10. cdef TVector[int] tmp = TVector[int]()
  11. self.assertEqual(tmp.size(), 0)
  12. def test_ctor2(self):
  13. cdef TVector[int] tmp = TVector[int](10)
  14. self.assertEqual(tmp.size(), 10)
  15. self.assertEqual(tmp[0], 0)
  16. def test_ctor3(self):
  17. cdef TVector[int] tmp = TVector[int](10, 42)
  18. self.assertEqual(tmp.size(), 10)
  19. self.assertEqual(tmp[0], 42)
  20. def test_ctor4(self):
  21. cdef TVector[int] tmp = TVector[int](10, 42)
  22. cdef TVector[int] tmp2 = TVector[int](tmp)
  23. self.assertEqual(tmp2.size(), 10)
  24. self.assertEqual(tmp2[0], 42)
  25. def test_operator_assign(self):
  26. cdef TVector[int] tmp2
  27. tmp2.push_back(1)
  28. tmp2.push_back(2)
  29. cdef TVector[int] tmp3
  30. tmp3.push_back(1)
  31. tmp3.push_back(3)
  32. self.assertEqual(tmp2[1], 2)
  33. self.assertEqual(tmp3[1], 3)
  34. tmp3 = tmp2
  35. self.assertEqual(tmp2[1], 2)
  36. self.assertEqual(tmp3[1], 2)
  37. def test_compare(self):
  38. cdef TVector[int] tmp1
  39. tmp1.push_back(1)
  40. tmp1.push_back(2)
  41. cdef TVector[int] tmp2
  42. tmp2.push_back(1)
  43. tmp2.push_back(2)
  44. cdef TVector[int] tmp3
  45. tmp3.push_back(1)
  46. tmp3.push_back(3)
  47. self.assertTrue(tmp1 == tmp2)
  48. self.assertTrue(tmp1 != tmp3)
  49. self.assertTrue(tmp1 < tmp3)
  50. self.assertTrue(tmp1 <= tmp3)
  51. self.assertTrue(tmp3 > tmp1)
  52. self.assertTrue(tmp3 >= tmp1)
  53. def test_index(self):
  54. cdef TVector[int] tmp = TVector[int](10, 42)
  55. self.assertEqual(tmp[0], 42)
  56. self.assertEqual(tmp[5], 42)
  57. self.assertEqual(tmp.data()[0], 42)
  58. self.assertEqual(tmp.data()[5], 42)
  59. self.assertEqual(tmp.at(0), 42)
  60. self.assertEqual(tmp.at(5), 42)
  61. with pytest.raises(IndexError):
  62. tmp.at(100)
  63. def test_push_pop_back(self):
  64. cdef TVector[int] tmp
  65. self.assertEqual(tmp.size(), 0)
  66. tmp.push_back(42)
  67. self.assertEqual(tmp.size(), 1)
  68. self.assertEqual(tmp.back(), 42)
  69. tmp.push_back(77)
  70. self.assertEqual(tmp.size(), 2)
  71. self.assertEqual(tmp.back(), 77)
  72. tmp.pop_back()
  73. self.assertEqual(tmp.size(), 1)
  74. self.assertEqual(tmp.back(), 42)
  75. tmp.pop_back()
  76. self.assertEqual(tmp.size(), 0)
  77. def test_front(self):
  78. cdef TVector[int] tmp
  79. tmp.push_back(42)
  80. self.assertEqual(tmp.front(), 42)
  81. def test_empty(self):
  82. cdef TVector[int] tmp
  83. self.assertTrue(tmp.empty())
  84. tmp.push_back(42)
  85. self.assertFalse(tmp.empty())
  86. def test_max_size(self):
  87. cdef TVector[int] tmp
  88. self.assertTrue(tmp.max_size() > 0)
  89. def test_reserve_resize(self):
  90. cdef TVector[int] tmp
  91. tmp.reserve(1000)
  92. self.assertEqual(tmp.capacity(), 1000)
  93. tmp.resize(100)
  94. self.assertEqual(tmp.size(), 100)
  95. self.assertEqual(tmp.front(), 0)
  96. self.assertEqual(tmp.back(), 0)
  97. tmp.shrink_to_fit()
  98. tmp.clear()
  99. tmp.resize(100, 42)
  100. self.assertEqual(tmp.size(), 100)
  101. self.assertEqual(tmp.front(), 42)
  102. self.assertEqual(tmp.back(), 42)
  103. def test_iter(self):
  104. cdef TVector[int] tmp
  105. tmp.push_back(1)
  106. tmp.push_back(20)
  107. tmp.push_back(300)
  108. self.assertEqual([i for i in tmp], [1, 20, 300])
  109. def test_iterator(self):
  110. cdef TVector[int] tmp
  111. self.assertTrue(tmp.begin() == tmp.end())
  112. self.assertTrue(tmp.rbegin() == tmp.rend())
  113. self.assertTrue(tmp.const_begin() == tmp.const_end())
  114. self.assertTrue(tmp.const_rbegin() == tmp.const_rend())
  115. tmp.push_back(1)
  116. self.assertTrue(tmp.begin() != tmp.end())
  117. self.assertTrue(tmp.rbegin() != tmp.rend())
  118. self.assertTrue(tmp.const_begin() != tmp.const_end())
  119. self.assertTrue(tmp.const_rbegin() != tmp.const_rend())
  120. self.assertTrue(tmp.begin() < tmp.end())
  121. self.assertTrue(tmp.rbegin() < tmp.rend())
  122. self.assertTrue(tmp.const_begin() < tmp.const_end())
  123. self.assertTrue(tmp.const_rbegin() < tmp.const_rend())
  124. self.assertTrue(tmp.begin() + 1 == tmp.end())
  125. self.assertTrue(tmp.rbegin() + 1 == tmp.rend())
  126. self.assertTrue(tmp.const_begin() + 1 == tmp.const_end())
  127. self.assertTrue(tmp.const_rbegin() + 1 == tmp.const_rend())
  128. def test_assign(self):
  129. cdef TVector[int] tmp
  130. tmp.assign(10, 42)
  131. self.assertEqual(tmp.size(), 10)
  132. self.assertEqual(tmp.front(), 42)
  133. self.assertEqual(tmp.back(), 42)
  134. def test_insert(self):
  135. cdef TVector[int] tmp
  136. tmp.push_back(1)
  137. tmp.push_back(2)
  138. tmp.push_back(3)
  139. cdef TVector[int] tmp2
  140. tmp2.push_back(7)
  141. tmp2.push_back(9)
  142. tmp.insert(tmp.begin(), 8)
  143. self.assertEqual([i for i in tmp], [8, 1, 2, 3])
  144. tmp.insert(tmp.begin(), 2, 6)
  145. self.assertEqual([i for i in tmp], [6, 6, 8, 1, 2, 3])
  146. tmp.insert(tmp.begin(), tmp2.begin(), tmp2.end())
  147. self.assertEqual([i for i in tmp], [7, 9, 6, 6, 8, 1, 2, 3])
  148. def test_erase(self):
  149. cdef TVector[int] tmp
  150. tmp.push_back(1)
  151. tmp.push_back(2)
  152. tmp.push_back(3)
  153. tmp.push_back(4)
  154. tmp.erase(tmp.begin() + 1)
  155. self.assertEqual([i for i in tmp], [1, 3, 4])
  156. tmp.erase(tmp.begin(), tmp.begin() + 2)
  157. self.assertEqual([i for i in tmp], [4])
  158. def test_convert(self):
  159. src = ['foo', 'bar', 'baz']
  160. self.assertEqual(_check_convert(src), src)
  161. bad_src = ['foo', 42]
  162. with self.assertRaises(TypeError):
  163. _check_convert(bad_src)