/src/test/tck/TreeSubMapTest.java

https://github.com/dmlloyd/jsr166 · Java · 1101 lines · 801 code · 102 blank · 198 comment · 18 complexity · 7ccfa31d75c3cf7027491c4dd93c8316 MD5 · raw file

  1. /*
  2. * Written by Doug Lea with assistance from members of JCP JSR-166
  3. * Expert Group and released to the public domain, as explained at
  4. * http://creativecommons.org/publicdomain/zero/1.0/
  5. */
  6. import junit.framework.*;
  7. import java.util.*;
  8. public class TreeSubMapTest extends JSR166TestCase {
  9. public static void main(String[] args) {
  10. junit.textui.TestRunner.run(suite());
  11. }
  12. public static Test suite() {
  13. return new TestSuite(TreeSubMapTest.class);
  14. }
  15. /**
  16. * Create a map from Integers 1-5 to Strings "A"-"E".
  17. */
  18. private static NavigableMap map5() {
  19. TreeMap map = new TreeMap();
  20. assertTrue(map.isEmpty());
  21. map.put(zero, "Z");
  22. map.put(one, "A");
  23. map.put(five, "E");
  24. map.put(three, "C");
  25. map.put(two, "B");
  26. map.put(four, "D");
  27. map.put(seven, "F");
  28. assertFalse(map.isEmpty());
  29. assertEquals(7, map.size());
  30. return map.subMap(one, true, seven, false);
  31. }
  32. private static NavigableMap map0() {
  33. TreeMap map = new TreeMap();
  34. assertTrue(map.isEmpty());
  35. return map.tailMap(one, true);
  36. }
  37. /**
  38. * Create a map from Integers -5 to -1 to Strings "A"-"E".
  39. */
  40. private static NavigableMap dmap5() {
  41. TreeMap map = new TreeMap();
  42. assertTrue(map.isEmpty());
  43. map.put(m1, "A");
  44. map.put(m5, "E");
  45. map.put(m3, "C");
  46. map.put(m2, "B");
  47. map.put(m4, "D");
  48. assertFalse(map.isEmpty());
  49. assertEquals(5, map.size());
  50. return map.descendingMap();
  51. }
  52. private static NavigableMap dmap0() {
  53. TreeMap map = new TreeMap();
  54. assertTrue(map.isEmpty());
  55. return map;
  56. }
  57. /**
  58. * clear removes all pairs
  59. */
  60. public void testClear() {
  61. NavigableMap map = map5();
  62. map.clear();
  63. assertEquals(map.size(), 0);
  64. }
  65. /**
  66. * Maps with same contents are equal
  67. */
  68. public void testEquals() {
  69. NavigableMap map1 = map5();
  70. NavigableMap map2 = map5();
  71. assertEquals(map1, map2);
  72. assertEquals(map2, map1);
  73. map1.clear();
  74. assertFalse(map1.equals(map2));
  75. assertFalse(map2.equals(map1));
  76. }
  77. /**
  78. * containsKey returns true for contained key
  79. */
  80. public void testContainsKey() {
  81. NavigableMap map = map5();
  82. assertTrue(map.containsKey(one));
  83. assertFalse(map.containsKey(zero));
  84. }
  85. /**
  86. * containsValue returns true for held values
  87. */
  88. public void testContainsValue() {
  89. NavigableMap map = map5();
  90. assertTrue(map.containsValue("A"));
  91. assertFalse(map.containsValue("Z"));
  92. }
  93. /**
  94. * get returns the correct element at the given key,
  95. * or null if not present
  96. */
  97. public void testGet() {
  98. NavigableMap map = map5();
  99. assertEquals("A", (String)map.get(one));
  100. NavigableMap empty = map0();
  101. assertNull(empty.get(one));
  102. }
  103. /**
  104. * isEmpty is true of empty map and false for non-empty
  105. */
  106. public void testIsEmpty() {
  107. NavigableMap empty = map0();
  108. NavigableMap map = map5();
  109. assertTrue(empty.isEmpty());
  110. assertFalse(map.isEmpty());
  111. }
  112. /**
  113. * firstKey returns first key
  114. */
  115. public void testFirstKey() {
  116. NavigableMap map = map5();
  117. assertEquals(one, map.firstKey());
  118. }
  119. /**
  120. * lastKey returns last key
  121. */
  122. public void testLastKey() {
  123. NavigableMap map = map5();
  124. assertEquals(five, map.lastKey());
  125. }
  126. /**
  127. * keySet returns a Set containing all the keys
  128. */
  129. public void testKeySet() {
  130. NavigableMap map = map5();
  131. Set s = map.keySet();
  132. assertEquals(5, s.size());
  133. assertTrue(s.contains(one));
  134. assertTrue(s.contains(two));
  135. assertTrue(s.contains(three));
  136. assertTrue(s.contains(four));
  137. assertTrue(s.contains(five));
  138. }
  139. /**
  140. * keySet is ordered
  141. */
  142. public void testKeySetOrder() {
  143. NavigableMap map = map5();
  144. Set s = map.keySet();
  145. Iterator i = s.iterator();
  146. Integer last = (Integer)i.next();
  147. assertEquals(last, one);
  148. while (i.hasNext()) {
  149. Integer k = (Integer)i.next();
  150. assertTrue(last.compareTo(k) < 0);
  151. last = k;
  152. }
  153. }
  154. /**
  155. * values collection contains all values
  156. */
  157. public void testValues() {
  158. NavigableMap map = map5();
  159. Collection s = map.values();
  160. assertEquals(5, s.size());
  161. assertTrue(s.contains("A"));
  162. assertTrue(s.contains("B"));
  163. assertTrue(s.contains("C"));
  164. assertTrue(s.contains("D"));
  165. assertTrue(s.contains("E"));
  166. }
  167. /**
  168. * entrySet contains all pairs
  169. */
  170. public void testEntrySet() {
  171. NavigableMap map = map5();
  172. Set s = map.entrySet();
  173. assertEquals(5, s.size());
  174. Iterator it = s.iterator();
  175. while (it.hasNext()) {
  176. Map.Entry e = (Map.Entry) it.next();
  177. assertTrue(
  178. (e.getKey().equals(one) && e.getValue().equals("A")) ||
  179. (e.getKey().equals(two) && e.getValue().equals("B")) ||
  180. (e.getKey().equals(three) && e.getValue().equals("C")) ||
  181. (e.getKey().equals(four) && e.getValue().equals("D")) ||
  182. (e.getKey().equals(five) && e.getValue().equals("E")));
  183. }
  184. }
  185. /**
  186. * putAll adds all key-value pairs from the given map
  187. */
  188. public void testPutAll() {
  189. NavigableMap empty = map0();
  190. NavigableMap map = map5();
  191. empty.putAll(map);
  192. assertEquals(5, empty.size());
  193. assertTrue(empty.containsKey(one));
  194. assertTrue(empty.containsKey(two));
  195. assertTrue(empty.containsKey(three));
  196. assertTrue(empty.containsKey(four));
  197. assertTrue(empty.containsKey(five));
  198. }
  199. /**
  200. * remove removes the correct key-value pair from the map
  201. */
  202. public void testRemove() {
  203. NavigableMap map = map5();
  204. map.remove(five);
  205. assertEquals(4, map.size());
  206. assertFalse(map.containsKey(five));
  207. }
  208. /**
  209. * lowerEntry returns preceding entry.
  210. */
  211. public void testLowerEntry() {
  212. NavigableMap map = map5();
  213. Map.Entry e1 = map.lowerEntry(three);
  214. assertEquals(two, e1.getKey());
  215. Map.Entry e2 = map.lowerEntry(six);
  216. assertEquals(five, e2.getKey());
  217. Map.Entry e3 = map.lowerEntry(one);
  218. assertNull(e3);
  219. Map.Entry e4 = map.lowerEntry(zero);
  220. assertNull(e4);
  221. }
  222. /**
  223. * higherEntry returns next entry.
  224. */
  225. public void testHigherEntry() {
  226. NavigableMap map = map5();
  227. Map.Entry e1 = map.higherEntry(three);
  228. assertEquals(four, e1.getKey());
  229. Map.Entry e2 = map.higherEntry(zero);
  230. assertEquals(one, e2.getKey());
  231. Map.Entry e3 = map.higherEntry(five);
  232. assertNull(e3);
  233. Map.Entry e4 = map.higherEntry(six);
  234. assertNull(e4);
  235. }
  236. /**
  237. * floorEntry returns preceding entry.
  238. */
  239. public void testFloorEntry() {
  240. NavigableMap map = map5();
  241. Map.Entry e1 = map.floorEntry(three);
  242. assertEquals(three, e1.getKey());
  243. Map.Entry e2 = map.floorEntry(six);
  244. assertEquals(five, e2.getKey());
  245. Map.Entry e3 = map.floorEntry(one);
  246. assertEquals(one, e3.getKey());
  247. Map.Entry e4 = map.floorEntry(zero);
  248. assertNull(e4);
  249. }
  250. /**
  251. * ceilingEntry returns next entry.
  252. */
  253. public void testCeilingEntry() {
  254. NavigableMap map = map5();
  255. Map.Entry e1 = map.ceilingEntry(three);
  256. assertEquals(three, e1.getKey());
  257. Map.Entry e2 = map.ceilingEntry(zero);
  258. assertEquals(one, e2.getKey());
  259. Map.Entry e3 = map.ceilingEntry(five);
  260. assertEquals(five, e3.getKey());
  261. Map.Entry e4 = map.ceilingEntry(six);
  262. assertNull(e4);
  263. }
  264. /**
  265. * pollFirstEntry returns entries in order
  266. */
  267. public void testPollFirstEntry() {
  268. NavigableMap map = map5();
  269. Map.Entry e = map.pollFirstEntry();
  270. assertEquals(one, e.getKey());
  271. assertEquals("A", e.getValue());
  272. e = map.pollFirstEntry();
  273. assertEquals(two, e.getKey());
  274. map.put(one, "A");
  275. e = map.pollFirstEntry();
  276. assertEquals(one, e.getKey());
  277. assertEquals("A", e.getValue());
  278. e = map.pollFirstEntry();
  279. assertEquals(three, e.getKey());
  280. map.remove(four);
  281. e = map.pollFirstEntry();
  282. assertEquals(five, e.getKey());
  283. try {
  284. e.setValue("A");
  285. shouldThrow();
  286. } catch (UnsupportedOperationException success) {}
  287. assertTrue(map.isEmpty());
  288. Map.Entry f = map.firstEntry();
  289. assertNull(f);
  290. e = map.pollFirstEntry();
  291. assertNull(e);
  292. }
  293. /**
  294. * pollLastEntry returns entries in order
  295. */
  296. public void testPollLastEntry() {
  297. NavigableMap map = map5();
  298. Map.Entry e = map.pollLastEntry();
  299. assertEquals(five, e.getKey());
  300. assertEquals("E", e.getValue());
  301. e = map.pollLastEntry();
  302. assertEquals(four, e.getKey());
  303. map.put(five, "E");
  304. e = map.pollLastEntry();
  305. assertEquals(five, e.getKey());
  306. assertEquals("E", e.getValue());
  307. e = map.pollLastEntry();
  308. assertEquals(three, e.getKey());
  309. map.remove(two);
  310. e = map.pollLastEntry();
  311. assertEquals(one, e.getKey());
  312. try {
  313. e.setValue("E");
  314. shouldThrow();
  315. } catch (UnsupportedOperationException success) {}
  316. e = map.pollLastEntry();
  317. assertNull(e);
  318. }
  319. /**
  320. * size returns the correct values
  321. */
  322. public void testSize() {
  323. NavigableMap map = map5();
  324. NavigableMap empty = map0();
  325. assertEquals(0, empty.size());
  326. assertEquals(5, map.size());
  327. }
  328. /**
  329. * toString contains toString of elements
  330. */
  331. public void testToString() {
  332. NavigableMap map = map5();
  333. String s = map.toString();
  334. for (int i = 1; i <= 5; ++i) {
  335. assertTrue(s.contains(String.valueOf(i)));
  336. }
  337. }
  338. // Exception tests
  339. /**
  340. * get(null) of nonempty map throws NPE
  341. */
  342. public void testGet_NullPointerException() {
  343. try {
  344. NavigableMap c = map5();
  345. c.get(null);
  346. shouldThrow();
  347. } catch (NullPointerException success) {}
  348. }
  349. /**
  350. * containsKey(null) of nonempty map throws NPE
  351. */
  352. public void testContainsKey_NullPointerException() {
  353. try {
  354. NavigableMap c = map5();
  355. c.containsKey(null);
  356. shouldThrow();
  357. } catch (NullPointerException success) {}
  358. }
  359. /**
  360. * put(null,x) throws NPE
  361. */
  362. public void testPut1_NullPointerException() {
  363. try {
  364. NavigableMap c = map5();
  365. c.put(null, "whatever");
  366. shouldThrow();
  367. } catch (NullPointerException success) {}
  368. }
  369. /**
  370. * remove(null) throws NPE
  371. */
  372. public void testRemove1_NullPointerException() {
  373. try {
  374. NavigableMap c = map5();
  375. c.remove(null);
  376. shouldThrow();
  377. } catch (NullPointerException success) {}
  378. }
  379. /**
  380. * A deserialized map equals original
  381. */
  382. public void testSerialization() throws Exception {
  383. NavigableMap x = map5();
  384. NavigableMap y = serialClone(x);
  385. assertTrue(x != y);
  386. assertEquals(x.size(), y.size());
  387. assertEquals(x.toString(), y.toString());
  388. assertEquals(x, y);
  389. assertEquals(y, x);
  390. }
  391. /**
  392. * subMap returns map with keys in requested range
  393. */
  394. public void testSubMapContents() {
  395. NavigableMap map = map5();
  396. SortedMap sm = map.subMap(two, four);
  397. assertEquals(two, sm.firstKey());
  398. assertEquals(three, sm.lastKey());
  399. assertEquals(2, sm.size());
  400. assertFalse(sm.containsKey(one));
  401. assertTrue(sm.containsKey(two));
  402. assertTrue(sm.containsKey(three));
  403. assertFalse(sm.containsKey(four));
  404. assertFalse(sm.containsKey(five));
  405. Iterator i = sm.keySet().iterator();
  406. Object k;
  407. k = (Integer)(i.next());
  408. assertEquals(two, k);
  409. k = (Integer)(i.next());
  410. assertEquals(three, k);
  411. assertFalse(i.hasNext());
  412. Iterator j = sm.keySet().iterator();
  413. j.next();
  414. j.remove();
  415. assertFalse(map.containsKey(two));
  416. assertEquals(4, map.size());
  417. assertEquals(1, sm.size());
  418. assertEquals(three, sm.firstKey());
  419. assertEquals(three, sm.lastKey());
  420. assertEquals("C", sm.remove(three));
  421. assertTrue(sm.isEmpty());
  422. assertEquals(3, map.size());
  423. }
  424. public void testSubMapContents2() {
  425. NavigableMap map = map5();
  426. SortedMap sm = map.subMap(two, three);
  427. assertEquals(1, sm.size());
  428. assertEquals(two, sm.firstKey());
  429. assertEquals(two, sm.lastKey());
  430. assertFalse(sm.containsKey(one));
  431. assertTrue(sm.containsKey(two));
  432. assertFalse(sm.containsKey(three));
  433. assertFalse(sm.containsKey(four));
  434. assertFalse(sm.containsKey(five));
  435. Iterator i = sm.keySet().iterator();
  436. Object k;
  437. k = (Integer)(i.next());
  438. assertEquals(two, k);
  439. assertFalse(i.hasNext());
  440. Iterator j = sm.keySet().iterator();
  441. j.next();
  442. j.remove();
  443. assertFalse(map.containsKey(two));
  444. assertEquals(4, map.size());
  445. assertEquals(0, sm.size());
  446. assertTrue(sm.isEmpty());
  447. assertSame(sm.remove(three), null);
  448. assertEquals(4, map.size());
  449. }
  450. /**
  451. * headMap returns map with keys in requested range
  452. */
  453. public void testHeadMapContents() {
  454. NavigableMap map = map5();
  455. SortedMap sm = map.headMap(four);
  456. assertTrue(sm.containsKey(one));
  457. assertTrue(sm.containsKey(two));
  458. assertTrue(sm.containsKey(three));
  459. assertFalse(sm.containsKey(four));
  460. assertFalse(sm.containsKey(five));
  461. Iterator i = sm.keySet().iterator();
  462. Object k;
  463. k = (Integer)(i.next());
  464. assertEquals(one, k);
  465. k = (Integer)(i.next());
  466. assertEquals(two, k);
  467. k = (Integer)(i.next());
  468. assertEquals(three, k);
  469. assertFalse(i.hasNext());
  470. sm.clear();
  471. assertTrue(sm.isEmpty());
  472. assertEquals(2, map.size());
  473. assertEquals(four, map.firstKey());
  474. }
  475. /**
  476. * headMap returns map with keys in requested range
  477. */
  478. public void testTailMapContents() {
  479. NavigableMap map = map5();
  480. SortedMap sm = map.tailMap(two);
  481. assertFalse(sm.containsKey(one));
  482. assertTrue(sm.containsKey(two));
  483. assertTrue(sm.containsKey(three));
  484. assertTrue(sm.containsKey(four));
  485. assertTrue(sm.containsKey(five));
  486. Iterator i = sm.keySet().iterator();
  487. Object k;
  488. k = (Integer)(i.next());
  489. assertEquals(two, k);
  490. k = (Integer)(i.next());
  491. assertEquals(three, k);
  492. k = (Integer)(i.next());
  493. assertEquals(four, k);
  494. k = (Integer)(i.next());
  495. assertEquals(five, k);
  496. assertFalse(i.hasNext());
  497. Iterator ei = sm.entrySet().iterator();
  498. Map.Entry e;
  499. e = (Map.Entry)(ei.next());
  500. assertEquals(two, e.getKey());
  501. assertEquals("B", e.getValue());
  502. e = (Map.Entry)(ei.next());
  503. assertEquals(three, e.getKey());
  504. assertEquals("C", e.getValue());
  505. e = (Map.Entry)(ei.next());
  506. assertEquals(four, e.getKey());
  507. assertEquals("D", e.getValue());
  508. e = (Map.Entry)(ei.next());
  509. assertEquals(five, e.getKey());
  510. assertEquals("E", e.getValue());
  511. assertFalse(i.hasNext());
  512. SortedMap ssm = sm.tailMap(four);
  513. assertEquals(four, ssm.firstKey());
  514. assertEquals(five, ssm.lastKey());
  515. assertEquals("D", ssm.remove(four));
  516. assertEquals(1, ssm.size());
  517. assertEquals(3, sm.size());
  518. assertEquals(4, map.size());
  519. }
  520. /**
  521. * clear removes all pairs
  522. */
  523. public void testDescendingClear() {
  524. NavigableMap map = dmap5();
  525. map.clear();
  526. assertEquals(map.size(), 0);
  527. }
  528. /**
  529. * Maps with same contents are equal
  530. */
  531. public void testDescendingEquals() {
  532. NavigableMap map1 = dmap5();
  533. NavigableMap map2 = dmap5();
  534. assertEquals(map1, map2);
  535. assertEquals(map2, map1);
  536. map1.clear();
  537. assertFalse(map1.equals(map2));
  538. assertFalse(map2.equals(map1));
  539. }
  540. /**
  541. * containsKey returns true for contained key
  542. */
  543. public void testDescendingContainsKey() {
  544. NavigableMap map = dmap5();
  545. assertTrue(map.containsKey(m1));
  546. assertFalse(map.containsKey(zero));
  547. }
  548. /**
  549. * containsValue returns true for held values
  550. */
  551. public void testDescendingContainsValue() {
  552. NavigableMap map = dmap5();
  553. assertTrue(map.containsValue("A"));
  554. assertFalse(map.containsValue("Z"));
  555. }
  556. /**
  557. * get returns the correct element at the given key,
  558. * or null if not present
  559. */
  560. public void testDescendingGet() {
  561. NavigableMap map = dmap5();
  562. assertEquals("A", (String)map.get(m1));
  563. NavigableMap empty = dmap0();
  564. assertNull(empty.get(m1));
  565. }
  566. /**
  567. * isEmpty is true of empty map and false for non-empty
  568. */
  569. public void testDescendingIsEmpty() {
  570. NavigableMap empty = dmap0();
  571. NavigableMap map = dmap5();
  572. assertTrue(empty.isEmpty());
  573. assertFalse(map.isEmpty());
  574. }
  575. /**
  576. * firstKey returns first key
  577. */
  578. public void testDescendingFirstKey() {
  579. NavigableMap map = dmap5();
  580. assertEquals(m1, map.firstKey());
  581. }
  582. /**
  583. * lastKey returns last key
  584. */
  585. public void testDescendingLastKey() {
  586. NavigableMap map = dmap5();
  587. assertEquals(m5, map.lastKey());
  588. }
  589. /**
  590. * keySet returns a Set containing all the keys
  591. */
  592. public void testDescendingKeySet() {
  593. NavigableMap map = dmap5();
  594. Set s = map.keySet();
  595. assertEquals(5, s.size());
  596. assertTrue(s.contains(m1));
  597. assertTrue(s.contains(m2));
  598. assertTrue(s.contains(m3));
  599. assertTrue(s.contains(m4));
  600. assertTrue(s.contains(m5));
  601. }
  602. /**
  603. * keySet is ordered
  604. */
  605. public void testDescendingKeySetOrder() {
  606. NavigableMap map = dmap5();
  607. Set s = map.keySet();
  608. Iterator i = s.iterator();
  609. Integer last = (Integer)i.next();
  610. assertEquals(last, m1);
  611. while (i.hasNext()) {
  612. Integer k = (Integer)i.next();
  613. assertTrue(last.compareTo(k) > 0);
  614. last = k;
  615. }
  616. }
  617. /**
  618. * values collection contains all values
  619. */
  620. public void testDescendingValues() {
  621. NavigableMap map = dmap5();
  622. Collection s = map.values();
  623. assertEquals(5, s.size());
  624. assertTrue(s.contains("A"));
  625. assertTrue(s.contains("B"));
  626. assertTrue(s.contains("C"));
  627. assertTrue(s.contains("D"));
  628. assertTrue(s.contains("E"));
  629. }
  630. /**
  631. * keySet.toArray returns contains all keys
  632. */
  633. public void testDescendingAscendingKeySetToArray() {
  634. NavigableMap map = dmap5();
  635. Set s = map.keySet();
  636. Object[] ar = s.toArray();
  637. assertTrue(s.containsAll(Arrays.asList(ar)));
  638. assertEquals(5, ar.length);
  639. ar[0] = m10;
  640. assertFalse(s.containsAll(Arrays.asList(ar)));
  641. }
  642. /**
  643. * descendingkeySet.toArray returns contains all keys
  644. */
  645. public void testDescendingDescendingKeySetToArray() {
  646. NavigableMap map = dmap5();
  647. Set s = map.descendingKeySet();
  648. Object[] ar = s.toArray();
  649. assertEquals(5, ar.length);
  650. assertTrue(s.containsAll(Arrays.asList(ar)));
  651. ar[0] = m10;
  652. assertFalse(s.containsAll(Arrays.asList(ar)));
  653. }
  654. /**
  655. * Values.toArray contains all values
  656. */
  657. public void testDescendingValuesToArray() {
  658. NavigableMap map = dmap5();
  659. Collection v = map.values();
  660. Object[] ar = v.toArray();
  661. ArrayList s = new ArrayList(Arrays.asList(ar));
  662. assertEquals(5, ar.length);
  663. assertTrue(s.contains("A"));
  664. assertTrue(s.contains("B"));
  665. assertTrue(s.contains("C"));
  666. assertTrue(s.contains("D"));
  667. assertTrue(s.contains("E"));
  668. }
  669. /**
  670. * entrySet contains all pairs
  671. */
  672. public void testDescendingEntrySet() {
  673. NavigableMap map = dmap5();
  674. Set s = map.entrySet();
  675. assertEquals(5, s.size());
  676. Iterator it = s.iterator();
  677. while (it.hasNext()) {
  678. Map.Entry e = (Map.Entry) it.next();
  679. assertTrue(
  680. (e.getKey().equals(m1) && e.getValue().equals("A")) ||
  681. (e.getKey().equals(m2) && e.getValue().equals("B")) ||
  682. (e.getKey().equals(m3) && e.getValue().equals("C")) ||
  683. (e.getKey().equals(m4) && e.getValue().equals("D")) ||
  684. (e.getKey().equals(m5) && e.getValue().equals("E")));
  685. }
  686. }
  687. /**
  688. * putAll adds all key-value pairs from the given map
  689. */
  690. public void testDescendingPutAll() {
  691. NavigableMap empty = dmap0();
  692. NavigableMap map = dmap5();
  693. empty.putAll(map);
  694. assertEquals(5, empty.size());
  695. assertTrue(empty.containsKey(m1));
  696. assertTrue(empty.containsKey(m2));
  697. assertTrue(empty.containsKey(m3));
  698. assertTrue(empty.containsKey(m4));
  699. assertTrue(empty.containsKey(m5));
  700. }
  701. /**
  702. * remove removes the correct key-value pair from the map
  703. */
  704. public void testDescendingRemove() {
  705. NavigableMap map = dmap5();
  706. map.remove(m5);
  707. assertEquals(4, map.size());
  708. assertFalse(map.containsKey(m5));
  709. }
  710. /**
  711. * lowerEntry returns preceding entry.
  712. */
  713. public void testDescendingLowerEntry() {
  714. NavigableMap map = dmap5();
  715. Map.Entry e1 = map.lowerEntry(m3);
  716. assertEquals(m2, e1.getKey());
  717. Map.Entry e2 = map.lowerEntry(m6);
  718. assertEquals(m5, e2.getKey());
  719. Map.Entry e3 = map.lowerEntry(m1);
  720. assertNull(e3);
  721. Map.Entry e4 = map.lowerEntry(zero);
  722. assertNull(e4);
  723. }
  724. /**
  725. * higherEntry returns next entry.
  726. */
  727. public void testDescendingHigherEntry() {
  728. NavigableMap map = dmap5();
  729. Map.Entry e1 = map.higherEntry(m3);
  730. assertEquals(m4, e1.getKey());
  731. Map.Entry e2 = map.higherEntry(zero);
  732. assertEquals(m1, e2.getKey());
  733. Map.Entry e3 = map.higherEntry(m5);
  734. assertNull(e3);
  735. Map.Entry e4 = map.higherEntry(m6);
  736. assertNull(e4);
  737. }
  738. /**
  739. * floorEntry returns preceding entry.
  740. */
  741. public void testDescendingFloorEntry() {
  742. NavigableMap map = dmap5();
  743. Map.Entry e1 = map.floorEntry(m3);
  744. assertEquals(m3, e1.getKey());
  745. Map.Entry e2 = map.floorEntry(m6);
  746. assertEquals(m5, e2.getKey());
  747. Map.Entry e3 = map.floorEntry(m1);
  748. assertEquals(m1, e3.getKey());
  749. Map.Entry e4 = map.floorEntry(zero);
  750. assertNull(e4);
  751. }
  752. /**
  753. * ceilingEntry returns next entry.
  754. */
  755. public void testDescendingCeilingEntry() {
  756. NavigableMap map = dmap5();
  757. Map.Entry e1 = map.ceilingEntry(m3);
  758. assertEquals(m3, e1.getKey());
  759. Map.Entry e2 = map.ceilingEntry(zero);
  760. assertEquals(m1, e2.getKey());
  761. Map.Entry e3 = map.ceilingEntry(m5);
  762. assertEquals(m5, e3.getKey());
  763. Map.Entry e4 = map.ceilingEntry(m6);
  764. assertNull(e4);
  765. }
  766. /**
  767. * pollFirstEntry returns entries in order
  768. */
  769. public void testDescendingPollFirstEntry() {
  770. NavigableMap map = dmap5();
  771. Map.Entry e = map.pollFirstEntry();
  772. assertEquals(m1, e.getKey());
  773. assertEquals("A", e.getValue());
  774. e = map.pollFirstEntry();
  775. assertEquals(m2, e.getKey());
  776. map.put(m1, "A");
  777. e = map.pollFirstEntry();
  778. assertEquals(m1, e.getKey());
  779. assertEquals("A", e.getValue());
  780. e = map.pollFirstEntry();
  781. assertEquals(m3, e.getKey());
  782. map.remove(m4);
  783. e = map.pollFirstEntry();
  784. assertEquals(m5, e.getKey());
  785. try {
  786. e.setValue("A");
  787. shouldThrow();
  788. } catch (UnsupportedOperationException success) {}
  789. e = map.pollFirstEntry();
  790. assertNull(e);
  791. }
  792. /**
  793. * pollLastEntry returns entries in order
  794. */
  795. public void testDescendingPollLastEntry() {
  796. NavigableMap map = dmap5();
  797. Map.Entry e = map.pollLastEntry();
  798. assertEquals(m5, e.getKey());
  799. assertEquals("E", e.getValue());
  800. e = map.pollLastEntry();
  801. assertEquals(m4, e.getKey());
  802. map.put(m5, "E");
  803. e = map.pollLastEntry();
  804. assertEquals(m5, e.getKey());
  805. assertEquals("E", e.getValue());
  806. e = map.pollLastEntry();
  807. assertEquals(m3, e.getKey());
  808. map.remove(m2);
  809. e = map.pollLastEntry();
  810. assertEquals(m1, e.getKey());
  811. try {
  812. e.setValue("E");
  813. shouldThrow();
  814. } catch (UnsupportedOperationException success) {}
  815. e = map.pollLastEntry();
  816. assertNull(e);
  817. }
  818. /**
  819. * size returns the correct values
  820. */
  821. public void testDescendingSize() {
  822. NavigableMap map = dmap5();
  823. NavigableMap empty = dmap0();
  824. assertEquals(0, empty.size());
  825. assertEquals(5, map.size());
  826. }
  827. /**
  828. * toString contains toString of elements
  829. */
  830. public void testDescendingToString() {
  831. NavigableMap map = dmap5();
  832. String s = map.toString();
  833. for (int i = 1; i <= 5; ++i) {
  834. assertTrue(s.contains(String.valueOf(i)));
  835. }
  836. }
  837. // Exception testDescendings
  838. /**
  839. * get(null) of nonempty map throws NPE
  840. */
  841. public void testDescendingGet_NullPointerException() {
  842. try {
  843. NavigableMap c = dmap5();
  844. c.get(null);
  845. shouldThrow();
  846. } catch (NullPointerException success) {}
  847. }
  848. /**
  849. * put(null,x) throws NPE
  850. */
  851. public void testDescendingPut1_NullPointerException() {
  852. try {
  853. NavigableMap c = dmap5();
  854. c.put(null, "whatever");
  855. shouldThrow();
  856. } catch (NullPointerException success) {}
  857. }
  858. /**
  859. * A deserialized map equals original
  860. */
  861. public void testDescendingSerialization() throws Exception {
  862. NavigableMap x = dmap5();
  863. NavigableMap y = serialClone(x);
  864. assertTrue(x != y);
  865. assertEquals(x.size(), y.size());
  866. assertEquals(x.toString(), y.toString());
  867. assertEquals(x, y);
  868. assertEquals(y, x);
  869. }
  870. /**
  871. * subMap returns map with keys in requested range
  872. */
  873. public void testDescendingSubMapContents() {
  874. NavigableMap map = dmap5();
  875. SortedMap sm = map.subMap(m2, m4);
  876. assertEquals(m2, sm.firstKey());
  877. assertEquals(m3, sm.lastKey());
  878. assertEquals(2, sm.size());
  879. assertFalse(sm.containsKey(m1));
  880. assertTrue(sm.containsKey(m2));
  881. assertTrue(sm.containsKey(m3));
  882. assertFalse(sm.containsKey(m4));
  883. assertFalse(sm.containsKey(m5));
  884. Iterator i = sm.keySet().iterator();
  885. Object k;
  886. k = (Integer)(i.next());
  887. assertEquals(m2, k);
  888. k = (Integer)(i.next());
  889. assertEquals(m3, k);
  890. assertFalse(i.hasNext());
  891. Iterator j = sm.keySet().iterator();
  892. j.next();
  893. j.remove();
  894. assertFalse(map.containsKey(m2));
  895. assertEquals(4, map.size());
  896. assertEquals(1, sm.size());
  897. assertEquals(m3, sm.firstKey());
  898. assertEquals(m3, sm.lastKey());
  899. assertEquals("C", sm.remove(m3));
  900. assertTrue(sm.isEmpty());
  901. assertEquals(3, map.size());
  902. }
  903. public void testDescendingSubMapContents2() {
  904. NavigableMap map = dmap5();
  905. SortedMap sm = map.subMap(m2, m3);
  906. assertEquals(1, sm.size());
  907. assertEquals(m2, sm.firstKey());
  908. assertEquals(m2, sm.lastKey());
  909. assertFalse(sm.containsKey(m1));
  910. assertTrue(sm.containsKey(m2));
  911. assertFalse(sm.containsKey(m3));
  912. assertFalse(sm.containsKey(m4));
  913. assertFalse(sm.containsKey(m5));
  914. Iterator i = sm.keySet().iterator();
  915. Object k;
  916. k = (Integer)(i.next());
  917. assertEquals(m2, k);
  918. assertFalse(i.hasNext());
  919. Iterator j = sm.keySet().iterator();
  920. j.next();
  921. j.remove();
  922. assertFalse(map.containsKey(m2));
  923. assertEquals(4, map.size());
  924. assertEquals(0, sm.size());
  925. assertTrue(sm.isEmpty());
  926. assertSame(sm.remove(m3), null);
  927. assertEquals(4, map.size());
  928. }
  929. /**
  930. * headMap returns map with keys in requested range
  931. */
  932. public void testDescendingHeadMapContents() {
  933. NavigableMap map = dmap5();
  934. SortedMap sm = map.headMap(m4);
  935. assertTrue(sm.containsKey(m1));
  936. assertTrue(sm.containsKey(m2));
  937. assertTrue(sm.containsKey(m3));
  938. assertFalse(sm.containsKey(m4));
  939. assertFalse(sm.containsKey(m5));
  940. Iterator i = sm.keySet().iterator();
  941. Object k;
  942. k = (Integer)(i.next());
  943. assertEquals(m1, k);
  944. k = (Integer)(i.next());
  945. assertEquals(m2, k);
  946. k = (Integer)(i.next());
  947. assertEquals(m3, k);
  948. assertFalse(i.hasNext());
  949. sm.clear();
  950. assertTrue(sm.isEmpty());
  951. assertEquals(2, map.size());
  952. assertEquals(m4, map.firstKey());
  953. }
  954. /**
  955. * headMap returns map with keys in requested range
  956. */
  957. public void testDescendingTailMapContents() {
  958. NavigableMap map = dmap5();
  959. SortedMap sm = map.tailMap(m2);
  960. assertFalse(sm.containsKey(m1));
  961. assertTrue(sm.containsKey(m2));
  962. assertTrue(sm.containsKey(m3));
  963. assertTrue(sm.containsKey(m4));
  964. assertTrue(sm.containsKey(m5));
  965. Iterator i = sm.keySet().iterator();
  966. Object k;
  967. k = (Integer)(i.next());
  968. assertEquals(m2, k);
  969. k = (Integer)(i.next());
  970. assertEquals(m3, k);
  971. k = (Integer)(i.next());
  972. assertEquals(m4, k);
  973. k = (Integer)(i.next());
  974. assertEquals(m5, k);
  975. assertFalse(i.hasNext());
  976. Iterator ei = sm.entrySet().iterator();
  977. Map.Entry e;
  978. e = (Map.Entry)(ei.next());
  979. assertEquals(m2, e.getKey());
  980. assertEquals("B", e.getValue());
  981. e = (Map.Entry)(ei.next());
  982. assertEquals(m3, e.getKey());
  983. assertEquals("C", e.getValue());
  984. e = (Map.Entry)(ei.next());
  985. assertEquals(m4, e.getKey());
  986. assertEquals("D", e.getValue());
  987. e = (Map.Entry)(ei.next());
  988. assertEquals(m5, e.getKey());
  989. assertEquals("E", e.getValue());
  990. assertFalse(i.hasNext());
  991. SortedMap ssm = sm.tailMap(m4);
  992. assertEquals(m4, ssm.firstKey());
  993. assertEquals(m5, ssm.lastKey());
  994. assertEquals("D", ssm.remove(m4));
  995. assertEquals(1, ssm.size());
  996. assertEquals(3, sm.size());
  997. assertEquals(4, map.size());
  998. }
  999. }