content: /*
   * 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.kafka.streams.state.internals;
  
  import org.junit.jupiter.api.Test;
  
  import java.util.Map;
  
  import static org.junit.jupiter.api.Assertions.assertArrayEquals;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  
  /**
   * This class was taken from Hive org.apache.hive.common.util;
   * https://github.com/apache/hive/blob/master/storage-api/src/test/org/apache/hive/common/util/TestMurmur3.java
   * Commit: dffa3a16588bc8e95b9d0ab5af295a74e06ef702
   *
   *
   * Tests for Murmur3 variants.
   */
  public class Murmur3Test {
  
      @Test
      public void testMurmur3_32() {
          Map<byte[], Integer> cases = new java.util.HashMap<>();
          cases.put("21".getBytes(), 896581614);
          cases.put("foobar".getBytes(), -328928243);
          cases.put("a-little-bit-long-string".getBytes(), -1479816207);
          cases.put("a-little-bit-longer-string".getBytes(), -153232333);
          cases.put("lkjh234lh9fiuh90y23oiuhsafujhadof229phr9h19h89h8".getBytes(), 13417721);
          cases.put(new byte[]{'a', 'b', 'c'}, 461137560);
  
          int seed = 123;
          for (Map.Entry<byte[], Integer> c : cases.entrySet()) {
              byte[] b = c.getKey();
              assertEquals(c.getValue(), Murmur3.hash32(b, b.length, seed));
          }
      }
  
      @Test
      public void testMurmur3_128() {
          Map<byte[], long[]> cases = new java.util.HashMap<>();
          cases.put("21".getBytes(), new long[]{5857341059704281894L, -5288187638297930763L});
          cases.put("foobar".getBytes(), new long[]{-351361463397418609L, 8959716011862540668L});
          cases.put("a-little-bit-long-string".getBytes(), new long[]{8836256500583638442L, -198172363548498523L});
          cases.put("a-little-bit-longer-string".getBytes(), new long[]{1838346159335108511L, 8794688210320490705L});
          cases.put("lkjh234lh9fiuh90y23oiuhsafujhadof229phr9h19h89h8".getBytes(), new long[]{-4024021876037397259L, -1482317706335141238L});
          cases.put(new byte[]{'a', 'b', 'c'}, new long[]{1489494923063836066L, -5440978547625122829L});
  
          int seed = 123;
  
          for (Map.Entry<byte[], long[]> c : cases.entrySet()) {
              byte[] b = c.getKey();
              long[] result = Murmur3.hash128(b, 0, b.length, seed);
              assertArrayEquals(c.getValue(), result);
          }
      }
  }