1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.functor.core.composite;
18
19 import static org.junit.Assert.assertEquals;
20
21 import org.apache.commons.functor.BaseFunctorTest;
22 import org.apache.commons.functor.UnaryFunction;
23 import org.apache.commons.functor.core.Constant;
24 import org.junit.Test;
25
26
27
28
29
30 public class TestCompositeUnaryFunction extends BaseFunctorTest {
31
32
33
34
35 protected Object makeFunctor() {
36 return Composite.function(Constant.of(3));
37 }
38
39
40
41
42 @Test
43 public void testEvaluate() throws Exception {
44
45 assertEquals(new Integer(4),(new CompositeUnaryFunction<Object, Integer>(Constant.of(4))).evaluate(null));
46
47 assertEquals(new Integer(4),(Composite.function(Constant.of(4)).of(Constant.of(3)).evaluate("xyzzy")));
48 assertEquals(new Integer(3),(new CompositeUnaryFunction<Object, Integer>(Constant.of(3)).of(Constant.of(4)).evaluate("xyzzy")));
49 }
50
51 @Test
52 public void testOf() throws Exception {
53 UnaryFunction<Object, Integer> uf = new UnaryFunction<Object, Integer>() {
54 public Integer evaluate(Object obj) {
55 if (obj instanceof Integer) {
56 return (((Integer) obj).intValue()) + 1;
57 } else {
58 return 1;
59 }
60 }
61 };
62 CompositeUnaryFunction<Object, Integer> f = null;
63 for (int i = 0; i < 10; i++) {
64 f = f == null ? new CompositeUnaryFunction<Object, Integer>(uf) : f.of(uf);
65 assertEquals(Integer.valueOf(i+1),f.evaluate(null));
66 }
67 }
68
69 @Test
70 public void testEquals() throws Exception {
71 CompositeUnaryFunction<Object, String> f = new CompositeUnaryFunction<Object, String>(Constant.of("x"));
72 assertEquals(f,f);
73
74 CompositeUnaryFunction<Object, String> g = new CompositeUnaryFunction<Object, String>(Constant.of("x"));
75 assertObjectsAreEqual(f,g);
76
77 for (int i=0;i<3;i++) {
78 f = f.of(Constant.of("y")).of(Constant.of("z"));
79 assertObjectsAreNotEqual(f,g);
80 g = g.of(Constant.of("y")).of(Constant.of("z"));
81 assertObjectsAreEqual(f,g);
82 }
83
84 assertObjectsAreNotEqual(f, Constant.of("y"));
85 }
86
87 }