InsertionSortTest.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  2. // SPDX-License-Identifier: MIT
  3. #include "UnitTestFramework.h"
  4. #include <Jolt/Core/InsertionSort.h>
  5. TEST_SUITE("InsertionSortTest")
  6. {
  7. TEST_CASE("TestOrderedArray")
  8. {
  9. Array<int> array;
  10. for (int i = 0; i < 10; i++)
  11. array.push_back(i);
  12. InsertionSort(array.begin(), array.end());
  13. for (int i = 0; i < 10; i++)
  14. CHECK(array[i] == i);
  15. }
  16. TEST_CASE("TestOrderedArrayComparator")
  17. {
  18. Array<int> array;
  19. for (int i = 0; i < 100; i++)
  20. array.push_back(i);
  21. InsertionSort(array.begin(), array.end(), greater<int> {});
  22. for (int i = 0; i < 100; i++)
  23. CHECK(array[i] == 99 - i);
  24. }
  25. TEST_CASE("TestReversedArray")
  26. {
  27. Array<int> array;
  28. for (int i = 0; i < 10; i++)
  29. array.push_back(9 - i);
  30. InsertionSort(array.begin(), array.end());
  31. for (int i = 0; i < 10; i++)
  32. CHECK(array[i] == i);
  33. }
  34. TEST_CASE("TestRandomArray")
  35. {
  36. UnitTestRandom random;
  37. Array<UnitTestRandom::result_type> array;
  38. for (int i = 0; i < 100; i++)
  39. {
  40. UnitTestRandom::result_type value = random();
  41. // Insert value at beginning
  42. array.insert(array.begin(), value);
  43. // Insert value at end
  44. array.push_back(value);
  45. }
  46. InsertionSort(array.begin(), array.end());
  47. for (Array<int>::size_type i = 0; i < array.size() - 2; i += 2)
  48. {
  49. // We inserted the same value twice so these elements should be the same
  50. CHECK(array[i] == array[i + 1]);
  51. // The next element should be bigger or equal
  52. CHECK(array[i] <= array[i + 2]);
  53. }
  54. }
  55. TEST_CASE("TestEmptyArray")
  56. {
  57. Array<int> array;
  58. InsertionSort(array.begin(), array.end());
  59. CHECK(array.empty());
  60. }
  61. TEST_CASE("Test1ElementArray")
  62. {
  63. Array<int> array { 1 };
  64. InsertionSort(array.begin(), array.end());
  65. CHECK(array[0] == 1);
  66. }
  67. TEST_CASE("Test2ElementArray")
  68. {
  69. Array<int> array { 2, 1 };
  70. InsertionSort(array.begin(), array.end());
  71. CHECK(array[0] == 1);
  72. CHECK(array[1] == 2);
  73. }
  74. }