public static void testPersistentQueue() { PersistentQueue<Integer> q0 = new PersistentQueue<Integer>(); assertThat(q0.size(), 0); int i = 0; try { q0.peek(); i = 1; } catch (NoSuchElementException e) { i = 2; } assertThat(i, 2); PersistentQueue<Integer> q1 = q0.enqueue(2); assertThat(q0.size(), 0); assertThat(q1.size(), 1); assertThat(q1.peek(), 2); PersistentQueue<Integer> q2 = q1.enqueue(1); assertThat(q2.size(), 2); assertThat(q2.peek(), 2); PersistentQueue<Integer> q3 = q2.dequeue(); assertThat(q3.size(), 1); assertThat(q3.peek(), 1); assertThat(q2.size(), 2); assertThat(q2.peek(), 2); assertThat(q1.size(), 1); assertThat(q1.peek(), 2); try { PersistentQueue<Integer> q5 = q3.enqueue(null); i = 3; } catch (IllegalArgumentException e) { i = 4; } assertThat(i, 4); }