Advertisement
AmidamaruZXC

Untitled

Apr 13th, 2020
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.11 KB | None | 0 0
  1. #include <cassert>
  2. #include "../source/bitarray.hpp"
  3.  
  4.  
  5. void bitarrayGoodAlloc_Constructors_test()
  6. {
  7.     bool caught = false;
  8.     try
  9.     {
  10.         bitarray bad_vec(-1);
  11.     }
  12.     catch (...) {
  13.         caught = true;
  14.     }
  15.  
  16.     bitarray v(100, true);
  17.     assert(v.size() == 100);
  18.  
  19.     bitarray v1(v);
  20.     assert(v1.size() == 100);
  21.  
  22.     for (int i = 0; i < v.size(); i++)
  23.         assert(v1[i] == v[i]);
  24.  
  25.     bitarray v_created_by_rvalue = std::move(bitarray{});
  26.     assert(v_created_by_rvalue.size() == 0);
  27. }
  28.  
  29.  
  30. void bitarrayGoodAlloc_Assignments_test() {
  31.     bitarray v(0, false);
  32.     assert(v.size() == 0);
  33.  
  34.     bitarray other(13, true);
  35.     assert(other.size() == 13);
  36.     v = other;
  37.     assert(v.size() == other.size());
  38.  
  39.     for (int i = 0; i < other.size(); i++)
  40.         assert(v[i] == other[i]);
  41.  
  42.     bitarray v1;
  43.     assert(v1.size() == 0);
  44.     v1 = v = other;
  45.     assert(v1.size() == other.size());
  46.  
  47.     for (int i = 0; i < other.size(); i++)
  48.         assert(v1[i] == other[i]);
  49.  
  50.     v1 = std::move(bitarray{ 41, false });
  51.     assert(v1.size() == 41);
  52.  
  53.     for (int i = 0; i < v1.size(); i++)
  54.         assert(v1[i] == false);
  55. }
  56.  
  57. void bitarrayGoodAlloc_PushBack_test() {
  58.     bitarray v;
  59.     int n = 100;
  60.  
  61.     std::vector<bool> varr(n, false);
  62.  
  63.     for (unsigned int i = 0; i < varr.size() - 1; i += 3)
  64.         varr[i] = true;
  65.  
  66.     for (int i = 0; i < n; i++)
  67.         v.push_back(varr[i]);
  68.  
  69.     assert(v.size() == n);
  70.  
  71.     for (int i = 0; i < n; i++)
  72.         assert(v[i] == varr[i]);
  73.  
  74.     // operator[] for const object:
  75.     const bitarray v_const = v;
  76.  
  77.     for (int i = 0; i < v_const.size(); i++)
  78.         assert(v_const[i] == v[i]);
  79. }
  80.  
  81. void bitarrayGoodAlloc_BadRanges_test() {
  82.  
  83.     bitarray v;
  84.     bool caught1 = false;
  85.     try
  86.     {
  87.         v[-1];
  88.     }
  89.     catch (...) {
  90.         caught1 = true;
  91.     }
  92.  
  93.     v.push_back(true);
  94.     bool caught2 = false;
  95.     try
  96.     {
  97.         v.at(2);
  98.     }
  99.     catch (...) {
  100.         caught2 = true;
  101.     }
  102.  
  103.     const bitarray v1(2, true);
  104.     bool caught3 = false;
  105.     try
  106.     {
  107.         v1[-1];
  108.     }
  109.     catch (...) {
  110.         caught3 = true;
  111.     }
  112.  
  113.     bool caught4 = false;
  114.     try
  115.     {
  116.         v1.at(3);
  117.     }
  118.     catch (...) {
  119.         caught4 = true;
  120.     }
  121. }
  122.  
  123. void bitarrayGoodAlloc_Resize_test() {
  124.  
  125.     bitarray v;
  126.     v.resize(123);
  127.  
  128.     assert(v.size() == 123);
  129.  
  130.     v.resize(140);
  131.     assert(v.size() == 140);
  132.  
  133.     std::vector<bool> values(140);
  134.     values.resize(0);
  135.  
  136.     for (int i = 0; i < v.size(); i++) {
  137.         if (i % 2)
  138.             values.push_back(v[i] = true);
  139.         else
  140.             values.push_back(v[i] = false);
  141.     }
  142.  
  143.     v.resize(10);
  144.     assert(v.size() == 10);
  145.  
  146.     for (int i = 0; i < v.size(); i++)
  147.         assert(v[i] == values[i]);
  148.  
  149.     bool caught = false;
  150.     try
  151.     {
  152.         v.resize(-1);
  153.     }
  154.     catch (...) {
  155.         caught = true;
  156.     }
  157.  
  158.     v.resize(0);
  159.     assert(v.size() == 0);
  160. }
  161.  
  162. void bitarrayGoodAlloc_iterators_test() {
  163.  
  164.     bitarray v(100, true);
  165.     assert(v.size() == 100);
  166.  
  167.     for (auto elem : v)
  168.         assert(elem == true);
  169.  
  170.     *(v.at(41)) = false;
  171.  
  172.     assert(v[41] == false);
  173.     assert(*v.at(41) == false);
  174.  
  175.     assert(*v.begin() == 1);
  176.  
  177.     auto it = v.at(41);
  178.  
  179.     auto save_it = it++;
  180.     assert(*save_it == false);
  181.     assert(*it == true);
  182.  
  183.     auto save_it1 = it--;
  184.     assert(*save_it1 == true);
  185.     assert(*it == false);
  186.  
  187.     it -= 41;
  188.     assert((it == v.begin()) == true);
  189.  
  190.     it += 41;
  191.     assert((it == save_it) == true);
  192.  
  193.     assert(((v.begin() + v.size()) == v.end()) == true);
  194.     assert(((v.end() - v.size()) == v.begin()) == true);
  195. }
  196.  
  197. void bitarrayGoodAlloc_const_iterators_test() {
  198.  
  199.     bitarray v1(100, true);
  200.     assert(v1.size() == 100);
  201.  
  202.     for (auto elem : v1)
  203.         assert(elem == true);
  204.  
  205.     *(v1.at(41)) = false;
  206.  
  207.     const bitarray v = v1;
  208.  
  209.     assert(v[41] == false);
  210.     assert(*v.at(41) == false);
  211.  
  212.     assert(*v.begin() == 1);
  213.  
  214.     auto it = v.at(41);
  215.  
  216.     auto save_it = it++;
  217.     assert(*save_it == false);
  218.     assert(*it == true);
  219.  
  220.     auto save_it1 = it--;
  221.     assert(*save_it1 == true);
  222.     assert(*it == false);
  223.  
  224.     assert((save_it1 != it) == true);
  225.  
  226.     it -= 41;
  227.     assert((it == v.begin()) == true);
  228.  
  229.     it += 41;
  230.     assert((it == save_it) == true);
  231.  
  232.     assert(((v.begin() + v.size()) == v.end()) == true);
  233.     assert(((v.end() - v.size()) == v.begin()) == true);
  234. }
  235.  
  236. void bitarrayGoodAlloc_find_test() {
  237.     bitarray elems(100, true);
  238.  
  239.     for (int i = 0; i < elems.size(); i += 3)
  240.         elems[i] = false;
  241.  
  242.     assert(bitarray::find_bit(0, 64, 0x6db6db6db6db6db6, false) == 0);
  243.  
  244.     assert(elems.find(0, elems.size(), false) == 0);
  245.     assert(elems.find(3, elems.size(), false) == 3);
  246.     assert(elems.find(99, elems.size(), true) == -1);
  247.     assert(elems.find(0, 3, false) == 0);
  248.     assert(elems.find(0, 3, true) == 1);
  249.  
  250.     bool caught = false;
  251.     try {
  252.         elems.find(-1, 3, false);
  253.     }
  254.     catch (...) {
  255.         caught = true;
  256.     }
  257. }
  258.  
  259. // BAD ALLOC TESTS
  260. bool BAD_NEW = false;
  261. void* operator new(size_t size) {
  262.     if (BAD_NEW)
  263.         throw std::bad_alloc();
  264.  
  265.     void* ptr = malloc(size);
  266.  
  267.     if (!ptr)
  268.         throw std::bad_alloc();
  269.  
  270.     return ptr;
  271. }
  272.  
  273. void bitarrayBadAlloc_constructors_test() {
  274.  
  275.     BAD_NEW = true;
  276.     bool caught1 = false;
  277.     try {
  278.         bitarray v_bad_constructor(12, true);
  279.     }
  280.     catch (...) {
  281.         caught1 = true;
  282.     }
  283.     BAD_NEW = false;
  284.  
  285.     // CREATING BITARRAY WITH NORMAL new TO TEST OTHER CONSTRUCTORS AND OTHER
  286.     bitarray v(121, true);
  287.     assert(v.size() == 121);
  288.     for (auto elem : v)
  289.         assert(elem == true);
  290.     //
  291.  
  292.     BAD_NEW = true;
  293.     bool caught2 = false;
  294.     try {
  295.         bitarray v_bad_copyctor = v;
  296.     }
  297.     catch (...) {
  298.         caught2 = true;
  299.     }
  300.     BAD_NEW = false;
  301.  
  302.     bitarray v_assign(11, true);
  303.     assert(v_assign.size() == 11);
  304.     for (auto elem : v_assign)
  305.         assert(elem == true);
  306.  
  307.     BAD_NEW = true;
  308.     bool caught3 = false;
  309.     try {
  310.         v_assign = v;
  311.     }
  312.     catch (...) {
  313.         caught3 = true;
  314.     }
  315.     BAD_NEW = false;
  316.  
  317.     assert(v_assign.size() == 11);
  318.     for (auto elem : v_assign)
  319.         assert(elem == true);
  320.  
  321.     BAD_NEW = true;
  322.     bool caught4 = false;
  323.     try {
  324.         v_assign.resize(100000);
  325.     }
  326.     catch (...) {
  327.         caught4 = true;
  328.     }
  329.     BAD_NEW = false;
  330.  
  331.     assert(v_assign.size() == 11);
  332.     for (auto elem : v_assign)
  333.         assert(elem == true);
  334. }
  335.  
  336. int main(int argc, char** argv) {
  337.     bitarrayBadAlloc_constructors_test();
  338.     bitarrayGoodAlloc_Assignments_test();
  339.     bitarrayGoodAlloc_BadRanges_test();
  340.     bitarrayGoodAlloc_Constructors_test();
  341.     bitarrayGoodAlloc_const_iterators_test();
  342.     bitarrayGoodAlloc_find_test();
  343.     bitarrayGoodAlloc_iterators_test();
  344.     bitarrayGoodAlloc_PushBack_test();
  345.     bitarrayGoodAlloc_Resize_test();
  346.     return 0;
  347. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement