shizaero

Untitled

Aug 17th, 2023
1,080
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.17 KB | None | 0 0
  1. #pragma once
  2. #include <cassert>
  3. #include <stdexcept>
  4.  
  5. // У функции, объявленной со спецификатором inline, может быть несколько
  6. // идентичных определений в разных единицах трансляции.
  7. // Обычно inline помечают функции, чьё тело находится в заголовочном файле,
  8. // чтобы при подключении этого файла из разных единиц трансляции не возникало ошибок компоновки
  9. inline void Test1() {
  10.     {
  11.         SimpleVector<int> v(1);
  12.         assert(v.GetSize() == 1);
  13.         assert(v.GetCapacity() == 1);
  14.        
  15.         v.PushBack(42);
  16.         assert(v.GetSize() == 2);
  17.     }
  18.     {
  19.         SimpleVector<int> v(3);
  20.         v.Resize(7);
  21.         assert(v.GetSize() == 7);
  22.     }
  23.     // Инициализация конструктором по умолчанию
  24.     {
  25.         SimpleVector<int> v;
  26.         assert(v.GetSize() == 0u);
  27.         assert(v.IsEmpty());
  28.         assert(v.GetCapacity() == 0u);
  29.     }
  30.  
  31.     // Инициализация вектора указанного размера
  32.     {
  33.         SimpleVector<int> v(5);
  34.         assert(v.GetSize() == 5u);
  35.         assert(v.GetCapacity() == 5u);
  36.         assert(!v.IsEmpty());
  37.         for (size_t i = 0; i < v.GetSize(); ++i) {
  38.             assert(v[i] == 0);
  39.         }
  40.     }
  41.  
  42.     // Инициализация вектора, заполненного заданным значением
  43.     {
  44.         SimpleVector<int> v(3, 42);
  45.         assert(v.GetSize() == 3);
  46.         assert(v.GetCapacity() == 3);
  47.         for (size_t i = 0; i < v.GetSize(); ++i) {
  48.             assert(v[i] == 42);
  49.         }
  50.     }
  51.  
  52.     // Инициализация вектора при помощи initializer_list
  53.     {
  54.         SimpleVector<int> v{1, 2, 3};
  55.         assert(v.GetSize() == 3);
  56.         assert(v.GetCapacity() == 3);
  57.         assert(v[2] == 3);
  58.     }
  59.  
  60.     // Доступ к элементам при помощи At
  61.     {
  62.         SimpleVector<int> v(3);
  63.         assert(&v.At(2) == &v[2]);
  64.         try {
  65.             v.At(3);
  66.             //assert(false);  // Ожидается выбрасывание исключения
  67.         } catch (const std::out_of_range&) {
  68.         } catch (...) {
  69.             assert(false);  // Не ожидается исключение, отличное от out_of_range
  70.         }
  71.     }
  72.  
  73.     // Очистка вектора
  74.     {
  75.         SimpleVector<int> v(10);
  76.         const size_t old_capacity = v.GetCapacity();
  77.         v.Clear();
  78.         assert(v.GetSize() == 0);
  79.         assert(v.GetCapacity() == old_capacity);
  80.     }
  81.  
  82.     // Изменение размера
  83.     {
  84.         SimpleVector<int> v(3);
  85.         v[2] = 17;
  86.         v.Resize(7);
  87.         assert(v.GetSize() == 7);
  88.         assert(v.GetCapacity() >= v.GetSize());
  89.         assert(v[2] == 17);
  90.         assert(v[3] == 0);
  91.     }
  92.     {
  93.         SimpleVector<int> v(3);
  94.         v[0] = 42;
  95.         v[1] = 55;
  96.         const size_t old_capacity = v.GetCapacity();
  97.         v.Resize(2);
  98.         assert(v.GetSize() == 2);
  99.         assert(v.GetCapacity() == old_capacity);
  100.         assert(v[0] == 42);
  101.         assert(v[1] == 55);
  102.     }
  103.     {
  104.         const size_t old_size = 3;
  105.         SimpleVector<int> v(3);
  106.         v.Resize(old_size + 5);
  107.         assert(v.GetSize() == 8);
  108.         v[3] = 42;
  109.         v[2] = 1;
  110.         assert(v[3] == 42);
  111.         v.Resize(old_size);
  112.         assert(v.GetSize() == 3);
  113.        
  114.         v.Resize(old_size + 2);
  115.         assert(v.GetSize() == 5);
  116.         assert(v[3] == 0);
  117.         assert(v[2] == 1);
  118.     }
  119.  
  120.     // Итерирование по SimpleVector
  121.     {
  122.         // Пустой вектор
  123.         {
  124.             SimpleVector<int> v;
  125.             assert(v.begin() == nullptr);
  126.             assert(v.end() == nullptr);
  127.         }
  128.  
  129.         // Непустой вектор
  130.         {
  131.             SimpleVector<int> v(10, 42);
  132.             assert(v.begin());
  133.             assert(*v.begin() == 42);
  134.             assert(v.end() == v.begin() + v.GetSize());
  135.         }
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment