@Test(timeout = 1000)
 public void testSize() {
   assertEquals(0, list.size());
   list.put(3);
   list.put(8);
   assertEquals(2, list.size());
 }
 @Test(timeout = 1000)
 public void testClear2() {
   list.put(3);
   list.put(8);
   list.clear();
   assertEquals(0, list.size());
 }
 @Test(timeout = 1000)
 public void testGet2() {
   list.put(3);
   list.put(8);
   assertEquals(null, list.get(2));
   assertEquals(new Integer(8), list.get(8));
 }
 // This is an example of how your SkipList is tested
 // for efficiency.
 @Test(timeout = 200)
 public void testPutSingle() {
   list.put(1);
   assertEquals(1, list.size());
   assertEquals(new Integer(1), list.first());
   assertEquals(new Integer(1), list.last());
   assertEquals(2, randomness.getNumFlips());
 }
 @Test(timeout = 1000)
 public void stressTesting_Add() {
   Random r = new Random(System.currentTimeMillis());
   Set<Integer> set = new HashSet<>();
   for (int i = 0; i < 10000; i++) {
     Integer num = r.nextInt();
     set.add(num);
     if (!list.contains(num)) {
       list.put(num);
     }
   }
   assertEquals("Adding not working properly", set, list.dataSet());
   assertEquals("Size isn't being incremented correctly", set.size(), list.dataSet().size());
 }
 private void addJagged() {
   list.put(3);
   list.put(7);
   list.put(1);
   list.put(4);
   list.put(10);
   list.put(5);
   list.put(2);
   list.put(6);
   list.put(0);
   list.put(8);
   list.put(9);
 }
 @Test(timeout = 10000)
 public void stressTesting_String() {
   Random r = new Random(98);
   Set<String> set = new HashSet<>();
   for (int i = 0; i < 50; i++) {
     String str = Character.toString((char) (r.nextInt(90) + 33));
     if (r.nextBoolean()) {
       set.add(str);
       if (!listString.contains(str)) {
         listString.put(str);
       }
     } else {
       set.remove(str);
       listString.remove(str);
     }
   }
   assertEquals("Check your remove method", set, listString.dataSet());
   assertEquals("Size isn't being decremented correctly", set.size(), listString.dataSet().size());
 }
 @Test(timeout = 1000)
 public void stressTesting_AddAndRemove() {
   Random r = new Random(System.currentTimeMillis());
   Set<Integer> set = new HashSet<>();
   for (int i = 0; i < 1000; i++) {
     Integer num = r.nextInt();
     if (r.nextBoolean()) {
       set.add(num);
       if (!list.contains(num)) {
         list.put(num);
       }
     } else {
       set.remove(num);
       list.remove(num);
     }
   }
   assertEquals("Check your remove method", set, list.dataSet());
   assertEquals("Size isn't being decremented correctly", set.size(), list.dataSet().size());
 }
 @Test(timeout = 1000)
 public void stressTesting_LevelPromoting() {
   int quantity = 10000;
   Random r = new Random(System.currentTimeMillis());
   Set<Integer> set = new HashSet<>();
   for (int i = 0; i < quantity; i++) {
     Integer num = r.nextInt();
     set.add(num);
     if (!list.contains(num)) {
       list.put(num);
     }
   }
   Random rand = new Random(10);
   int flips = 0;
   for (int i = 0; i < quantity; i++) {
     while (rand.nextBoolean()) {
       flips++;
     }
     flips++;
   }
   assertEquals("Adding is not working properly", set, list.dataSet());
   assertEquals("CoinFlipper is not being used properly", flips, randomness.getNumFlips());
 }
 @Test(timeout = 1000, expected = IllegalArgumentException.class)
 public void testIllegalPut() {
   list.put(null);
 }
 private void addBasic() {
   for (int i = 10; i > -1; i--) {
     list.put(i);
   }
 }