14c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin/*
24c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
34c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
54c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * This code is free software; you can redistribute it and/or modify it
64c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * under the terms of the GNU General Public License version 2 only, as
74c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * published by the Free Software Foundation.
84c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
94c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * This code is distributed in the hope that it will be useful, but WITHOUT
104c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
114c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
124c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * version 2 for more details (a copy is included in the LICENSE file that
134c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * accompanied this code).
144c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
154c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * You should have received a copy of the GNU General Public License version
164c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * 2 along with this work; if not, write to the Free Software Foundation,
174c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
184c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
194c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
204c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * or visit www.oracle.com if you need additional information or have any
214c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * questions.
224c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin */
234c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinpackage java.util.stream;
244c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
254c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport org.testng.annotations.Test;
264c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
274c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.ArrayList;
284c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.Arrays;
294c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.Comparator;
304c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.EnumSet;
314c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.List;
324c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.Spliterator;
334c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.function.Consumer;
344c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.function.Function;
354c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.function.ToDoubleFunction;
364c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.function.ToIntFunction;
374c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.function.ToLongFunction;
384c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
394c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport static java.util.stream.Collectors.toList;
404c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport static java.util.stream.StreamOpFlag.*;
414c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport static org.testng.Assert.*;
424c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport static org.testng.Assert.assertEquals;
434c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
444c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin@Test
454c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinpublic class StreamOpFlagsTest {
464c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
474c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testNullCombine() {
484c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        int sourceFlags = StreamOpFlag.IS_SIZED;
494c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
504c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(sourceFlags, toStreamFlags(combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE)));
514c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
524c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
534c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testInitialOpFlagsFromSourceFlags() {
544c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        List<StreamOpFlag> flags = new ArrayList<>(StreamOpFlagTestHelper.allStreamFlags());
554c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (int i = 0; i < (1 << flags.size()); i++)  {
564c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int sourceFlags = 0;
574c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            for (int f = 0; f < flags.size(); f++) {
584c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                if ((i & (1 << f)) != 0)  {
594c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    sourceFlags |= flags.get(f).set();
604c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                }
614c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
624c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
634c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
644c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(opsFlags, (~(sourceFlags << 1)) & StreamOpFlag.INITIAL_OPS_VALUE);
654c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
664c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
674c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
684c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testSameCombine() {
694c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (StreamOpFlag f : StreamOpFlagTestHelper.allStreamFlags()) {
704c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int sourceFlags = f.set();
714c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int opsFlags;
724c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
734c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
744c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(f.set(), opsFlags);
754c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(sourceFlags, toStreamFlags(opsFlags));
764c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
774c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
784c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
794c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testOpClear() {
804c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (StreamOpFlag f : StreamOpFlagTestHelper.allStreamFlags()) {
814c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            // Clear when source not set
824c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int sourceFlags = 0;
834c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int opsFlags;
844c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
854c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
864c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(f.clear(), opsFlags);
874c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(sourceFlags, toStreamFlags(opsFlags));
884c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
894c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            // Clear when source set
904c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            sourceFlags = f.set();
914c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
924c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
934c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(f.clear(), opsFlags);
944c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(0, toStreamFlags(opsFlags));
954c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
964c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
974c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
984c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testOpInject() {
994c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (StreamOpFlag f : StreamOpFlagTestHelper.allStreamFlags()) {
1004c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            // Set when source not set
1014c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int sourceFlags = 0;
1024c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int opsFlags;
1034c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1044c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
1054c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(f.set(), opsFlags);
1064c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(f.set(), toStreamFlags(opsFlags));
1074c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1084c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            // Set when source set
1094c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            sourceFlags = f.set();
1104c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1114c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
1124c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(f.set(), opsFlags);
1134c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(sourceFlags, toStreamFlags(opsFlags));
1144c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
1154c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
1164c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1174c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testPairSet() {
1184c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        List<Integer> sourceFlagsList
1194c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                = StreamOpFlagTestHelper.allStreamFlags().stream().map(StreamOpFlag::set).collect(toList());
1204c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        sourceFlagsList.add(0, 0);
1214c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1224c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (int sourceFlags : sourceFlagsList) {
1234c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            for (StreamOpFlag f1 : StreamOpFlagTestHelper.allStreamFlags()) {
1244c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                for (StreamOpFlag f2 : StreamOpFlagTestHelper.allStreamFlags()) {
1254c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    int opsFlags;
1264c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1274c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
1284c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    opsFlags = combineOpFlags(f1.set(), opsFlags);
1294c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    opsFlags = combineOpFlags(f2.set(), opsFlags);
1304c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    assertEquals(sourceFlags | f1.set() | f2.set(), toStreamFlags(opsFlags));
1314c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                }
1324c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
1334c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
1344c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
1354c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1364c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testPairSetAndClear() {
1374c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        List<Integer> sourceFlagsList
1384c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                = StreamOpFlagTestHelper.allStreamFlags().stream().map(StreamOpFlag::set).collect(toList());
1394c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        sourceFlagsList.add(0, 0);
1404c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1414c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (int sourceFlags : sourceFlagsList) {
1424c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            for (StreamOpFlag f1 : StreamOpFlagTestHelper.allStreamFlags())  {
1434c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                for (StreamOpFlag f2 : StreamOpFlagTestHelper.allStreamFlags()) {
1444c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    int opsFlags;
1454c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1464c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    opsFlags = combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
1474c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    opsFlags = combineOpFlags(f1.set(), opsFlags);
1484c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    opsFlags = combineOpFlags(f2.clear(), opsFlags);
1494c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    if (f1 == f2)
1504c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                        assertEquals((f2.set() == sourceFlags) ? 0 : sourceFlags, toStreamFlags(opsFlags));
1514c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                    else
1524c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                        assertEquals((f2.set() == sourceFlags) ? f1.set() : sourceFlags | f1.set(), toStreamFlags(opsFlags));
1534c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                }
1544c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
1554c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
1564c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
1574c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1584c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testShortCircuit() {
1594c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        int opsFlags = combineOpFlags(0, StreamOpFlag.INITIAL_OPS_VALUE);
1604c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.SHORT_CIRCUIT.isKnown(opsFlags));
1614c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1624c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        opsFlags = combineOpFlags(StreamOpFlag.IS_SHORT_CIRCUIT, opsFlags);
1634c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.SHORT_CIRCUIT.isKnown(opsFlags));
1644c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1654c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        opsFlags = combineOpFlags(0, opsFlags);
1664c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.SHORT_CIRCUIT.isKnown(opsFlags));
1674c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
1684c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1694c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testApplySourceFlags() {
1704c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        int sourceFlags = StreamOpFlag.IS_SIZED | StreamOpFlag.IS_DISTINCT;
1714c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1724c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        List<Integer> ops = Arrays.asList(StreamOpFlag.NOT_SIZED, StreamOpFlag.IS_ORDERED | StreamOpFlag.IS_SORTED);
1734c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1744c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        int opsFlags = StreamOpFlag.combineOpFlags(sourceFlags, StreamOpFlag.INITIAL_OPS_VALUE);
1754c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (int opFlags : ops) {
1764c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            opsFlags = combineOpFlags(opFlags, opsFlags);
1774c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
1784c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.SIZED.isKnown(opsFlags));
1794c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.SIZED.isCleared(opsFlags));
1804c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.SIZED.isPreserved(opsFlags));
1814c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.DISTINCT.isKnown(opsFlags));
1824c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.DISTINCT.isCleared(opsFlags));
1834c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.DISTINCT.isPreserved(opsFlags));
1844c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.SORTED.isKnown(opsFlags));
1854c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.SORTED.isCleared(opsFlags));
1864c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.SORTED.isPreserved(opsFlags));
1874c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.ORDERED.isKnown(opsFlags));
1884c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.ORDERED.isCleared(opsFlags));
1894c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.ORDERED.isPreserved(opsFlags));
1904c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1914c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        int streamFlags = toStreamFlags(opsFlags);
1924c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertFalse(StreamOpFlag.SIZED.isKnown(streamFlags));
1934c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.DISTINCT.isKnown(streamFlags));
1944c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.SORTED.isKnown(streamFlags));
1954c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTrue(StreamOpFlag.ORDERED.isKnown(streamFlags));
1964c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
1974c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
1984c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testSpliteratorMask() {
1994c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.DISTINCT.set(), StreamOpFlag.IS_DISTINCT);
2004c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.DISTINCT.clear(), 0);
2014c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2024c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.SORTED.set(), StreamOpFlag.IS_SORTED);
2034c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.SORTED.clear(), 0);
2044c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2054c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.ORDERED.set(), StreamOpFlag.IS_ORDERED);
2064c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.ORDERED.clear(), 0);
2074c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2084c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.SIZED.set(), StreamOpFlag.IS_SIZED);
2094c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.SIZED.clear(), 0);
2104c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2114c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.SHORT_CIRCUIT.set(), 0);
2124c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorMask(StreamOpFlag.SHORT_CIRCUIT.clear(), 0);
2134c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2144c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2154c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    private void assertSpliteratorMask(int actual, int expected) {
2164c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(actual & StreamOpFlag.SPLITERATOR_CHARACTERISTICS_MASK, expected);
2174c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2184c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2194c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testStreamMask() {
2204c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.DISTINCT.set(), StreamOpFlag.IS_DISTINCT);
2214c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.DISTINCT.clear(), 0);
2224c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2234c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.SORTED.set(), StreamOpFlag.IS_SORTED);
2244c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.SORTED.clear(), 0);
2254c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2264c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.ORDERED.set(), StreamOpFlag.IS_ORDERED);
2274c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.ORDERED.clear(), 0);
2284c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2294c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.SIZED.set(), StreamOpFlag.IS_SIZED);
2304c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.SIZED.clear(), 0);
2314c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2324c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.SHORT_CIRCUIT.set(), 0);
2334c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertStreamMask(StreamOpFlag.SHORT_CIRCUIT.clear(), 0);
2344c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2354c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2364c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    private void assertStreamMask(int actual, int expected) {
2374c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(actual & StreamOpFlag.STREAM_MASK, expected);
2384c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2394c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2404c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testOpMask() {
2414c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.DISTINCT.set(), StreamOpFlag.IS_DISTINCT);
2424c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.DISTINCT.clear(), StreamOpFlag.NOT_DISTINCT);
2434c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2444c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.SORTED.set(), StreamOpFlag.IS_SORTED);
2454c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.SORTED.clear(), StreamOpFlag.NOT_SORTED);
2464c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2474c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.ORDERED.set(), StreamOpFlag.IS_ORDERED);
2484c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.ORDERED.clear(), StreamOpFlag.NOT_ORDERED);
2494c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2504c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.SIZED.set(), 0);
2514c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.SIZED.clear(), StreamOpFlag.NOT_SIZED);
2524c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2534c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.SHORT_CIRCUIT.set(), StreamOpFlag.IS_SHORT_CIRCUIT);
2544c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertOpMask(StreamOpFlag.SHORT_CIRCUIT.clear(), 0);
2554c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2564c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2574c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    private void assertOpMask(int actual, int expected) {
2584c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(actual & StreamOpFlag.OP_MASK, expected);
2594c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2604c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2614c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testTerminalOpMask() {
2624c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.DISTINCT.set(), 0);
2634c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.DISTINCT.clear(), 0);
2644c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2654c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.SORTED.set(), 0);
2664c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.SORTED.clear(), 0);
2674c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2684c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.ORDERED.set(), 0);
2694c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.ORDERED.clear(), StreamOpFlag.NOT_ORDERED);
2704c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2714c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.SIZED.set(), 0);
2724c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.SIZED.clear(), 0);
2734c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2744c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.SHORT_CIRCUIT.set(), StreamOpFlag.IS_SHORT_CIRCUIT);
2754c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertTerminalOpMask(StreamOpFlag.SHORT_CIRCUIT.clear(), 0);
2764c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2774c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2784c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    private void assertTerminalOpMask(int actual, int expected) {
2794c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(actual & StreamOpFlag.TERMINAL_OP_MASK, expected);
2804c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2814c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2824c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testUpstreamTerminalOpMask() {
2834c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.DISTINCT.set(), 0);
2844c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.DISTINCT.clear(), 0);
2854c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2864c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.SORTED.set(), 0);
2874c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.SORTED.clear(), 0);
2884c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2894c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.ORDERED.set(), 0);
2904c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.ORDERED.clear(), StreamOpFlag.NOT_ORDERED);
2914c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2924c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.SIZED.set(), 0);
2934c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.SIZED.clear(), 0);
2944c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2954c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.SHORT_CIRCUIT.set(), 0);
2964c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertUpstreamTerminalOpMask(StreamOpFlag.SHORT_CIRCUIT.clear(), 0);
2974c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
2984c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
2994c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    private void assertUpstreamTerminalOpMask(int actual, int expected) {
3004c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(actual & StreamOpFlag.UPSTREAM_TERMINAL_OP_MASK, expected);
3014c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
3024c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3034c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testSpliteratorCharacteristics() {
3044c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(Spliterator.DISTINCT, StreamOpFlag.IS_DISTINCT);
3054c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(Spliterator.SORTED, StreamOpFlag.IS_SORTED);
3064c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(Spliterator.ORDERED, StreamOpFlag.IS_ORDERED);
3074c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(Spliterator.SIZED, StreamOpFlag.IS_SIZED);
3084c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3094c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        List<Integer> others = Arrays.asList(Spliterator.NONNULL, Spliterator.IMMUTABLE,
3104c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                                             Spliterator.CONCURRENT, Spliterator.SUBSIZED);
3114c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (int c : others) {
3124c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertNotEquals(c, StreamOpFlag.IS_SHORT_CIRCUIT);
3134c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
3144c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
3154c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3164c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testSpliteratorCharacteristicsMask() {
3174c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.DISTINCT.set(), StreamOpFlag.IS_DISTINCT);
3184c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.DISTINCT.clear(), 0);
3194c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3204c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.SORTED.set(), StreamOpFlag.IS_SORTED);
3214c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.SORTED.clear(), 0);
3224c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3234c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.ORDERED.set(), StreamOpFlag.IS_ORDERED);
3244c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.ORDERED.clear(), 0);
3254c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3264c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.SIZED.set(), StreamOpFlag.IS_SIZED);
3274c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.SIZED.clear(), 0);
3284c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3294c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.SHORT_CIRCUIT.set(), 0);
3304c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertSpliteratorCharacteristicsMask(StreamOpFlag.SHORT_CIRCUIT.clear(), 0);
3314c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
3324c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3334c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    private void assertSpliteratorCharacteristicsMask(int actual, int expected) {
3344c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        assertEquals(StreamOpFlag.fromCharacteristics(actual), expected);
3354c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
3364c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3374c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void testSpliteratorSorted() {
3384c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        class SortedEmptySpliterator implements Spliterator<Object> {
3394c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            final Comparator<Object> c;
3404c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3414c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            SortedEmptySpliterator(Comparator<Object> c) {
3424c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                this.c = c;
3434c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
3444c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3454c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            @Override
3464c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            public Spliterator<Object> trySplit() {
3474c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                return null;
3484c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
3494c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3504c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            @Override
3514c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            public boolean tryAdvance(Consumer<? super Object> action) {
3524c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                return false;
3534c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
3544c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3554c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            @Override
3564c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            public long estimateSize() {
3574c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                return Long.MAX_VALUE;
3584c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
3594c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3604c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            @Override
3614c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            public int characteristics() {
3624c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                return Spliterator.SORTED;
3634c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
3644c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3654c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            @Override
3664c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            public Comparator<? super Object> getComparator() {
3674c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                return c;
3684c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
3694c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        };
3704c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3714c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        {
3724c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int flags = StreamOpFlag.fromCharacteristics(new SortedEmptySpliterator(null));
3734c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(flags, StreamOpFlag.IS_SORTED);
3744c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
3754c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
3764c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        {
3774c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            int flags = StreamOpFlag.fromCharacteristics(new SortedEmptySpliterator((a, b) -> 0));
3784c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            assertEquals(flags, 0);
3794c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
3804c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
3814c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin}
382