/*
* Copyright 2014 Goldman Sachs.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gs.collections.impl.block.factory;
import java.io.IOException;
import com.gs.collections.api.block.function.Function;
import com.gs.collections.api.list.MutableList;
import com.gs.collections.impl.factory.Lists;
import com.gs.collections.impl.list.mutable.FastList;
import com.gs.collections.impl.test.Verify;
import com.gs.collections.impl.utility.ListIterate;
import org.junit.Assert;
import org.junit.Test;
public class Predicates2Test
{
private static final Predicates2<Object, Object> TRUE = Predicates2.alwaysTrue();
private static final Predicates2<Object, Object> FALSE = Predicates2.alwaysFalse();
private static final Object OBJECT = new Object();
@Test
public void throwing()
{
Verify.assertThrowsWithCause(
RuntimeException.class,
IOException.class,
() -> Predicates2.throwing((a, b) -> { throw new IOException(); }).accept(null, null));
}
@Test
public void staticOr()
{
Assert.assertTrue(Predicates2.or(TRUE, FALSE).accept(OBJECT, OBJECT));
Assert.assertFalse(Predicates2.or(FALSE, FALSE).accept(OBJECT, OBJECT));
Assert.assertTrue(Predicates2.or(TRUE, TRUE).accept(OBJECT, OBJECT));
Assert.assertNotNull(Predicates2.or(TRUE, TRUE).toString());
}
@Test
public void instanceOr()
{
Assert.assertTrue(TRUE.or(FALSE).accept(OBJECT, OBJECT));
Assert.assertFalse(FALSE.or(FALSE).accept(OBJECT, OBJECT));
Assert.assertTrue(TRUE.or(TRUE).accept(OBJECT, OBJECT));
Assert.assertNotNull(TRUE.or(TRUE).toString());
}
@Test
public void staticAnd()
{
Assert.assertTrue(Predicates2.and(TRUE, TRUE).accept(OBJECT, OBJECT));
Assert.assertFalse(Predicates2.and(TRUE, FALSE).accept(OBJECT, OBJECT));
Assert.assertFalse(Predicates2.and(FALSE, FALSE).accept(OBJECT, OBJECT));
Assert.assertNotNull(Predicates2.and(FALSE, FALSE).toString());
}
@Test
public void instanceAnd()
{
Assert.assertTrue(TRUE.and(TRUE).accept(OBJECT, OBJECT));
Assert.assertFalse(TRUE.and(FALSE).accept(OBJECT, OBJECT));
Assert.assertFalse(FALSE.and(FALSE).accept(OBJECT, OBJECT));
Assert.assertNotNull(FALSE.and(FALSE).toString());
}
@Test
public void equal()
{
Assert.assertTrue(Predicates2.equal().accept(1, 1));
Assert.assertFalse(Predicates2.equal().accept(2, 1));
Assert.assertFalse(Predicates2.equal().accept(null, 1));
Assert.assertNotNull(Predicates2.equal().toString());
}
@Test
public void notEqual()
{
Assert.assertFalse(Predicates2.notEqual().accept(1, 1));
Assert.assertTrue(Predicates2.notEqual().accept(2, 1));
Assert.assertTrue(Predicates2.notEqual().accept(1, 2));
Assert.assertTrue(Predicates2.notEqual().accept(null, 1));
Assert.assertTrue(Predicates2.notEqual().accept(1, null));
Assert.assertFalse(Predicates2.notEqual().accept(null, null));
Assert.assertNotNull(Predicates2.notEqual().toString());
}
@Test
public void not()
{
Assert.assertFalse(Predicates2.not(TRUE).accept(OBJECT, OBJECT));
Assert.assertTrue(Predicates2.not(FALSE).accept(OBJECT, OBJECT));
Assert.assertNotNull(Predicates2.not(FALSE).toString());
}
@Test
public void testNull()
{
Assert.assertFalse(Predicates2.isNull().accept(OBJECT, null));
Assert.assertTrue(Predicates2.isNull().accept(null, null));
Assert.assertNotNull(Predicates2.isNull().toString());
}
@Test
public void notNull()
{
Assert.assertTrue(Predicates2.notNull().accept(OBJECT, null));
Assert.assertFalse(Predicates2.notNull().accept(null, null));
Assert.assertNotNull(Predicates2.notNull().toString());
}
@Test
public void sameAs()
{
Assert.assertTrue(Predicates2.sameAs().accept(OBJECT, OBJECT));
Assert.assertFalse(Predicates2.sameAs().accept(OBJECT, new Object()));
Assert.assertNotNull(Predicates2.sameAs().toString());
}
@Test
public void notSameAs()
{
Assert.assertFalse(Predicates2.notSameAs().accept(OBJECT, OBJECT));
Assert.assertTrue(Predicates2.notSameAs().accept(OBJECT, new Object()));
Assert.assertNotNull(Predicates2.notSameAs().toString());
}
@Test
public void instanceOf()
{
Assert.assertTrue(Predicates2.instanceOf().accept(1, Integer.class));
Assert.assertFalse(Predicates2.instanceOf().accept(1.0, Integer.class));
Assert.assertNotNull(Predicates2.instanceOf().toString());
}
@Test
public void notInstanceOf()
{
Assert.assertFalse(Predicates2.notInstanceOf().accept(1, Integer.class));
Assert.assertTrue(Predicates2.notInstanceOf().accept(1.0, Integer.class));
Assert.assertNotNull(Predicates2.notInstanceOf().toString());
}
@Test
public void attributeEqual()
{
Integer one = 1;
Assert.assertTrue(Predicates2.attributeEqual(Functions.getToString()).accept(one, "1"));
Assert.assertFalse(Predicates2.attributeEqual(Functions.getToString()).accept(one, "2"));
Assert.assertNotNull(Predicates2.attributeEqual(Functions.getToString()).toString());
}
@Test
public void attributeNotEqual()
{
Integer one = 1;
Assert.assertFalse(Predicates2.attributeNotEqual(Functions.getToString()).accept(one, "1"));
Assert.assertTrue(Predicates2.attributeNotEqual(Functions.getToString()).accept(one, "2"));
Assert.assertNotNull(Predicates2.attributeNotEqual(Functions.getToString()).toString());
}
@Test
public void attributeLessThan()
{
Integer one = 1;
Assert.assertFalse(Predicates2.attributeLessThan(Functions.getToString()).accept(one, "1"));
Assert.assertTrue(Predicates2.attributeLessThan(Functions.getToString()).accept(one, "2"));
Assert.assertNotNull(Predicates2.attributeLessThan(Functions.getToString()).toString());
}
@Test
public void attributeGreaterThan()
{
Integer one = 1;
Assert.assertTrue(Predicates2.attributeGreaterThan(Functions.getToString()).accept(one, "0"));
Assert.assertFalse(Predicates2.attributeGreaterThan(Functions.getToString()).accept(one, "1"));
Assert.assertNotNull(Predicates2.attributeGreaterThan(Functions.getToString()).toString());
}
@Test
public void attributeGreaterThanOrEqualTo()
{
Integer one = 1;
Assert.assertTrue(Predicates2.attributeGreaterThanOrEqualTo(Functions.getToString()).accept(one, "0"));
Assert.assertTrue(Predicates2.attributeGreaterThanOrEqualTo(Functions.getToString()).accept(one, "1"));
Assert.assertFalse(Predicates2.attributeGreaterThanOrEqualTo(Functions.getToString()).accept(one, "2"));
Assert.assertNotNull(Predicates2.attributeGreaterThanOrEqualTo(Functions.getToString()).toString());
}
@Test
public void attributeLessThanOrEqualTo()
{
Assert.assertFalse(Predicates2.attributeLessThanOrEqualTo(Functions.getToString()).accept(1, "0"));
Assert.assertTrue(Predicates2.attributeLessThanOrEqualTo(Functions.getToString()).accept(1, "1"));
Assert.assertTrue(Predicates2.attributeLessThanOrEqualTo(Functions.getToString()).accept(1, "2"));
Assert.assertNotNull(Predicates2.attributeLessThanOrEqualTo(Functions.getToString()).toString());
}
@Test
public void in()
{
MutableList<String> list1 = Lists.fixedSize.of("1", "3");
Assert.assertTrue(Predicates2.in().accept("1", list1));
Assert.assertFalse(Predicates2.in().accept("2", list1));
Assert.assertNotNull(Predicates2.in().toString());
MutableList<String> list2 = Lists.fixedSize.of("1", "2");
MutableList<String> newList = ListIterate.selectWith(list2, Predicates2.in(), list1);
Assert.assertEquals(FastList.newListWith("1"), newList);
}
@Test
public void attributeIn()
{
MutableList<String> upperList = Lists.fixedSize.of("A", "B");
Assert.assertTrue(Predicates2.attributeIn(StringFunctions.toUpperCase()).accept("a", upperList));
Assert.assertFalse(Predicates2.attributeIn(StringFunctions.toUpperCase()).accept("c", upperList));
MutableList<String> lowerList = Lists.fixedSize.of("a", "c");
MutableList<String> newList =
ListIterate.selectWith(lowerList, Predicates2.attributeIn(StringFunctions.toUpperCase()), upperList);
Assert.assertEquals(FastList.newListWith("a"), newList);
}
@Test
public void attributeIn_MultiTypes()
{
MutableList<String> stringInts = Lists.fixedSize.of("1", "2");
Assert.assertTrue(Predicates2.attributeIn(Functions.getToString()).accept(1, stringInts));
Assert.assertFalse(Predicates2.attributeIn(Functions.getToString()).accept(3, stringInts));
Assert.assertFalse(Predicates2.attributeIn(Functions.getToString()).accept(3, stringInts));
MutableList<Integer> intList = Lists.fixedSize.of(1, 3);
MutableList<Integer> newList =
ListIterate.selectWith(intList, Predicates2.attributeIn(Functions.getToString()), stringInts);
Assert.assertEquals(FastList.newListWith(1), newList);
}
@Test
public void notIn()
{
MutableList<String> odds = Lists.fixedSize.of("1", "3");
Assert.assertFalse(Predicates2.notIn().accept("1", odds));
Assert.assertTrue(Predicates2.notIn().accept("2", odds));
Assert.assertNotNull(Predicates2.notIn().toString());
MutableList<String> list = Lists.fixedSize.of("1", "2");
MutableList<String> newList = ListIterate.selectWith(list, Predicates2.notIn(), odds);
Assert.assertEquals(FastList.newListWith("2"), newList);
}
@Test
public void attributeNotIn()
{
Function<String, String> function = StringFunctions.toLowerCase();
MutableList<String> lowerList = Lists.fixedSize.of("a", "b");
Assert.assertFalse(Predicates2.attributeNotIn(function).accept("A", lowerList));
Assert.assertTrue(Predicates2.attributeNotIn(function).accept("C", lowerList));
MutableList<String> upperList = Lists.fixedSize.of("A", "C");
MutableList<String> newList = ListIterate.rejectWith(upperList, Predicates2.attributeNotIn(function), lowerList);
Assert.assertEquals(FastList.newListWith("A"), newList);
}
@Test
public void lessThanNumber()
{
Assert.assertTrue(Predicates2.<Integer>lessThan().accept(-1, 0));
Assert.assertTrue(Predicates2.<Double>lessThan().accept(-1.0, 0.0));
Assert.assertFalse(Predicates2.<Double>lessThan().accept(0.0, -1.0));
Assert.assertNotNull(Predicates2.<Integer>lessThan().toString());
}
@Test
public void greaterThanNumber()
{
Assert.assertFalse(Predicates2.<Integer>greaterThan().accept(-1, 0));
Assert.assertFalse(Predicates2.<Double>greaterThan().accept(-1.0, 0.0));
Assert.assertTrue(Predicates2.<Double>greaterThan().accept(0.0, -1.0));
Assert.assertNotNull(Predicates2.<Integer>greaterThan().toString());
}
@Test
public void lessEqualThanNumber()
{
Assert.assertTrue(Predicates2.<Integer>lessThanOrEqualTo().accept(-1, 0));
Assert.assertTrue(Predicates2.<Double>lessThanOrEqualTo().accept(-1.0, 0.0));
Assert.assertTrue(Predicates2.<Double>lessThanOrEqualTo().accept(-1.0, -1.0));
Assert.assertFalse(Predicates2.<Double>lessThanOrEqualTo().accept(0.0, -1.0));
Assert.assertNotNull(Predicates2.<Integer>lessThanOrEqualTo().toString());
}
@Test
public void greaterEqualNumber()
{
Assert.assertFalse(Predicates2.<Integer>greaterThanOrEqualTo().accept(-1, 0));
Assert.assertFalse(Predicates2.<Double>greaterThanOrEqualTo().accept(-1.0, 0.0));
Assert.assertTrue(Predicates2.<Double>greaterThanOrEqualTo().accept(-1.0, -1.0));
Assert.assertTrue(Predicates2.<Double>greaterThanOrEqualTo().accept(0.0, -1.0));
Assert.assertNotNull(Predicates2.<Integer>greaterThanOrEqualTo().toString());
}
}