-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathFQueueTest.java
More file actions
74 lines (63 loc) · 2.73 KB
/
Copy pathFQueueTest.java
File metadata and controls
74 lines (63 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.Deque;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
/**
* @author Georgiy Korneev (kgeorgiy@kgeorgiy.info)
*/
public class FQueueTest extends QueueTest<FQueueTest.FQueue> {
public static void main(final String[] args) throws MalformedURLException, ClassNotFoundException, NoSuchMethodException {
final FQueueTest test = new FQueueTest();
test.test("LinkedQueue", 2, Mode.CLASS);
test.test("ArrayQueue", 2, Mode.CLASS);
}
@Override
protected void linearTest(final Deque<Object> deque, final FQueue queue) {
if (random.nextBoolean()) {
final Predicate<Object> predicate = Predicate.isEqual(randomElement());
assertEquals("filter()", deque.stream().filter(predicate), queue.filter(predicate));
} else {
final Function<Object, Object> f = random.nextBoolean() ? String::valueOf : Object::hashCode;
assertEquals("map()", deque.stream().map(f), queue.map(f));
}
}
private void assertEquals(final String message, final Stream<Object> expected, final Queue actual) {
assertEquals(message, Arrays.asList(expected.toArray()), Arrays.asList(toArray(actual)));
}
private Object[] toArray(final Queue queue) {
final Object[] result = new Object[queue.size()];
for (int i = 0; i < result.length; i++) {
result[i] = queue.dequeue();
}
return result;
}
@Override
protected FQueue create(final String className, final Mode mode) throws NoSuchMethodException, ClassNotFoundException, MalformedURLException {
return check(new FQueue(className, mode));
}
static class FQueue extends ArrayQueueTest.Queue {
private final ZMethod<Object> filter;
private final ZMethod<Object> map;
public FQueue(final String className, final Mode mode) throws MalformedURLException, NoSuchMethodException, ClassNotFoundException {
super(className, mode);
filter = findMethod("filter", Predicate.class);
map = findMethod("map", Function.class);
}
public Queue filter(final Predicate p) {
return wrap(filter.invoke(p));
}
public Queue map(final Function f) {
return wrap(map.invoke(f));
}
private Queue wrap(final Object instance) {
assertEquals("queue type", this.instance.getClass().getName(), instance.getClass().getName());
try {
return new Queue(instance, Mode.CLASS);
} catch (final NoSuchMethodException e) {
throw new AssertionError(e);
}
}
}
}