ArrayTest.cpp 1.8 KB

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