Advertisement
Guest User

ESCHE_ODNA

a guest
Nov 14th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.88 KB | None | 0 0
  1. TEST(MyTests, cont) {
  2.   while (true) {
  3.     BiDirectionalList<int> z{1, 2, 3};
  4.     z = z;
  5.     BiDirectionalList<int> pushHere{};
  6. // PushFront PopFront
  7.     pushHere.PushFront(1);
  8.     ASSERT_TRUE(pushHere.Front()->value == 1);
  9.     pushHere.PushFront(2);
  10.     ASSERT_TRUE(pushHere.Front()->value == 2);
  11.     ASSERT_TRUE(pushHere.Back()->value == 1);
  12.     ASSERT_TRUE(pushHere.Size() == 2);
  13.     pushHere.PopFront();
  14.     ASSERT_TRUE(pushHere.Size() == 1);
  15.     pushHere.PopFront();
  16.     ASSERT_TRUE(pushHere.Size() == 0);
  17. // constructor
  18.     const BiDirectionalList<std::string> okey{};
  19.     const BiDirectionalList<std::string> okey2;
  20.     BiDirectionalList<std::string> ktoProchelTotNeSdoxnet{":)", "<3"};
  21.     const std::initializer_list<std::string> of{":)", "<3"};
  22.     BiDirectionalList<std::string> ktoProchelTotNeSdoxnet2{of};
  23.     ASSERT_TRUE(*of.begin() == ktoProchelTotNeSdoxnet2.Front()->value);
  24.     ASSERT_TRUE(*of.begin() == ktoProchelTotNeSdoxnet.Front()->value);
  25.  
  26.     for (int i = 0; i < 100000; i++) {
  27.       BiDirectionalList<std::string> fe;
  28.       fe.PushBack(std::string(10000, 'a'));
  29.     }
  30.     ASSERT_TRUE(ktoProchelTotNeSdoxnet.Size() == 2);
  31.     ktoProchelTotNeSdoxnet.PushBack("1");
  32.     ASSERT_TRUE(ktoProchelTotNeSdoxnet.Size() == 3);
  33.     ktoProchelTotNeSdoxnet.PopFront();
  34.     ASSERT_TRUE(ktoProchelTotNeSdoxnet.Size() == 2);
  35.     ktoProchelTotNeSdoxnet.PopBack();
  36.     ASSERT_TRUE(ktoProchelTotNeSdoxnet.Size() == 1);
  37.     ktoProchelTotNeSdoxnet.PushBack("123");
  38.     ASSERT_TRUE(ktoProchelTotNeSdoxnet.Size() == 2);
  39.     ktoProchelTotNeSdoxnet.PushFront("feaf");
  40.     ASSERT_TRUE(ktoProchelTotNeSdoxnet.Size() == 3);
  41.     // PushFront PushBack
  42.     {
  43.       BiDirectionalList<int> f;
  44.       for (int i = 0; i < 100; i++) {
  45.         f.PushFront(i);
  46.         f.PushBack(i + 1);
  47.         ASSERT_TRUE(f.Back()->value == i + 1);
  48.         ASSERT_TRUE(f.Front()->value == i);
  49.         ASSERT_TRUE(f.Size() == i * 2 + 2);
  50.       }
  51.     }
  52.     // Front Back []
  53.     {
  54.       BiDirectionalList<int> x1{12, 32};
  55.       const BiDirectionalList<int> x2(x1);
  56.       BiDirectionalList<int> x3(x2);
  57.       ASSERT_TRUE(x3.Back()->value == 32);
  58.       ASSERT_TRUE(x2.Back()->value == 32);
  59.       ASSERT_TRUE(x1.Back()->value == 32);
  60.  
  61.       ASSERT_TRUE(x3[1]->value == 32);
  62.       ASSERT_TRUE(x2[1]->value == 32);
  63.       ASSERT_TRUE(x1[1]->value == 32);
  64.  
  65.       ASSERT_TRUE(x3.Front()->value == 12);
  66.       ASSERT_TRUE(x2.Front()->value == 12);
  67.       ASSERT_TRUE(x1.Front()->value == 12);
  68.  
  69.       ASSERT_TRUE(x3[0]->value == 12);
  70.       ASSERT_TRUE(x2[0]->value == 12);
  71.       ASSERT_TRUE(x1[0]->value == 12);
  72.       ASSERT_TRUE(x1.Size() == 2);
  73.       ASSERT_TRUE(x2.Size() == 2);
  74.       ASSERT_TRUE(x3.Size() == 2);
  75.  
  76.       x1.PopBack();
  77.       x3.PopBack();
  78.  
  79.       ASSERT_TRUE(x1.Size() == 1);
  80.       ASSERT_TRUE(x3.Size() == 1);
  81.       ASSERT_TRUE(
  82.           x3[0]->value == x3.Back()->value
  83.               && x3.Front()->value == x3[0]->value);
  84.       ASSERT_TRUE(
  85.           x1[0]->value == x1.Back()->value
  86.               && x1.Front()->value == x1[0]->value);
  87.  
  88.       x1.PopBack();
  89.       x3.PopBack();
  90.  
  91.       // ASSERT_ANY_THROW(x1[0]);
  92.       //ASSERT_ANY_THROW(x1[-1]);
  93.       // ASSERT_ANY_THROW(x1[100000]);
  94.       // ASSERT_ANY_THROW(x1.Back());
  95.       // ASSERT_ANY_THROW(x1.Front());
  96.  
  97.       ASSERT_TRUE(x1.Size() == 0);
  98.       ASSERT_TRUE(x3.Size() == 0);
  99.  
  100.     }
  101.  
  102.     // Remove Random|Front|Back element in List
  103.     {
  104.       BiDirectionalList<int> xerox{1, 2, 3};
  105.       // ASSERT_ANY_THROW(xerox[4]);
  106.       ASSERT_TRUE(xerox[1]->value == 2);
  107.       ASSERT_TRUE(xerox[0]->value == 1);
  108.       ASSERT_TRUE(xerox[2]->value == 3);
  109.       ASSERT_TRUE(xerox.Size() == 3);
  110.       xerox.PushBack(4);
  111.       xerox.PushFront(0); // 1  3
  112.       xerox.Erase(xerox[2]);
  113.       ASSERT_TRUE(xerox[2]->value == 3);
  114.       ASSERT_TRUE(xerox.Size() == 4);
  115.  
  116.       xerox.Erase(xerox.Front());
  117.       ASSERT_TRUE(xerox[0]->value == 1);
  118.       ASSERT_TRUE(xerox.Size() == 3);
  119.  
  120.       xerox.Erase(xerox.Back());
  121.       ASSERT_TRUE(xerox[1]->value == 3);
  122.       ASSERT_TRUE(xerox.Size() == 2);
  123.  
  124.       xerox.PopBack();
  125.       ASSERT_TRUE(xerox.Size() == 1);
  126.       ASSERT_TRUE(xerox.Back() == xerox.Front());
  127.  
  128.       xerox.PushBack(2);
  129.       ASSERT_TRUE(xerox.Size() == 2);
  130.       ASSERT_TRUE(xerox[0]->value == 1 && xerox[1]->value == 2);
  131.       xerox.PopBack();
  132.       ASSERT_TRUE(xerox.Back() == xerox.Front());
  133.       ASSERT_TRUE(xerox.Size() == 1);
  134.  
  135.       xerox.Erase(xerox.Front());
  136.       //ASSERT_TRUE(xerox.Size() == 0);
  137.       // ASSERT_ANY_THROW(xerox.Erase(xerox[0]));
  138.       // ASSERT_ANY_THROW(xerox.Erase(xerox.Back()));
  139.       // ASSERT_ANY_THROW(xerox.Erase(xerox.Front()));
  140.       // ASSERT_ANY_THROW(xerox.PopBack());
  141.       // ASSERT_ANY_THROW(xerox.PopFront());
  142.     }
  143.     //  FindAll
  144.     {
  145.       BiDirectionalList<std::string> oso{"0", "1", "2", "3", "4", "5", "6"};
  146.       for (int i = 0; i < 7; i++) {
  147.         std::string xs = std::string(1, char('0' + i));
  148.         std::vector<int> All = oso.FindAll(xs);
  149.         ASSERT_TRUE(All[0] == i);
  150.         ASSERT_TRUE(oso.Size() == 7);
  151.       }
  152.       oso[0]->value = oso[1]->value = oso[2]->value = oso[4]->value =
  153.       oso[5]->value = oso[6]->value;
  154.       std::vector<int> All = oso.FindAll("6");
  155.       ASSERT_THAT(All, testing::ElementsAre(0, 1, 2, 4, 5, 6));
  156.       ASSERT_TRUE(oso.Size() == 7);
  157.     }
  158.     // To vector + == + =
  159.     {
  160.       std::initializer_list<int> d = {0, 1, 2, 3, 4};
  161.       std::vector<int> f(d);
  162.       BiDirectionalList<int> xer(d);
  163.       ASSERT_TRUE(xer.ToVector() == f);
  164.       ASSERT_TRUE(xer.Size() == d.size());
  165.       BiDirectionalList<int> dq(std::move(xer));
  166.       ASSERT_TRUE(xer.Size() == 0);
  167.       ASSERT_TRUE(dq.Size() == 5);
  168.       ASSERT_TRUE(dq.Size() == d.size());
  169.     }
  170.   }
  171. // Find +InsertBefore after
  172.   {
  173.     std::initializer_list<int>
  174.         d = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
  175.     std::vector<int> f(d);
  176.     BiDirectionalList<int> xer(d);
  177.     for (int i = 0; i < 15; i++) {
  178.       ASSERT_TRUE(xer.Find(i) == i && d.size() == xer.Size());
  179.     }
  180.     BiDirectionalList<int> opra{0};
  181.     ASSERT_THAT(opra.ToVector(), testing::ElementsAre(0));
  182.     opra.InsertBefore(opra[0], 1);
  183.     ASSERT_THAT(opra.ToVector(), testing::ElementsAre(1, 0));
  184.     opra.InsertBefore(opra[1], 2);
  185.     ASSERT_THAT(opra.ToVector(), testing::ElementsAre(1, 2, 0));
  186.  
  187.     opra.InsertAfter(opra[1], 3);
  188.     ASSERT_THAT(opra.ToVector(), testing::ElementsAre(1, 2, 3, 0));
  189.     opra.InsertAfter(opra[3], 5);
  190.     ASSERT_THAT(opra.ToVector(), testing::ElementsAre(1, 2, 3, 0, 5));
  191.     opra.InsertBefore(opra[4], 2);
  192.     ASSERT_THAT(opra.ToVector(), testing::ElementsAre(1, 2, 3, 0, 2, 5));
  193.   }
  194. // Stack
  195.  
  196.   {
  197.     Container<std::string> ff1;
  198.     Container<std::string> ff2{};
  199.     Container<std::string> ff3{"1", "2", "3", "4"};
  200.     ASSERT_TRUE(ff1.Size() == ff2.Size());
  201.     ASSERT_TRUE(ff3.Size() == 4);
  202.     ff3.Push("5");
  203.     ff3.Push("6");
  204.     ASSERT_TRUE(ff3.Size() == 6);
  205.     for (int i = 0; i < 6; i++) {
  206.       ASSERT_TRUE(ff3.Get() == std::string(1, char('0' + 6 - i)));
  207.       ASSERT_TRUE(ff3.Size() == 6 - i);
  208.       ff3.Pop();
  209.     }
  210.     Container<int> x1{1, 2, 3};
  211.     Container<int> x2{1, 2};
  212.     Container<int> x3{1, 2, 3, 4};
  213.     ASSERT_FALSE(x1 == x2);
  214.     ASSERT_FALSE(x2 == x3);
  215.     ASSERT_FALSE(x1 == x3);
  216.     ASSERT_FALSE(x1 != x1);
  217.     x2.Push(3);
  218.     x3.Pop();
  219.     ASSERT_TRUE(x1 == x2);
  220.     ASSERT_TRUE(x1 == x3);
  221.     ASSERT_TRUE(x3 == x1);
  222.  
  223.   }
  224. // Const
  225.   const BiDirectionalList<int> f;
  226.   BiDirectionalList<int> f1{};
  227.   BiDirectionalList<int> f3{1, 2, 3, 4};
  228.   const std::initializer_list<int> x = {1, 2, 3};
  229.   BiDirectionalList<int> f4(x);
  230.   std::initializer_list<int> x1 = {1, 2, 3};
  231.   BiDirectionalList<int> f5(x1);
  232.   const BiDirectionalList<int> opa(f5);
  233.   BiDirectionalList<int> opa2(opa);
  234.   const BiDirectionalList<int>& opa3(std::move(opa2));
  235.   ASSERT_TRUE(f5.Size() != f.Size() && f.IsEmpty());
  236.   const int zzzz = 2;
  237.   f1.PushFront(zzzz);
  238.   f1.PushBack(zzzz);
  239.   ASSERT_TRUE(f1.Back()->value == f1.Front()->value);
  240.   ASSERT_TRUE (opa.Front() != opa.Back());
  241.   f1.PopBack();
  242.   f1.PopFront();
  243.   std::cout << (f1.Size() == 0);
  244.   const std::vector<int> buka = opa.ToVector();
  245.   const std::vector<int> buka2 = opa.FindAll(zzzz);
  246.   opa2 = opa;
  247.   opa2[1];
  248.   opa[1];
  249.   opa2.InsertBefore(opa2.Back(), zzzz);
  250.   opa2.InsertBefore(opa2.Front(), zzzz);
  251.   opa2.InsertAfter(opa2.Front(), zzzz);
  252.   opa2.InsertAfter(opa2.Back(), zzzz);
  253.   opa2.InsertAfter(opa2[0], zzzz);
  254.   while (!opa2.IsEmpty()) { opa2.Erase(opa2[0]); }
  255.   ASSERT_TRUE (opa2 == f1 && f1 == opa2);
  256.   f1 = opa;
  257.   f1 = opa2;
  258.   const Container<int> skoka;
  259.   const std::initializer_list<int> f42{12, 433};
  260.   Container<int> dota(f42);
  261.   Container<int> dota2(f42);
  262.   const Container<int> doka(f42);
  263.   const int dudochka = 4;
  264.   int sudochka = 4;
  265.   dota.Push(dudochka);
  266.   dota.Push(sudochka);
  267.   dota.Push(std::move(sudochka));
  268.   dota.Pop();
  269.   ASSERT_TRUE(doka.Get() == 433 || doka.Get() == 12);
  270.   doka.Size();
  271.   doka.IsEmpty();
  272.   ASSERT_TRUE(dota != dota2 && !(dota2 == dota));
  273.  
  274. }
  275. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  276. TEST(globalTests, All) {
  277.   while (true) {
  278.     SharedPtr<int> x(new int(24));
  279.     int* x2(new int(23));
  280.     SharedPtr<std::string> sss(new std::string("abrava"));
  281.     ASSERT_TRUE(*sss == "abrava");
  282.     // Construct + release
  283.     {
  284.       SharedPtr<int> c;
  285.       SharedPtr<int> g(new int(5));
  286.       SharedPtr<int> f(x);
  287.       {
  288.         SharedPtr<int> f2(x2);
  289.         f2.Release();
  290.         //ASSERT_TRUE(f2.Get() == nullptr);
  291.       }
  292.       SharedPtr<std::string> sss2(sss);
  293.       SharedPtr<std::string> sss3(sss);
  294.       SharedPtr<std::string> sss4(sss);
  295.       ASSERT_TRUE(sss2 == sss3);
  296.       ASSERT_FALSE(sss2 != sss3);
  297.     }
  298.     // !!!!!!!!!!!!! x need to be deleted
  299.     ASSERT_TRUE(*x2==23);
  300.    delete(x2);
  301.     ASSERT_TRUE(*(sss.Get()) == "abrava");
  302.     ASSERT_TRUE((*sss) == "abrava");
  303.     ASSERT_TRUE((sss->size()) == 6);
  304.    //  // = = = = Shared
  305.      SharedPtr<int> hoba;
  306.     const SharedPtr<int> zoba(hoba); // !?
  307.      SharedPtr<int> boba(hoba); // !?
  308.     boba = zoba;
  309.     const SharedPtr<int> cobra(new int(41));
  310.     boba = cobra;
  311.     ASSERT_TRUE(*cobra.Get() == 41);
  312.     {
  313.       boba.Release();
  314.       SharedPtr<int> novaya(new int(43));
  315.       ASSERT_TRUE ((*novaya) == 43 && *(novaya.Get()) == 43);
  316.       const SharedPtr<int> novaya2(new int(44));
  317.       ASSERT_TRUE ((*novaya2) == 44 && *(novaya2.Get()) == 44);
  318.      const SharedPtr<int>* novaya4 = &novaya2;
  319.      }
  320.    int* ccc = new int(44);
  321.  
  322.  
  323.     const SharedPtr<int> skolko_mojno(ccc);
  324.  
  325.     ASSERT_TRUE (ccc == skolko_mojno);
  326.  
  327.     SharedPtr<int> tttt;
  328.     tttt = skolko_mojno;
  329.     tttt = boba;
  330.     int* ppp = new int(4);
  331.     SharedPtr<int> xxxxx(ppp);
  332.     SharedPtr<int> fuf(std::move(xxxxx));
  333.     SharedPtr<int> xxe;
  334.     xxe = std::move(fuf);
  335.     ASSERT_TRUE(xxe.Get() == ppp);
  336.   }
  337. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement