1cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath/* 2cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * Copyright (C) 2016 The Android Open Source Project 3cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * 4cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * Licensed under the Apache License, Version 2.0 (the "License"); 5cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * you may not use this file except in compliance with the License. 6cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * You may obtain a copy of the License at 7cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * 8cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 9cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * 10cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * Unless required by applicable law or agreed to in writing, software 11cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 12cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * See the License for the specific language governing permissions and 14cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath * limitations under the License 15cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath */ 16cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 17cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathpackage libcore.java.util; 18cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 19cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport junit.framework.TestCase; 20cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 21cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport java.io.IOException; 22cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport java.util.NoSuchElementException; 23cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport java.util.OptionalLong; 24cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport java.util.concurrent.atomic.AtomicLong; 25cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport java.util.function.LongConsumer; 26cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport java.util.function.LongSupplier; 27cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathimport java.util.function.Supplier; 28cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 29cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamathpublic class OptionalLongTest extends TestCase { 30cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testEmpty_sameInstance() { 31cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertSame(OptionalLong.empty(), OptionalLong.empty()); 32cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 33cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 34cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testGet() { 35cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(56, OptionalLong.of(56).getAsLong()); 36cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 37cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath try { 38cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath OptionalLong.empty().getAsLong(); 39cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath fail(); 40cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } catch (NoSuchElementException nsee) { 41cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 42cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 43cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 44cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testIsPresent() { 45cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertTrue(OptionalLong.of(56).isPresent()); 46cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertFalse(OptionalLong.empty().isPresent()); 47cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 48cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 49cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testIfPresent() { 50cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath LongConsumer alwaysFails = value -> fail(); 51cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath OptionalLong.empty().ifPresent(alwaysFails); 52cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 53cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath final AtomicLong reference = new AtomicLong(); 54cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath LongConsumer recorder = (long value) -> reference.set(value); 55cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath OptionalLong.of(56).ifPresent(recorder); 56cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(56, reference.get()); 57cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 58cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 59cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testOrElse() { 60cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(57, OptionalLong.empty().orElse(57)); 61cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(56, OptionalLong.of(56).orElse(57)); 62cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 63cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 64cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testOrElseGet() { 65cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath LongSupplier alwaysFails = () -> { fail(); return 57; }; 66cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(56, OptionalLong.of(56).orElseGet(alwaysFails)); 67cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 68cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath LongSupplier supplies57 = () -> 57; 69cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(57, OptionalLong.empty().orElseGet(supplies57)); 70cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 71cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 72cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testOrElseThrow() throws IOException { 73cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath final IOException bar = new IOException("bar"); 74cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 75cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath Supplier<IOException> barSupplier = () -> bar; 76cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(57, OptionalLong.of(57).orElseThrow(barSupplier)); 77cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 78cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath try { 79cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath OptionalLong.empty().orElseThrow(barSupplier); 80cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath fail(); 81cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } catch (IOException expected) { 82cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertSame(bar, expected); 83cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 84cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 85cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 86cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testEquals() { 87cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(OptionalLong.empty(), OptionalLong.empty()); 88cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(OptionalLong.of(56), OptionalLong.of(56)); 89cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertFalse(OptionalLong.empty().equals(OptionalLong.of(56))); 90cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertFalse(OptionalLong.of(57).equals(OptionalLong.of(56))); 91cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 92cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath 93cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath public void testHashCode() { 94cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath assertEquals(Long.hashCode(57), OptionalLong.of(57).hashCode()); 95cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath } 96cd74ab122b3c80d7fd7111105940db13e045f4aaNarayan Kamath} 97