PageRenderTime 54ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/src/kangmodb/testClassArrayMap.cpp

#
C++ | 144 lines | 74 code | 30 blank | 40 comment | 67 complexity | a21d3d2e3cef2d47e67d975b254530ef MD5 | raw file
Possible License(s): BSD-3-Clause
  1. /*
  2. * testClassArrayMap.cpp
  3. * kangmodb
  4. *
  5. * Created by 강모 김 on 11. 5. 8..
  6. * Copyright 2011 강모소프트. All rights reserved.
  7. *
  8. */
  9. #include "gtest/gtest.h"
  10. #include "testCommon.h"
  11. #include "types.h"
  12. #include "kdInfra.h"
  13. #include "table.h"
  14. #include "arrayMap.h"
  15. /** @brief Test kdArrayMap class.
  16. */
  17. class ArrayMapTest : public testing::Test {
  18. protected: // You should make the members protected s.t. they can be
  19. // accessed from sub-classes.
  20. // virtual void SetUp() will be called before each test is run. You
  21. // should define it if you need to initialize the varaibles.
  22. // Otherwise, this can be skipped.
  23. virtual void SetUp() {
  24. }
  25. // virtual void TearDown() will be called after each test is run.
  26. // You should define it if there is cleanup work to do. Otherwise,
  27. // you don't have to provide it.
  28. //
  29. virtual void TearDown() {
  30. }
  31. protected:
  32. stgTable * table_;
  33. };
  34. /** @brief Basic tests for ArrayMap.
  35. */
  36. TEST_F(ArrayMapTest, Basic_GetKeysAssigned) {
  37. kdArrayMap<stgTableId, stgTable*> map;
  38. ASSERT_TRUE( map.initialize(3 /* max size */ ) == 0 );
  39. stgTable * table;
  40. stgTableId tableId;
  41. // TODO : Hit Assertion : put key 0.
  42. #define PSEUDO_TBL_ADDR(n) ((stgTable*)(n*8))
  43. // Put 1st table
  44. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(1), &tableId) == 0);
  45. ASSERT_TRUE( tableId == 1);
  46. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(1) );
  47. // Put 2nd table
  48. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(2), &tableId) == 0);
  49. ASSERT_TRUE( tableId == 2);
  50. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(1) );
  51. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(2) );
  52. // Put 3rd table
  53. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(3), &tableId) == 0);
  54. ASSERT_TRUE( tableId == 3);
  55. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(1) );
  56. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(2) );
  57. ASSERT_TRUE( map.get(3, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(3) );
  58. // Put 4th table => ArrayMap FULL.
  59. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(4), &tableId) == KD_EXCP_ARRAY_MAP_FULL);
  60. // Remove the 2nd mapping
  61. ASSERT_TRUE( map.remove(2) == 0);
  62. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == NULL );
  63. // Put 4th table
  64. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(4), &tableId) == 0);
  65. // The removed tableId is reused.
  66. ASSERT_TRUE( tableId == 2);
  67. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(4) );
  68. // Remove tableID 1, 3
  69. ASSERT_TRUE( map.remove(1) == 0);
  70. ASSERT_TRUE( map.remove(3) == 0);
  71. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == NULL );
  72. ASSERT_TRUE( map.get(3, &table) == 0); ASSERT_TRUE( table == NULL );
  73. // Put 5th, 6th table, the table Id 1 and 3 are reused.
  74. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(5), &tableId) == 0);
  75. ASSERT_TRUE( tableId == 1);
  76. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(6), &tableId) == 0);
  77. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(5) );
  78. ASSERT_TRUE( tableId == 3);
  79. ASSERT_TRUE( map.get(3, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(6) );
  80. ASSERT_TRUE( map.destroy() == 0 );
  81. }
  82. /** @brief Basic tests for ArrayMap.
  83. */
  84. TEST_F(ArrayMapTest, Basic_SetKey) {
  85. kdArrayMap<stgTableId, stgTable*> map;
  86. ASSERT_TRUE( map.initialize(3 /* max size */ ) == 0 );
  87. stgTable * table;
  88. stgTableId tableId;
  89. // TODO : Hit Assertion : put key 0.
  90. #define PSEUDO_TBL_ADDR(n) ((stgTable*)(n*8))
  91. // Put 1st table
  92. ASSERT_TRUE( map.put(1, PSEUDO_TBL_ADDR(1)) == 0);
  93. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(1) );
  94. // Put 2nd table
  95. ASSERT_TRUE( map.put(2, PSEUDO_TBL_ADDR(2)) == 0);
  96. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(1) );
  97. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(2) );
  98. // Put 3rd table
  99. ASSERT_TRUE( map.put(3, PSEUDO_TBL_ADDR(3)) == 0);
  100. ASSERT_TRUE( map.get(1, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(1) );
  101. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(2) );
  102. ASSERT_TRUE( map.get(3, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(3) );
  103. // Put 4th table => ArrayMap FULL.
  104. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(4), &tableId) == KD_EXCP_ARRAY_MAP_FULL);
  105. // Remove the 2nd mapping
  106. ASSERT_TRUE( map.remove(2) == 0);
  107. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == NULL );
  108. // Put 4th table
  109. ASSERT_TRUE( map.put(PSEUDO_TBL_ADDR(4), &tableId) == 0);
  110. // The removed tableId is reused.
  111. ASSERT_TRUE( tableId == 2);
  112. ASSERT_TRUE( map.get(2, &table) == 0); ASSERT_TRUE( table == PSEUDO_TBL_ADDR(4) );
  113. ASSERT_TRUE( map.destroy() == 0 );
  114. }