Skip to content

Commit 2c0d476

Browse files
committed
add tests
1 parent eebdba0 commit 2c0d476

File tree

3 files changed

+276
-13
lines changed

3 files changed

+276
-13
lines changed
Lines changed: 101 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,135 @@
11
package seminar1.collections;
22

33
import java.util.Iterator;
4+
import java.util.NoSuchElementException;
45

56
public class LinkedDeque<Item> implements IDeque<Item> {
67

8+
private Node<Item> head;
9+
private Node<Item> tail;
10+
private int size;
11+
12+
public LinkedDeque () {
13+
head = tail = null;
14+
size = 0;
15+
}
16+
717
@Override
818
public void pushFront(Item item) {
9-
/* TODO: implement it */
19+
Node<Item> curr = new Node<Item>(item, null, null);
20+
if (isEmpty()) {
21+
head = tail = curr;
22+
}
23+
else {
24+
head.prev = curr;
25+
curr.next = head;
26+
head = curr;
27+
}
28+
size++;
1029
}
1130

1231
@Override
1332
public void pushBack(Item item) {
14-
/* TODO: implement it */
33+
Node<Item> curr = new Node<Item>(item, null, null);
34+
if (isEmpty()) {
35+
head = tail = curr;
36+
}
37+
else {
38+
tail.next = curr;
39+
curr.prev = tail;
40+
tail = curr;
41+
}
42+
size++;
1543
}
1644

1745
@Override
1846
public Item popFront() {
19-
/* TODO: implement it */
20-
return null;
47+
if (isEmpty())
48+
throw new NoSuchElementException();
49+
Item elm = head.item;
50+
if (size == 1) {
51+
head = tail = null;
52+
}
53+
else {
54+
head = head.next;
55+
}
56+
size--;
57+
return elm;
2158
}
2259

2360
@Override
2461
public Item popBack() {
25-
/* TODO: implement it */
26-
return null;
62+
if (isEmpty())
63+
throw new NoSuchElementException();
64+
Item elm = tail.item;
65+
if (size == 1) {
66+
head = tail = null;
67+
}
68+
else {
69+
tail = tail.prev;
70+
}
71+
size--;
72+
return elm;
2773
}
2874

2975
@Override
3076
public boolean isEmpty() {
31-
/* TODO: implement it */
32-
return false;
77+
return size == 0;
3378
}
3479

3580
@Override
3681
public int size() {
37-
/* TODO: implement it */
38-
return 0;
82+
return size;
3983
}
4084

4185
@Override
4286
public Iterator<Item> iterator() {
43-
/* TODO: implement it */
44-
return null;
87+
return new LinkedDequeIterator();
88+
}
89+
90+
private class LinkedDequeIterator implements Iterator<Item> {
91+
92+
Node<Item> curr;
93+
94+
public LinkedDequeIterator() {
95+
curr = head;
96+
}
97+
98+
public boolean hasNext() {
99+
return curr.next != null;
100+
}
101+
102+
public boolean hasPrev() {
103+
return curr.prev != null;
104+
}
105+
106+
public Item next() {
107+
Node<Item> ret = curr;
108+
curr = curr.next;
109+
return ret.item;
110+
}
111+
112+
public Item prev() {
113+
Node<Item> ret = curr;
114+
curr = curr.prev;
115+
return ret.item;
116+
}
117+
118+
}
119+
120+
private static class Node<Item> {
121+
Item item;
122+
Node<Item> next;
123+
Node<Item> prev;
124+
125+
public Node(Item item) {
126+
this.item = item;
127+
}
128+
129+
public Node(Item item, Node<Item> next, Node<Item> prev) {
130+
this.item = item;
131+
this.next = next;
132+
this.prev = prev;
133+
}
45134
}
46135
}

tests/TestDeque.java

Lines changed: 122 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import java.lang.reflect.InvocationTargetException;
22
import java.util.Arrays;
33
import java.util.Collection;
4+
import java.util.NoSuchElementException;
5+
import java.util.Random;
46

57
import org.junit.Assert;
68
import org.junit.Before;
@@ -33,6 +35,15 @@ public static Collection<Class<?>> data() {
3335
);
3436
}
3537

38+
public static int[] getRandomArray(int count) {
39+
int[] randomArray = new int[count];
40+
41+
for(int i=0; i<count; i++){
42+
randomArray[i] = new Random().nextInt(count);
43+
}
44+
return randomArray;
45+
}
46+
3647
@Before
3748
@SuppressWarnings("unchecked")
3849
public void init() {
@@ -44,9 +55,119 @@ public void init() {
4455
}
4556

4657
@Test
47-
public void isEmpty() {
58+
public void test01_isEmpty() {
4859
Assert.assertTrue(deque.isEmpty());
4960
Assert.assertEquals(deque.size(), 0);
5061
}
5162

63+
//в тестах с Foreach одновременно тестируется итератор
64+
65+
@Test
66+
public void test02_PushFront() {
67+
deque.pushFront(2);
68+
for (int item: deque) {
69+
Assert.assertEquals(item, 2);
70+
}
71+
}
72+
73+
@Test
74+
public void test03_PushBack() {
75+
deque.pushBack(2);
76+
for (int item: deque) {
77+
Assert.assertEquals(item, 2);
78+
}
79+
}
80+
81+
@Test
82+
public void test04_PopFrontAfterPushBack() {
83+
deque.pushBack(2);
84+
Assert.assertEquals((int)deque.popFront(), 2);
85+
}
86+
87+
@Test
88+
public void test05_PopBackAfterPushBack() {
89+
deque.pushBack(2);
90+
Assert.assertEquals((int)deque.popBack(), 2);
91+
}
92+
93+
@Test
94+
public void test06_PopFrontAfterPushFront() {
95+
deque.pushFront(2);
96+
Assert.assertEquals((int)deque.popFront(), 2);
97+
}
98+
99+
@Test
100+
public void test07_PopBackAfterPushFront() {
101+
deque.pushFront(2);
102+
Assert.assertEquals((int)deque.popBack(), 2);
103+
}
104+
105+
@Test
106+
public void test08_AnyPushFront() {
107+
int[] randomArray = getRandomArray(10);
108+
for (int i = 0; i < 10; i++) {
109+
deque.pushFront(randomArray[i]);
110+
}
111+
int i = 9;
112+
for (int item: deque) {
113+
Assert.assertEquals(randomArray[i--], item);
114+
}
115+
}
116+
117+
@Test
118+
public void test09_AnyPushBack() {
119+
int[] randomArray = getRandomArray(10);
120+
for (int i = 0; i < 10; i++) {
121+
deque.pushBack(randomArray[i]);
122+
}
123+
int i = 0;
124+
for (int item: deque) {
125+
Assert.assertEquals(randomArray[i++], item);
126+
}
127+
}
128+
129+
@Test
130+
public void test10_AnyPopBack() {
131+
int[] randomArray = getRandomArray(10);
132+
for (int i = 0; i < 10; i++) {
133+
deque.pushBack(randomArray[i]);
134+
}
135+
for (int i = 9; i >= 0; i--) {
136+
System.out.println(randomArray[i]);
137+
Assert.assertEquals(randomArray[i], (int)deque.popBack());
138+
}
139+
}
140+
141+
@Test
142+
public void test011_AnyPopFront() {
143+
int[] randomArray = getRandomArray(10);
144+
for (int i = 0; i < 10; i++) {
145+
deque.pushBack(randomArray[i]);
146+
}
147+
for (int i = 0; i < 10; i++) {
148+
System.out.println(randomArray[i]);
149+
Assert.assertEquals(randomArray[i], (int)deque.popFront());
150+
}
151+
}
152+
153+
@Test
154+
public void test012_FailPopFront() {
155+
try {
156+
deque.popFront();
157+
Assert.fail();
158+
}
159+
catch (NoSuchElementException e) {
160+
}
161+
}
162+
163+
@Test
164+
public void test013_FailPopBack() {
165+
try {
166+
deque.popFront();
167+
Assert.fail();
168+
}
169+
catch (NoSuchElementException e) {
170+
}
171+
}
172+
52173
}

tests/TestPeekingIncreasingIterator.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import java.util.NoSuchElementException;
22

3+
import org.junit.Assert;
34
import org.junit.Test;
45

56
import seminar1.iterators.PeekingIncreasingIterator;
@@ -13,4 +14,56 @@ public class TestPeekingIncreasingIterator {
1314
public void testEmptyIterator() {
1415
new PeekingIncreasingIterator(10, 10, 0, 1).next();
1516
}
17+
18+
@Test
19+
public void testNormal() {
20+
PeekingIncreasingIterator iter = new PeekingIncreasingIterator(5, 10, 1, 15);
21+
int prev, curr;
22+
if (iter.hasNext())
23+
prev = iter.next();
24+
else {
25+
Assert.fail();
26+
return;
27+
}
28+
while (iter.hasNext()) {
29+
curr = iter.next();
30+
Assert.assertEquals(prev, curr);
31+
prev = curr;
32+
}
33+
}
34+
35+
@Test
36+
public void testStartLargeMax() {
37+
try {
38+
new PeekingIncreasingIterator(12, 10, 1, 1);
39+
Assert.fail();
40+
}
41+
catch (IllegalArgumentException e) {}
42+
}
43+
44+
@Test
45+
public void testStepLimitLargeMax() {
46+
try {
47+
new PeekingIncreasingIterator(10, 10, 1, 0);
48+
Assert.fail();
49+
}
50+
catch (AssertionError e) {}
51+
}
52+
53+
@Test
54+
public void testStartEqMaxLimitEqGrowth() {
55+
PeekingIncreasingIterator iter = new PeekingIncreasingIterator(10, 10, 1, 1);
56+
int prev, curr;
57+
if (iter.hasNext())
58+
prev = iter.next();
59+
else {
60+
Assert.fail();
61+
return;
62+
}
63+
while (iter.hasNext()) {
64+
curr = iter.next();
65+
Assert.assertEquals(prev, curr);
66+
prev = curr;
67+
}
68+
}
1669
}

0 commit comments

Comments
 (0)