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