001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.commons.functor.core.composite;
018
019import static org.junit.Assert.assertEquals;
020import static org.junit.Assert.assertFalse;
021import static org.junit.Assert.assertTrue;
022
023import java.util.Arrays;
024
025import org.apache.commons.functor.BaseFunctorTest;
026import org.apache.commons.functor.NullaryPredicate;
027import org.apache.commons.functor.core.Constant;
028import org.junit.Test;
029
030/**
031 * @version $Revision: 1365329 $ $Date: 2012-07-24 19:34:23 -0300 (Tue, 24 Jul 2012) $
032 */
033public class TestNullaryOr extends BaseFunctorTest {
034
035    // Functor Testing Framework
036    // ------------------------------------------------------------------------
037
038    @Override
039    protected Object makeFunctor() {
040        return new NullaryOr(Constant.FALSE, Constant.TRUE);
041    }
042
043    // Tests
044    // ------------------------------------------------------------------------
045
046    @Test
047    public void testConstructors() {
048        NullaryOr or = new NullaryOr(Constant.FALSE);
049        assertEquals(Boolean.FALSE, or.test());
050        NullaryOr or2 = new NullaryOr((Iterable<NullaryPredicate>)Arrays.asList((NullaryPredicate)Constant.truePredicate()));
051        assertEquals(Boolean.TRUE, or2.test());
052        NullaryOr or3 = new NullaryOr((NullaryPredicate)null);
053        assertEquals(Boolean.FALSE, or3.test());
054        NullaryOr or4 = new NullaryOr((Iterable<NullaryPredicate>)null);
055        assertEquals(Boolean.FALSE, or4.test());
056    }
057
058    @Test
059    public void testTrue() throws Exception {
060        assertTrue((new NullaryOr(Constant.TRUE)).test());
061        assertTrue((new NullaryOr(Constant.FALSE, Constant.TRUE)).test());
062        assertTrue((new NullaryOr(Constant.FALSE, Constant.FALSE, Constant.TRUE)).test());
063
064        NullaryOr p = new NullaryOr(Constant.TRUE);
065        assertTrue(p.test());
066        for (int i=0;i<10;i++) {
067            p.or(Constant.of(i%2==0));
068            assertTrue(p.test());
069        }
070
071        NullaryOr q = new NullaryOr(Constant.TRUE);
072        assertTrue(q.test());
073        for (int i=0;i<10;i++) {
074            q.or(Constant.of(i%2==0));
075            assertTrue(q.test());
076        }
077
078        NullaryOr r = new NullaryOr(p,q);
079        assertTrue(r.test());
080    }
081
082    @Test
083    public void testFalse() throws Exception {
084        assertFalse(new NullaryOr().test());
085        assertFalse(new NullaryOr(Constant.FALSE).test());
086        assertFalse(new NullaryOr(Constant.FALSE,Constant.FALSE).test());
087        assertFalse(new NullaryOr(Constant.FALSE,Constant.FALSE,Constant.FALSE).test());
088
089        NullaryOr p = new NullaryOr(Constant.FALSE);
090        assertFalse(p.test());
091        for (int i=0;i<10;i++) {
092            p.or(Constant.FALSE);
093            assertFalse(p.test());
094        }
095
096        NullaryOr q = new NullaryOr(Constant.FALSE);
097        assertFalse(q.test());
098        for (int i=0;i<10;i++) {
099            q.or(Constant.FALSE);
100            assertFalse(q.test());
101        }
102
103        NullaryOr r = new NullaryOr(p,q);
104        assertTrue(!r.test());
105    }
106
107    @Test
108    public void testDuplicateAdd() throws Exception {
109        NullaryPredicate p = Constant.TRUE;
110        NullaryOr q = new NullaryOr(p,p);
111        assertTrue(q.test());
112        for (int i=0;i<10;i++) {
113            q.or(p);
114            assertTrue(q.test());
115        }
116    }
117
118    @Test
119    public void testEquals() throws Exception {
120        NullaryOr p = new NullaryOr();
121        assertEquals(p,p);
122
123        NullaryOr q = new NullaryOr();
124        assertObjectsAreEqual(p,q);
125
126        NullaryAnd r = new NullaryAnd();
127        assertObjectsAreNotEqual(p,r);
128
129        for (int i=0;i<3;i++) {
130            p.or(Constant.TRUE);
131            assertObjectsAreNotEqual(p,q);
132            q.or(Constant.TRUE);
133            assertObjectsAreEqual(p,q);
134            r.and(Constant.TRUE);
135            assertObjectsAreNotEqual(p,r);
136
137            p.or(new NullaryOr(Constant.TRUE,Constant.FALSE));
138            assertObjectsAreNotEqual(p,q);
139            q.or(new NullaryOr(Constant.TRUE,Constant.FALSE));
140            assertObjectsAreEqual(p,q);
141            r.and(new NullaryOr(Constant.TRUE,Constant.FALSE));
142            assertObjectsAreNotEqual(p,r);
143        }
144
145        assertObjectsAreNotEqual(p,Constant.TRUE);
146
147        assertObjectsAreNotEqual(p,new NullaryOr((Iterable<NullaryPredicate>)null));
148        assertObjectsAreNotEqual(p,new NullaryOr((NullaryPredicate[])null));
149        assertObjectsAreNotEqual(p,new NullaryOr((NullaryPredicate)null));
150
151        assertTrue(!p.equals(null));
152    }
153
154}