/** Verify the cache can put and get a KV pair successfully. */
 @Test
 public void singlePutAndGet() {
   KVCache cache = new KVCache(1, 4);
   cache.put("hello", "world");
   assertEquals("world", cache.get("hello"));
   System.out.println("Test0 Success");
 }
  /** Verify the cache implements second chance correctly. */
  @Test
  public void secondChance() {
    KVCache cache = new KVCache(1, 4);
    cache.put("1", "one");
    cache.put("2", "two");
    cache.put("3", "three");
    cache.put("4", "four");
    cache.get("1");
    cache.get("2");
    cache.get("4");
    cache.put("5", "five");

    assertEquals(null, cache.get("3"));

    assertEquals(0, cache.getReference("1"));
    assertEquals(0, cache.getReference("2"));
    assertEquals(0, cache.getReference("5"));
    assertEquals(1, cache.getReference("4"));
    System.out.println("Test4 Success");
  }
  /** Verify the xml creation works. */
  @Test
  public void xmlTest1() {
    KVCache cache = new KVCache(1, 4);
    cache.put("1", "one");
    cache.put("2", "two");
    cache.put("3", "three");
    cache.put("4", "four");
    cache.get("1");
    cache.get("2");
    cache.get("4");
    cache.put("5", "five");

    System.out.println(cache.toString());
    System.out.println("Test5 Success");
  }
  /** Verify the cache can change reference bit correctly. */
  @Test
  public void referenceTest() {
    KVCache cache = new KVCache(1, 4);

    // Get
    cache.put("hello", "world");
    assertEquals(0, cache.getReference("hello"));
    assertEquals("world", cache.get("hello"));
    assertEquals(1, cache.getReference("hello"));

    // Put and replace
    assertEquals(-1, cache.getReference("hi"));
    cache.put("hi", "friend");
    assertEquals(0, cache.getReference("hi"));
    cache.put("hi", "buddy");
    assertEquals("buddy", cache.get("hi"));
    assertEquals(1, cache.getReference("hi"));
    System.out.println("Test3 Success");
  }