ArrayTest.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. 
  2. #include "../testTools.h"
  3. #include "../../DFPSR/collection/Array.h"
  4. START_TEST(Array)
  5. {
  6. Array<int> a = Array<int>(4, 123);
  7. a[1] = 85;
  8. a[3] = -100;
  9. ASSERT_EQUAL(a.length(), 4);
  10. ASSERT_EQUAL(a[0], 123);
  11. ASSERT_EQUAL(a[1], 85);
  12. ASSERT_EQUAL(a[2], 123);
  13. ASSERT_EQUAL(a[3], -100);
  14. ASSERT_EQUAL(string_combine(a),
  15. U"{\n"
  16. U" 123,\n"
  17. U" 85,\n"
  18. U" 123,\n"
  19. U" -100\n"
  20. U"}"
  21. );
  22. // An initial assignment uses the copy constructor, because there is no pre-existing data in b.
  23. Array<int> b = a;
  24. b[0] = 200;
  25. b[2] = 100000;
  26. // The b array has changed...
  27. ASSERT_EQUAL(string_combine(b),
  28. U"{\n"
  29. U" 200,\n"
  30. U" 85,\n"
  31. U" 100000,\n"
  32. U" -100\n"
  33. U"}"
  34. );
  35. // ...but a remains the same, because the data was cloned when assigning.
  36. ASSERT_EQUAL(string_combine(a),
  37. U"{\n"
  38. U" 123,\n"
  39. U" 85,\n"
  40. U" 123,\n"
  41. U" -100\n"
  42. U"}"
  43. );
  44. // They are not equal
  45. ASSERT_NOT_EQUAL(a, b);
  46. // Assigning from copy construction is optimized into an assignment operation, because b already exists.
  47. a = Array<int>(b);
  48. // Now they are equal
  49. ASSERT_EQUAL(a, b);
  50. // Create another length
  51. Array<int> c = Array<int>(7, 75);
  52. ASSERT_EQUAL(string_combine(c),
  53. U"{\n"
  54. U" 75,\n"
  55. U" 75,\n"
  56. U" 75,\n"
  57. U" 75,\n"
  58. U" 75,\n"
  59. U" 75,\n"
  60. U" 75\n"
  61. U"}"
  62. );
  63. // Assign larger array
  64. a = c;
  65. ASSERT_EQUAL(string_combine(a),
  66. U"{\n"
  67. U" 75,\n"
  68. U" 75,\n"
  69. U" 75,\n"
  70. U" 75,\n"
  71. U" 75,\n"
  72. U" 75,\n"
  73. U" 75\n"
  74. U"}"
  75. );
  76. ASSERT_EQUAL(a, c);
  77. ASSERT_NOT_EQUAL(a, b);
  78. // Assign smaller array
  79. c = b;
  80. ASSERT_EQUAL(string_combine(c),
  81. U"{\n"
  82. U" 200,\n"
  83. U" 85,\n"
  84. U" 100000,\n"
  85. U" -100\n"
  86. U"}"
  87. );
  88. ASSERT_EQUAL(c, b);
  89. ASSERT_NOT_EQUAL(a, c);
  90. }
  91. END_TEST