/* * Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved. * * Licensed 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 com.hazelcast.cardinality.impl.hyperloglog.impl; import com.hazelcast.test.HazelcastParallelClassRunner; import com.hazelcast.test.HazelcastTestSupport; import com.hazelcast.test.annotation.ParallelTest; import com.hazelcast.test.annotation.QuickTest; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import java.util.Arrays; import static org.junit.Assert.assertEquals; /** * Checks the consistency of {@link DenseHyperLogLogConstants} with hashcodes. */ @RunWith(HazelcastParallelClassRunner.class) @Category({QuickTest.class, ParallelTest.class}) public class DenseHyperLogLogConstantsTest extends HazelcastTestSupport { private static final int THRESHOLD_HASHCODE = -1946099911; private static final int[] RAW_ESTIMATE_DATA_HASHCODES = { -1251035322, -1094734953, -61611651, -40264626, 479598381, -116264945, 1050131386, -1235040548, -1202239017, 1288152491, -769393172, -1652552964, -497616505, -1689057893, 923172265, }; private static final int[] BIAS_DATA_HASHCODES = { -1077449490, 1779769334, -1948875718, 1532988461, -990299124, -591836144, 48144655, -470742222, -1450150050, 1929284635, -697321875, -1556078395, -1405633222, -88240126, 1330624843, }; @Test public void testConstructor() { assertUtilityConstructor(DenseHyperLogLogConstants.class); } @Test public void testHashCodes() { assertEquals("DenseHyperLogLogConstants.THRESHOLD", THRESHOLD_HASHCODE, Arrays.hashCode(DenseHyperLogLogConstants.THRESHOLD)); assertArrayHashcodes("RAW_ESTIMATE_DATA", DenseHyperLogLogConstants.RAW_ESTIMATE_DATA, RAW_ESTIMATE_DATA_HASHCODES); assertArrayHashcodes("BIAS_DATA", DenseHyperLogLogConstants.BIAS_DATA, BIAS_DATA_HASHCODES); } /** * Asserts {@code double[][]} arrays by an array of hash codes per sub-array. * * The method {@link Arrays#hashCode(Object[])} is not constant for {@code double[][]} arrays. * So we compare each sub-array on its own with {@link Arrays#hashCode(double[])}. */ private static void assertArrayHashcodes(String label, double[][] array, int[] hashcodes) { assertEquals(label + " and hashcode array lengths differ", hashcodes.length, array.length); for (int i = 0; i < array.length; i++) { assertEquals("DenseHyperLogLogConstants." + label + " at index " + i, hashcodes[i], Arrays.hashCode(array[i])); } } }