PageRenderTime 61ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/src/com/jmc/practice/SimpleTreeMapTestor.java

https://gitlab.com/jamesmarkchan/jPractice
Java | 217 lines | 169 code | 28 blank | 20 comment | 8 complexity | 057718270bc0913959d6ac4c6db782a8 MD5 | raw file
  1. package com.jmc.practice;
  2. import static org.junit.Assert.*;
  3. import java.util.HashSet;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6. import java.util.Random;
  7. import java.util.TreeMap;
  8. import java.util.TreeSet;
  9. import org.junit.Test;
  10. public class SimpleTreeMapTestor {
  11. @Test
  12. public void testEmptyTree() {
  13. SimpleTreeMap tree = new SimpleTreeMap();
  14. tree.clear();
  15. assertFalse(tree.contains(1));
  16. assertNull(tree.get(1));
  17. assertNull(tree.remove(1));
  18. assertEquals(0, tree.getValues().size());
  19. assertEquals(0, tree.getKeys().size());
  20. }
  21. @Test
  22. public void testPutGetKeysValues() {
  23. SimpleTreeMap tree = new SimpleTreeMap();
  24. tree.put(1, 2);
  25. tree.put(3, 4);
  26. tree.put(5, 6);
  27. tree.put(5, 7);
  28. HashSet<Object> keySet = new HashSet<>();
  29. keySet.add(1);
  30. keySet.add(3);
  31. keySet.add(5);
  32. assertTrue(tree.getKeys().containsAll(keySet));
  33. HashSet<Object> valSet = new HashSet<>();
  34. valSet.add(2);
  35. valSet.add(4);
  36. valSet.add(7);
  37. assertTrue(tree.getValues().containsAll(valSet));
  38. assertEquals(2, tree.get(1));
  39. assertEquals(4, tree.get(3));
  40. assertEquals(7, tree.get(5));
  41. }
  42. @Test
  43. public void testRandomKeysValues() {
  44. // Setup SimpleTreeMap and the java TreeMap with random ints to compare against
  45. final int NUMBER = 10000;
  46. SimpleTreeMap tree = new SimpleTreeMap();
  47. TreeMap<Object, Object> jTree = new TreeMap<>();
  48. int key;
  49. int val;
  50. for (int i=0; i<NUMBER; i++) {
  51. Random ran = new Random();
  52. key = ran.nextInt(10000) + 1;
  53. val = key;
  54. tree.put(key, val);
  55. jTree.put(key, val);
  56. }
  57. // verify both collections key sets are in the same order
  58. List<Object> myKeyList = new LinkedList<>(tree.getKeys());
  59. List<Object> jKeyList = new LinkedList<>(jTree.keySet());
  60. for (int i=0; i<jKeyList.size(); i++) {
  61. if (myKeyList.get(i).hashCode() != jKeyList.get(i).hashCode()) {
  62. fail();
  63. }
  64. }
  65. // diagnostic output to display key order
  66. //System.out.println("num tree keys: "+tree.getKeys().size());
  67. //System.out.println("tree keys: "+tree.getKeys());
  68. //System.out.println("tree values: "+tree.getValues());
  69. //System.out.println("num jTree keys: "+jTree.keySet().size());
  70. //System.out.println("jTree keys: "+jTree.keySet());
  71. //System.out.println("jTree values: "+jTree.values());
  72. // verify contents are the same
  73. assertTrue(tree.getValues().containsAll(jTree.values()));
  74. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  75. assertEquals(tree.size(), jTree.size());
  76. for (Object k : jTree.keySet()) {
  77. tree.contains(k);
  78. assertEquals(jTree.get(k), tree.get(k));
  79. }
  80. // remove all odd keys
  81. TreeSet<Object> keySet = new TreeSet<>(jTree.keySet());
  82. for (Object k: keySet) {
  83. if (k.hashCode() % 2 == 0) {
  84. jTree.remove(k);
  85. tree.remove(k);
  86. }
  87. }
  88. // verify all odd keys are removed
  89. assertTrue(tree.getValues().containsAll(jTree.values()));
  90. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  91. assertEquals(tree.size(), jTree.size());
  92. // test clear
  93. tree.clear();
  94. jTree.clear();
  95. assertEquals(0, tree.getValues().size());
  96. assertEquals(0, tree.getKeys().size());
  97. assertEquals(0, tree.size());
  98. }
  99. @Test
  100. public void testRemoveLeaf() {
  101. SimpleTreeMap tree = new SimpleTreeMap();
  102. TreeMap<Object, Object> jTree = new TreeMap<>();
  103. tree.put(1, 2);
  104. tree.put(3, 4);
  105. tree.put(5, 6);
  106. jTree.put(1, 2);
  107. jTree.put(3, 4);
  108. jTree.put(5, 6);
  109. assertTrue(tree.getValues().containsAll(jTree.values()));
  110. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  111. tree.remove(5);
  112. jTree.remove(5);
  113. assertTrue(tree.getValues().containsAll(jTree.values()));
  114. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  115. }
  116. @Test
  117. public void testRemoveOneChild() {
  118. // setup initial map
  119. SimpleTreeMap tree = new SimpleTreeMap();
  120. TreeMap<Object, Object> jTree = new TreeMap<>();
  121. tree.put(1, 100);
  122. tree.put(3, 300);
  123. tree.put(5, 500);
  124. jTree.put(1, 100);
  125. jTree.put(3, 300);
  126. jTree.put(5, 500);
  127. // verify maps are similar
  128. assertTrue(tree.getValues().containsAll(jTree.values()));
  129. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  130. // remove middle node for right right tree
  131. assertEquals(300,tree.remove(3));
  132. assertEquals(300,jTree.remove(3));
  133. assertTrue(tree.getValues().containsAll(jTree.values()));
  134. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  135. // remove middle node for left left tree
  136. tree.put(4, 400);
  137. tree.put(2, 200);
  138. jTree.put(4, 400);
  139. jTree.put(2, 200);
  140. assertEquals(400,tree.remove(4));
  141. assertEquals(400,jTree.remove(4));
  142. assertTrue(tree.getValues().containsAll(jTree.values()));
  143. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  144. // modify tree to we can test the RLR tree combination
  145. tree.put(3, 300);
  146. jTree.put(3, 300);
  147. // execute remove on LR tree
  148. assertEquals(200,tree.remove(2));
  149. assertEquals(200,jTree.remove(2));
  150. assertTrue(tree.getValues().containsAll(jTree.values()));
  151. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  152. // execute remove on LR tree
  153. assertEquals(500,tree.remove(5));
  154. assertEquals(500,jTree.remove(5));
  155. assertTrue(tree.getValues().containsAll(jTree.values()));
  156. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  157. }
  158. @Test
  159. public void testRemoveTwoChildren() {
  160. SimpleTreeMap tree = new SimpleTreeMap();
  161. TreeMap<Object, Object> jTree = new TreeMap<>();
  162. tree.put(1, 2);
  163. tree.put(3, 4);
  164. tree.put(5, 6);
  165. tree.put(2, 200);
  166. tree.put(22, 200);
  167. tree.put(4, 400);
  168. jTree.put(1, 2);
  169. jTree.put(3, 4);
  170. jTree.put(5, 6);
  171. jTree.put(2, 200);
  172. jTree.put(22, 200);
  173. jTree.put(4, 400);
  174. assertTrue(tree.getValues().containsAll(jTree.values()));
  175. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  176. tree.remove(3);
  177. jTree.remove(3);
  178. assertTrue(tree.getValues().containsAll(jTree.values()));
  179. assertTrue(tree.getKeys().containsAll(jTree.keySet()));
  180. }
  181. @Test
  182. public void testRemoveRoot() {
  183. SimpleTreeMap tree = new SimpleTreeMap();
  184. tree.put(1, 1);
  185. tree.remove(1);
  186. assertEquals(0, tree.size());
  187. tree.remove(1);
  188. }
  189. }