public static void main(String[] args) {
    DoublyLinkedList<Integer, String> list = new DoublyLinkedList<Integer, String>();

    list.add(5, "James");

    System.out.println(list.size());

    System.out.println(list.get(5));

    list.add(5, "Thomas");

    System.out.println(list.size());

    System.out.println(list.get(5));
  }
 public void testBasicBuildAndGet() {
   for (int size = 0; size < 15; ++size) {
     final DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>();
     DoublyLinkedList.LinkNode<Integer> prevLinkNode = null;
     for (int i = 0; i < size; ++i) {
       final DoublyLinkedList.LinkNode<Integer> linkNode = list.add(i);
       assertEquals(i, linkNode.getIndex());
       assertEquals("i=" + i, (Integer) i, linkNode.getElt());
       assertEquals(prevLinkNode, linkNode.getPrev());
       assertNull(linkNode.getNext());
       assertEquals(i + 1, list.size());
       prevLinkNode = linkNode;
     }
     assertEquals("size=" + size, size, list.size());
     for (int i = 0; i < size; ++i) {
       assertEquals("i=" + i, (Integer) i, list.get(i));
     }
   }
 }
Exemple #3
0
  public static void main(String[] args) throws Exception {
    // Set up output
    PrintWriter pen = new PrintWriter(System.out, true);

    // Create some lists
    DoublyLinkedList<String> strings = new DoublyLinkedList<String>();
    DoublyLinkedList<Integer> numbers = new DoublyLinkedList<Integer>();

    // Prepend a few elements
    numbers.prepend(42);
    numbers.prepend(77);
    numbers.prepend(11);
    printList(pen, numbers);

    // Append a few elements
    numbers.append(1);
    numbers.append(2);
    numbers.append(3);
    printList(pen, numbers);

    // Delete the first element
    pen.println("Deleting first");
    Cursor c = numbers.front();
    numbers.delete(c);
    pen.println(numbers.get(c));
    printList(pen, numbers);

    // Delete the third element
    pen.println("Deleting third");
    Cursor d = numbers.front();
    numbers.advance(d);
    numbers.advance(d);
    numbers.delete(d);
    printList(pen, numbers);

    // Insert and get some elements
    Cursor f = strings.front();

    // Insert into null list
    strings.insert("world", f);
    printList(pen, strings);
    pen.println(strings.get(f));

    // Insert at front of list
    strings.insert("hello", f);
    // Expected output:
    // "[hello world ]/hello/world/hello/hello/[hello world ]"
    printList(pen, strings);
    pen.println(strings.get(f));
    strings.advance(f);
    pen.println(strings.get(f));
    if (strings.hasPrev(f)) {
      pen.println(strings.getPrev(f));
    } else {
      pen.println("hasPrev false negative");
    }
    strings.retreat(f);
    if (strings.hasPrev(f)) {
      pen.println("hasPrev false positive");
    }
    pen.println(strings.get(f));
    pen.flush();
    printList(pen, strings);

    // Insert mid-list
    strings.advance(f);
    strings.insert("foo", f);
    printList(pen, strings);
    pen.println(strings.get(f));
    strings.advance(f);
    strings.insert("bar", f);
    printList(pen, strings);
    pen.println(strings.get(f));

    // Testing Swap
    /*
     * pen.println(); pen.println("Testing swap(c1, c2):");
     * pen.print("  Current list: "); printList(pen, strings); Cursor s1 =
     * strings.front(); Cursor s2 = strings.front();
     *
     * // Swap first two:
     *
     *
     * Thread.sleep(1000); System.out.println("ONE"); Thread.sleep(1000);
     *
     * strings.advance(s2); strings.swap(s1, s2);
     * pen.print("  [foo hello bar world ] = "); printList(pen, strings);
     * pen.println("    s1 = " + strings.get(s1) + "; s2 = " +
     * strings.get(s2));
     *
     * Thread.sleep(1000); System.out.println("TWO"); Thread.sleep(1000);
     *
     * strings.advance(s1);
     *
     * strings.advance(s2); strings.advance(s2); pen.println("    s1 = " +
     * strings.get(s1) + "; s2 = " + strings.get(s2)); strings.swap(s1, s2);
     * pen.print("  [foo bar hello world ] = "); printList(pen, strings);
     * pen.print("    s1 = " + strings.get(s1) + "; s2 = " +
     * strings.get(s2));
     */

    // Testing Search
    pen.println();
    pen.println("Testing search(c, pred):");
    pen.print("  Current list: ");
    printList(pen, numbers);
    Cursor g = numbers.front();
    Even even = new Even();
    Seven seven = new Seven();

    System.out.println("  cursor @ " + numbers.get(g));
    System.out.println("  " + numbers.search(g, even));
    System.out.println("  cursor @ " + numbers.get(g));

    pen.print("  Current list: ");
    printList(pen, numbers);
    numbers.advance(g);
    System.out.println("  cursor @ " + numbers.get(g));
    System.out.println("  " + numbers.search(g, even));
    System.out.println("  cursor @ " + numbers.get(g));

    pen.print("  Current list: ");
    printList(pen, numbers);
    System.out.println("  cursor @ " + numbers.get(g));
    System.out.println("  " + numbers.search(g, seven));
    System.out.println("  cursor @ " + numbers.get(g));

    System.out.println("  cursor @ " + numbers.get(g));
    System.out.println("  " + numbers.search(g, even));
    System.out.println("  cursor @ " + numbers.get(g));

    // Testing select
    /* Odd odd = new Odd();
    pen.println("Testing select(pred):");
    pen.print("  Current list: ");

    System.out.print("even numbers:  ");
    DoublyLinkedList<T> sevens =  (DoublyLinkedList) numbers.select(even);
    PrintList(pen, sevens);

    System.out.println("odd numbers:  " + numbers.select(odd));

    System.out.println("sevens:  " + numbers.select(seven));

    // And we're done
    pen.close(); */
  } // main(String[])
  public void testInsertAndRemove() {
    final DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>();

    // 2 5 8
    // 1* b2 5 8
    // 1 2a *3 5 8
    // 1 2 3 4* b5 8
    // 1 2 3 4 5 7* b8
    // 1 2 3 4 5 6* b7 8
    // 1 2 3 4 5 6 7 8a *9
    // 1 2 3 4 5 6 7 8 9a *10
    // 0* b1 2 3 4 5 6 7 8 9 10

    list.add(2).add(5).add(8);

    final DoublyLinkedList.LinkNode<Integer> node2 = list.find(2);
    node2.push(1);
    final DoublyLinkedList.LinkNode<Integer> node3 = node2.add(3);
    node3.getNext().push(4).find(8).add(9);
    list.add(10);
    list.getFirst().push(0);
    list.find(8).push(7).push(6);

    list.getLast().add(12);
    list.add(11, 11);
    list.add(13, 13);

    assertEquals(14, list.size());
    for (int i = 0; i <= 13; ++i) {
      assertEquals("i=" + i, (Integer) i, list.get(i));

      final DoublyLinkedList.LinkNode<Integer> node = list.getLinkNode(i);
      assertEquals(i, node.getIndex());
      assertEquals((Integer) i, node.getElt());
    }

    // test findNext
    final DoublyLinkedList.LinkNode<Integer> secondNode2 = list.add(2);
    final DoublyLinkedList.LinkNode<Integer> foundSecondNode2 = node2.findNext();
    assertEquals(secondNode2, foundSecondNode2);
    assertNull(secondNode2.findNext());
    secondNode2.add(3); // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 2 3
    assertNull(secondNode2.findNext());

    // test remove
    assertEquals(16, list.size());
    assertEquals((Integer) 2, list.remove(14));
    assertEquals(15, list.size());
    assertEquals((Integer) 3, list.remove(14));

    assertEquals(14, list.size());
    for (int i = 0; i <= 13; ++i) {
      assertEquals("i=" + i, (Integer) i, list.get(i));

      final DoublyLinkedList.LinkNode<Integer> node = list.getLinkNode(i);
      assertEquals(i, node.getIndex());
      assertEquals((Integer) i, node.getElt());
    }

    // completely drain the list
    for (int i = 0; i < 14; ++i) {
      assertEquals("i=" + i, (Integer) i, list.remove(0));
      assertEquals(13 - i, list.size());
    }
  }