Kireychik

tests.cpp

Oct 24th, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.98 KB | None | 0 0
  1. #include "gtest/gtest.h"
  2. #include "tritset.h"
  3. #include <iostream>
  4. #include <unordered_map>
  5.  
  6. TEST(tritset, initialization){
  7. TritSet set(100);
  8. EXPECT_EQ(set.capacity(), 100);
  9. for(int i = 0; i < 100; i++){
  10. EXPECT_EQ(static_cast<Trit>(set[i]), Trit::Unknown);
  11. }
  12. }
  13.  
  14. TEST(tritset, setnget){
  15. TritSet set(100);
  16. for(int i = 0; i <= 100; i++){
  17. ASSERT_EQ(set[i], Trit::Unknown) << "on index " << i;
  18. set[i] = Trit::False;
  19. ASSERT_EQ(set[i], Trit::False) << "on index " << i;
  20. set[i] = Trit::True;
  21. ASSERT_EQ(set[i], Trit::True) << "on index " << i;
  22. set[i] = Trit::Unknown;
  23. ASSERT_EQ(set[i], Trit::Unknown) << "on index " << i;
  24. }
  25. }
  26.  
  27. TEST(len_functions, length){
  28. TritSet set(100);
  29. EXPECT_EQ(set.length(), 0);
  30. set[49] = Trit::False;
  31. set[52] = Trit::Unknown;
  32. EXPECT_EQ(set.length(), 50);
  33. set[49] = Trit::Unknown;
  34. set[39] = Trit::True;
  35. EXPECT_EQ(set.length(), 40);
  36. }
  37.  
  38. TEST(len_functions, trim){
  39. TritSet set(100);
  40. set[60] = Trit::False;
  41. set[59] = Trit::True;
  42. set[61] = Trit::True;
  43. set.trim(60);
  44. EXPECT_EQ(set.length(), 60);
  45. }
  46.  
  47. TEST(constructors, sized){
  48. TritSet set(100);
  49. int allocated = set.underlaying_capacity();
  50. EXPECT_GE( 8*sizeof(size_t)*allocated, 100*2);
  51. EXPECT_LE(8*allocated, 100*2);
  52. }
  53.  
  54. TEST(constructors, copy){
  55. TritSet A(100);
  56. A[99] = Trit::True;
  57. A[88] = Trit::False;
  58. TritSet B(A);
  59. EXPECT_EQ(A.capacity(), B.capacity());
  60. EXPECT_EQ(A.underlaying_capacity(), B.underlaying_capacity());
  61. EXPECT_EQ(A[88], B[88]);
  62. EXPECT_EQ(A[99], B[99]);
  63. }
  64.  
  65. TEST(constructors, assign){
  66. TritSet A(100);
  67. A[10] = Trit::True; A[33] = Trit::False;
  68. TritSet B = A;
  69. EXPECT_EQ(B[10], Trit::True);
  70. EXPECT_EQ(B[33], Trit::False);
  71. EXPECT_EQ(B.length(), 34);
  72. B[33] = Trit::Unknown;
  73. EXPECT_EQ(B.length(), 11);
  74. B[10] = Trit::Unknown;
  75. EXPECT_EQ(B.length(), 0);
  76. }
  77.  
  78. TEST(resize, allocations){
  79. TritSet set(100);
  80. int allocated = set.underlaying_capacity();
  81. set[1000] = Trit::Unknown;
  82. EXPECT_EQ(allocated, set.underlaying_capacity());
  83.  
  84. if(set[2000] == Trit::True){}
  85. EXPECT_EQ(allocated, set.underlaying_capacity());
  86.  
  87. set[1000] = Trit::True;
  88. EXPECT_LT(allocated, set.underlaying_capacity());
  89. for(int i = 0; i < 1000; i++){
  90. EXPECT_EQ(set[i], Trit::Unknown);
  91. }
  92.  
  93. allocated = set.underlaying_capacity();
  94. set[10000] = Trit::Unknown;
  95. set[500] = Trit::False;
  96. EXPECT_EQ(allocated, set.underlaying_capacity());
  97. }
  98.  
  99. TEST(resize, to_last){
  100. TritSet set(10);
  101. set[100] = Trit::False;
  102. int allocated = set.underlaying_capacity();
  103. set[100] = Trit::Unknown;
  104. set[50] = Trit::False;
  105. set.shrink();
  106. EXPECT_GT(allocated, set.underlaying_capacity()) << "and length is " << set.length();
  107. }
  108.  
  109. TEST(resize, to_min){
  110. TritSet set(100);
  111. set[200] = Trit::False;
  112. set[200] = Trit::Unknown;
  113. int allocated = set.underlaying_capacity();
  114. set.shrink();
  115. EXPECT_GT(allocated, set.underlaying_capacity()) << "and length is " << set.length();
  116. }
  117.  
  118. TEST(cardinality, all){
  119. TritSet set(100);
  120. for(int i = 0; i < 10; i++){
  121. set[i] = Trit::False;
  122. }
  123. for(int i = 20; i < 31; i++){
  124. set[i] = Trit::True;
  125. }
  126. set[40] = Trit::False;
  127. std::unordered_map< Trit, int > m = set.cardinality();
  128. EXPECT_EQ(m[Trit::False], 11);
  129. EXPECT_EQ(m[Trit::True], 11);
  130. EXPECT_EQ(m[Trit::Unknown], 19);
  131. }
  132.  
  133. TEST(cardinality, Unknown){
  134. TritSet set(100);
  135. set[40] = Trit::False;
  136. EXPECT_EQ(set.cardinality(Trit::Unknown), 40);
  137. }
  138.  
  139. TEST(cardinality, False){
  140. TritSet set(100);
  141. for(int i = 20; i < 31; i++){
  142. set[i] = Trit::False;
  143. }
  144. EXPECT_EQ(set.cardinality(Trit::False), 11);
  145. }
  146.  
  147. TEST(cardinality, True){
  148. TritSet set(100);
  149. for(int i = 20; i < 31; i++){
  150. set[i] = Trit::True;
  151. }
  152. EXPECT_EQ(set.cardinality(Trit::True), 11);
  153. }
  154.  
  155. class BinaryTest : public ::testing::Test {
  156. protected:
  157. TritSet * A;
  158. TritSet * B;
  159. void SetUp() override {
  160. A = new TritSet(10);
  161. B = new TritSet(10);
  162. (*A)[0] = Trit::False; (*A)[1] = Trit::False; (*A)[2] = Trit::False;
  163. (*A)[6] = Trit::True; (*A)[7] = Trit::True; (*A)[8] = Trit::True;
  164. (*B)[0] = Trit::False; (*B)[3] = Trit::False; (*B)[6] = Trit::False;
  165. (*B)[2] = Trit::True; (*B)[5] = Trit::True; (*B)[8] = Trit::True;
  166. }
  167. void TearDown() override {
  168. delete A;
  169. delete B;
  170. }
  171. };
  172.  
  173. TEST_F(BinaryTest, capacity){ //mb some tricky stuff with T in bigger?
  174. TritSet big(100);
  175. big[0] = Trit::False;
  176. big[90] = Trit::True;
  177. TritSet C = (*A) & big;
  178. EXPECT_GT(C.capacity(), (*A).capacity());
  179. TritSet D = (*A) | big;
  180. EXPECT_GT(D.capacity(), (*A).capacity());
  181. }
  182. TEST_F(BinaryTest, OR){
  183. TritSet C = (*A) | (*B);
  184. EXPECT_EQ(C[0], Trit::False);
  185. EXPECT_EQ(C[1], Trit::Unknown);
  186. EXPECT_EQ(C[5], Trit::True);
  187. EXPECT_EQ(C[6], Trit::True);
  188. EXPECT_EQ(C[8], Trit::True);
  189. }
  190.  
  191. TEST_F(BinaryTest, AND){
  192. TritSet C = (*A) & (*B);
  193. EXPECT_EQ(C[0], Trit::False);
  194. EXPECT_EQ(C[1], Trit::False);
  195. EXPECT_EQ(C[3], Trit::False);
  196. EXPECT_EQ(C[4], Trit::Unknown);
  197. EXPECT_EQ(C[8], Trit::True);
  198. }
  199. TEST_F(BinaryTest, NOT){
  200. TritSet B = ~(*A);
  201. EXPECT_EQ(B[1], Trit::True);
  202. EXPECT_EQ(B[6], Trit::False);
  203. EXPECT_EQ(B[3], Trit::Unknown);
  204. }
  205.  
  206. TEST(stress, resize){
  207. TritSet set(100);
  208. set[1e8] = Trit::False;
  209. }
  210.  
  211. TEST(stress, length){
  212. TritSet set(1e8);
  213. set[1e8 - 1] = Trit::True;
  214. EXPECT_EQ(set.length(), 1e8);
  215. }
  216.  
  217. TEST(stress, trim){
  218. TritSet set(1e5);
  219. set[1e7] = Trit::False;
  220. set[1e6 - 1] = Trit::True;
  221. set.trim(1e6);
  222. EXPECT_EQ(set[1e7], Trit::Unknown);
  223. set.shrink();
  224. EXPECT_EQ(set.capacity(), 1e6);
  225. }
  226.  
  227. //TEST(stress, copy_constructor);
  228. //TEST(stress, assign_constructor);
  229.  
Advertisement
Add Comment
Please, Sign In to add comment