| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 org.apache.ratis.util; |
| |
| import org.junit.jupiter.api.Assertions; |
| import org.junit.jupiter.api.Test; |
| import org.junit.jupiter.api.Timeout; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.OptionalLong; |
| import java.util.concurrent.ThreadLocalRandom; |
| import java.util.stream.LongStream; |
| |
| public class TestMinMax { |
| @Test |
| @Timeout(value = 1000) |
| public void testMinMax() { |
| runTestMinMax(LongStream.empty()); |
| runTestMinMax(LongStream.iterate(0, n -> n).limit(10)); |
| for(int count = 1; count < 10; count++) { |
| runTestMinMax(LongStream.iterate(1, n -> n + 1).limit(count)); |
| } |
| for(int count = 1; count < 10; count++) { |
| runTestMinMax(LongStream.iterate(0, _dummy -> ThreadLocalRandom.current().nextLong()).limit(count)); |
| } |
| } |
| |
| static void runTestMinMax(LongStream stream) { |
| final List<Long> list = stream.collect(ArrayList::new, List::add, List::addAll); |
| final LongMinMax longMinMax = toLongStream(list).collect(LongMinMax::new, LongMinMax::accumulate, LongMinMax::combine); |
| if (longMinMax.isInitialized()) { |
| Assertions.assertEquals(toLongStream(list).min().getAsLong(), longMinMax.getMin()); |
| Assertions.assertEquals(toLongStream(list).max().getAsLong(), longMinMax.getMax()); |
| } else { |
| Assertions.assertEquals(OptionalLong.empty(), toLongStream(list).min()); |
| Assertions.assertEquals(OptionalLong.empty(), toLongStream(list).max()); |
| } |
| } |
| |
| static LongStream toLongStream(List<Long> list) { |
| return list.stream().mapToLong(Long::longValue); |
| } |
| } |