17cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller/* 27cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * Copyright (C) 2016 The Android Open Source Project 37cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * 47cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * Licensed under the Apache License, Version 2.0 (the "License"); 57cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * you may not use this file except in compliance with the License. 67cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * You may obtain a copy of the License at 77cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * 87cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * http://www.apache.org/licenses/LICENSE-2.0 97cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * 107cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * Unless required by applicable law or agreed to in writing, software 117cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * distributed under the License is distributed on an "AS IS" BASIS, 127cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * See the License for the specific language governing permissions and 147cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller * limitations under the License. 157cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller */ 167cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 177cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fullerpackage libcore.java.util.function; 187cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 197cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fullerimport junit.framework.TestCase; 207cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 217cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fullerimport java.util.concurrent.atomic.AtomicBoolean; 227cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fullerimport java.util.function.DoublePredicate; 237cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 247cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fullerpublic class DoublePredicateTest extends TestCase { 257cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 267cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller public void testAnd() throws Exception { 277cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller double arg = 5.0d; 287cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 297cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysTrueInvoked = new AtomicBoolean(false); 307cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysTrue2Invoked = new AtomicBoolean(false); 317cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysFalseInvoked = new AtomicBoolean(false); 327cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysFalse2Invoked = new AtomicBoolean(false); 337cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean[] invocationState = { 347cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller alwaysTrueInvoked, alwaysTrue2Invoked, alwaysFalseInvoked, alwaysFalse2Invoked }; 357cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 367cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysTrue = 377cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysTrueInvoked.set(true); assertEquals(x, arg); return true; }; 387cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysTrue2 = 397cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysTrue2Invoked.set(true); assertEquals(x, arg); return true; }; 407cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysFalse = 417cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysFalseInvoked.set(true); assertEquals(x, arg); return false; }; 427cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysFalse2 = 437cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysFalse2Invoked.set(true); assertEquals(x, arg); return false; }; 447cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 457cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // true && true 467cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 477cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysTrue.and(alwaysTrue2).test(arg)); 487cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysTrueInvoked.get() && alwaysTrue2Invoked.get()); 497cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 507cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // true && false 517cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 527cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertFalse(alwaysTrue.and(alwaysFalse).test(arg)); 537cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysTrueInvoked.get() && alwaysFalseInvoked.get()); 547cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 557cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // false && false 567cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 577cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertFalse(alwaysFalse.and(alwaysFalse2).test(arg)); 587cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysFalseInvoked.get() && !alwaysFalse2Invoked.get()); 597cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 607cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // false && true 617cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 627cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertFalse(alwaysFalse.and(alwaysTrue).test(arg)); 637cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysFalseInvoked.get() && !alwaysTrueInvoked.get()); 647cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } 657cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 667cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller public void testAnd_null() throws Exception { 677cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysTrue = x -> true; 687cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller try { 697cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller alwaysTrue.and(null); 707cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller fail(); 717cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } catch (NullPointerException expected) {} 727cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } 737cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 747cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller public void testNegate() throws Exception { 757cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller double arg = 5.0d; 767cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysTrue = x -> { assertEquals(x, arg); return true; }; 777cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertFalse(alwaysTrue.negate().test(arg)); 787cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 797cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysFalse = x -> { assertEquals(x, arg); return false; }; 807cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysFalse.negate().test(arg)); 817cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } 827cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 837cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller public void testOr() throws Exception { 847cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller double arg = 5.0d; 857cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 867cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysTrueInvoked = new AtomicBoolean(false); 877cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysTrue2Invoked = new AtomicBoolean(false); 887cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysFalseInvoked = new AtomicBoolean(false); 897cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean alwaysFalse2Invoked = new AtomicBoolean(false); 907cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller AtomicBoolean[] invocationState = { 917cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller alwaysTrueInvoked, alwaysTrue2Invoked, alwaysFalseInvoked, alwaysFalse2Invoked }; 927cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 937cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysTrue = 947cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysTrueInvoked.set(true); assertEquals(x, arg); return true; }; 957cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysTrue2 = 967cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysTrue2Invoked.set(true); assertEquals(x, arg); return true; }; 977cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysFalse = 987cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysFalseInvoked.set(true); assertEquals(x, arg); return false; }; 997cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysFalse2 = 1007cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller x -> { alwaysFalse2Invoked.set(true); assertEquals(x, arg); return false; }; 1017cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 1027cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // true || true 1037cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 1047cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysTrue.or(alwaysTrue2).test(arg)); 1057cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysTrueInvoked.get() && !alwaysTrue2Invoked.get()); 1067cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 1077cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // true || false 1087cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 1097cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysTrue.or(alwaysFalse).test(arg)); 1107cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysTrueInvoked.get() && !alwaysFalseInvoked.get()); 1117cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 1127cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // false || false 1137cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 1147cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertFalse(alwaysFalse.or(alwaysFalse2).test(arg)); 1157cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysFalseInvoked.get() && alwaysFalse2Invoked.get()); 1167cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 1177cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller // false || true 1187cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller resetToFalse(invocationState); 1197cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysFalse.or(alwaysTrue).test(arg)); 1207cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller assertTrue(alwaysFalseInvoked.get() && alwaysTrueInvoked.get()); 1217cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } 1227cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 1237cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller public void testOr_null() throws Exception { 1247cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller DoublePredicate alwaysTrue = x -> true; 1257cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller try { 1267cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller alwaysTrue.or(null); 1277cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller fail(); 1287cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } catch (NullPointerException expected) {} 1297cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } 1307cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller 1317cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller private static void resetToFalse(AtomicBoolean... toResets) { 1327cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller for (AtomicBoolean toReset : toResets) { 1337cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller toReset.set(false); 1347cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } 1357cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller } 1367cf6b7d47829942a72faf8c6525e403cd9f37e48Neil Fuller} 137