clicache/test2/ObjectsTests.cs (252 lines of code) (raw):

/* * 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. */ using System; using System.Collections.Generic; using System.Collections; using Xunit; namespace Apache.Geode { /// <summary> /// Asserts consistent hash results with Java server. /// /// See Java class org.apache.geode.cache.util.ObjectsTest for test parity. /// </summary> public class ObjectsTests { [Fact] public void GetHashCodeNullObjectIsZero() { Assert.Equal(0, Objects.GetHashCode((Object)null)); } [Fact] public void GetHashCodeOfEmptyArrayIs1() { Assert.Equal(1, Objects.GetHashCode(new Object[0])); } [Fact] public void HashCodeEmptyArgsIs1() { Assert.Equal(1, Objects.Hash()); } [Fact] public void HashOfString() { Assert.Equal(0, Objects.GetHashCode("")); Assert.Equal(48, Objects.GetHashCode("0")); Assert.Equal(57, Objects.GetHashCode("9")); Assert.Equal(97, Objects.GetHashCode("a")); Assert.Equal(122, Objects.GetHashCode("z")); Assert.Equal(65, Objects.GetHashCode("A")); Assert.Equal(90, Objects.GetHashCode("Z")); Assert.Equal(1077910243, Objects.GetHashCode("supercalifragilisticexpialidocious")); Assert.Equal(1544552287, Objects.GetHashCode("You had me at meat tornad\u00F6!\U000F0000")); Assert.Equal(701776767, Objects.GetHashCode("You had me at\0meat tornad\u00F6!\U000F0000")); Assert.Equal( 512895612, Objects.GetHashCode("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " + "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut " + "enim ad minim veniam, quis nostrud exercitation ullamco laboris " + "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in " + "reprehenderit in voluptate velit esse cillum dolore eu fugiat " + "nulla pariatur. Excepteur sint occaecat cupidatat non proident, " + "sunt in culpa qui officia deserunt mollit anim id est laborum.")); Assert.Equal( -1425027716, Objects.GetHashCode("\u16bb\u16d6\u0020\u16b3\u16b9\u16ab\u16a6\u0020\u16a6\u16ab" + "\u16cf\u0020\u16bb\u16d6\u0020\u16d2\u16a2\u16de\u16d6\u0020" + "\u16a9\u16be\u0020\u16a6\u16ab\u16d7\u0020\u16da\u16aa\u16be" + "\u16de\u16d6\u0020\u16be\u16a9\u16b1\u16a6\u16b9\u16d6\u16aa" + "\u16b1\u16de\u16a2\u16d7\u0020\u16b9\u16c1\u16a6\u0020\u16a6" + "\u16aa\u0020\u16b9\u16d6\u16e5\u16ab")); } [Fact] public void HashOf1String() { Assert.Equal(121, Objects.Hash("Z")); } [Fact] public void GetHashCodeOfChar() { Assert.Equal(48, Objects.GetHashCode('0')); Assert.Equal(57, Objects.GetHashCode('9')); Assert.Equal(97, Objects.GetHashCode('a')); Assert.Equal(122, Objects.GetHashCode('z')); Assert.Equal(65, Objects.GetHashCode('A')); Assert.Equal(90, Objects.GetHashCode('Z')); } [Fact] public void HashOf1Char() { Assert.Equal(121, Objects.Hash('Z')); } [Fact] public void GetHashCodeOfBoolean() { Assert.Equal(1237, Objects.GetHashCode(false)); Assert.Equal(1231, Objects.GetHashCode(true)); } [Fact] public void HashOf1Boolean() { Assert.Equal(1262, Objects.Hash(true)); } [Fact] public void GetHashCodeOfByte() { Assert.Equal(0, Objects.GetHashCode((SByte)0)); Assert.Equal(1, Objects.GetHashCode((SByte)1)); Assert.Equal(-1, Objects.GetHashCode((SByte)(-1))); Assert.Equal(SByte.MaxValue, Objects.GetHashCode(SByte.MaxValue)); Assert.Equal(SByte.MinValue, Objects.GetHashCode(SByte.MinValue)); } [Fact] public void HashOf1Byte() { Assert.Equal(158, Objects.Hash(SByte.MaxValue)); } [Fact] public void GetHashCodeOfInt16() { Assert.Equal(0, Objects.GetHashCode((Int16)0)); Assert.Equal(1, Objects.GetHashCode((Int16)1)); Assert.Equal(-1, Objects.GetHashCode((Int16)(-1))); Assert.Equal(Int16.MaxValue, Objects.GetHashCode(Int16.MaxValue)); Assert.Equal(Int16.MinValue, Objects.GetHashCode(Int16.MinValue)); } [Fact] public void HashOf1Int16() { Assert.Equal(32798, Objects.Hash(Int16.MaxValue)); } [Fact] public void GetHashCodeOfInt32() { Assert.Equal(0, Objects.GetHashCode(0)); Assert.Equal(1, Objects.GetHashCode(1)); Assert.Equal(-1, Objects.GetHashCode(-1)); Assert.Equal(Int32.MaxValue, Objects.GetHashCode(Int32.MaxValue)); Assert.Equal(Int32.MinValue, Objects.GetHashCode(Int32.MinValue)); } [Fact] public void HashOf1Int32() { Assert.Equal(-2147483618, Objects.Hash(Int32.MaxValue)); } [Fact] public void GetHashCodeOfInt64() { Assert.Equal(0, Objects.GetHashCode(0L)); Assert.Equal(1, Objects.GetHashCode(1L)); Assert.Equal(0, Objects.GetHashCode(-1L)); Assert.Equal(-2147483648, Objects.GetHashCode(((Int64)Int32.MaxValue) + 1)); Assert.Equal(-2147483648, Objects.GetHashCode(((Int64)Int32.MinValue) - 1)); Assert.Equal(-2147483648, Objects.GetHashCode(Int64.MaxValue)); Assert.Equal(-2147483648, Objects.GetHashCode(Int64.MinValue)); Assert.Equal(-1073741824, Objects.GetHashCode(Int64.MaxValue >> 1)); Assert.Equal(-1073741824, Objects.GetHashCode(Int64.MinValue >> 1)); Assert.Equal(-536870912, Objects.GetHashCode(Int64.MaxValue >> 2)); Assert.Equal(-536870912, Objects.GetHashCode(Int64.MinValue >> 2)); Assert.Equal(0, Objects.GetHashCode(-9223372034707292160L)); } [Fact] public void HashOf1Int64() { Assert.Equal(-2147483617, Objects.Hash(Int64.MaxValue)); } [Fact] public void GetHashCodeOfFloat() { Assert.Equal(0, Objects.GetHashCode(0.0f)); Assert.Equal(-2147483648, Objects.GetHashCode(-0.0f)); Assert.Equal(1065353216, Objects.GetHashCode(1.0f)); Assert.Equal(-1082130432, Objects.GetHashCode(-1.0f)); Assert.Equal(2139095039, Objects.GetHashCode(Single.MaxValue)); Assert.Equal(1, Objects.GetHashCode(Single.Epsilon)); Assert.Equal(-8388609, Objects.GetHashCode(Single.MinValue)); Assert.Equal(2139095040, Objects.GetHashCode(Single.PositiveInfinity)); Assert.Equal(-8388608, Objects.GetHashCode(Single.NegativeInfinity)); Assert.Equal(8388608, Objects.GetHashCode(1.17549435E-38f)); Assert.Equal(2143289344, Objects.GetHashCode(Single.NaN)); } [Fact] public void HashOf1Float() { Assert.Equal(2139095070, Objects.Hash(Single.MaxValue)); } [Fact] public void GetHashCodeOfDouble() { Assert.Equal(0, Objects.GetHashCode(0.0d)); Assert.Equal(-2147483648, Objects.GetHashCode(-0.0d)); Assert.Equal(1072693248, Objects.GetHashCode(1.0d)); Assert.Equal(-1074790400, Objects.GetHashCode(-1.0d)); Assert.Equal(-2146435072, Objects.GetHashCode(Double.MaxValue)); Assert.Equal(1, Objects.GetHashCode(Double.Epsilon)); Assert.Equal(1048576, Objects.GetHashCode(Double.MinValue)); Assert.Equal(2146435072, Objects.GetHashCode(Double.PositiveInfinity)); Assert.Equal(-1048576, Objects.GetHashCode(Double.NegativeInfinity)); Assert.Equal(1048576, Objects.GetHashCode(2.2250738585072014E-308d)); Assert.Equal(2146959360, Objects.GetHashCode(Double.NaN)); } [Fact] public void HashOf1Double() { Assert.Equal(-2146435041, Objects.Hash(Double.MaxValue)); } [Fact] public void GetHashCodeOfDate() { Assert.Equal(0, Objects.GetHashCode(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))); Assert.Equal(1583802735, Objects.GetHashCode(new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc))); Assert.Equal(-927080926, Objects.GetHashCode(new DateTime(3020, 1, 1, 0, 0, 0, DateTimeKind.Utc))); Assert.Equal(1670202000, Objects.GetHashCode(new DateTime(1920, 1, 1, 0, 0, 0, DateTimeKind.Utc))); Assert.Equal(542840753, Objects.GetHashCode(new DateTime(1820, 1, 1, 0, 0, 0, DateTimeKind.Utc))); } [Fact] public void HashOf1DateTime() { Assert.Equal(31, Objects.Hash(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))); } [Fact] public void GetHashCodeOfArrays() { Assert.Equal(955331, Objects.GetHashCode(new SByte[] { 1, 2, 3, 4 })); Assert.Equal(955331, Objects.GetHashCode(new Int16[] { 1, 2, 3, 4 })); Assert.Equal(955331, Objects.GetHashCode(new Int32[] { 1, 2, 3, 4 })); Assert.Equal(955331, Objects.GetHashCode(new Int64[] { 1L, 2L, 3L, 4L })); Assert.Equal(265164673, Objects.GetHashCode(new Single[] { 0.0f, 1.0f, -1.0f, Single.NaN })); Assert.Equal(-1039788159, Objects.GetHashCode(new Double[] { 0.0d, 1.0d, -1.0d, Double.NaN })); Assert.Equal(3910595, Objects.GetHashCode(new String[] { "a", "b", "c", "d"})); Assert.Equal(3910595, Objects.GetHashCode(new Char[] { 'a', 'b', 'c', 'd' })); } [Fact] public void GetHashCodeOfList() { Assert.Equal(955331, Objects.GetHashCode(new List<int> { 1, 2, 3, 4 })); Assert.Equal(955331, Objects.GetHashCode(new ArrayList { 1, 2, 3, 4 })); Assert.Equal(955331, Objects.GetHashCode(new LinkedList<int>(new int[] { 1, 2, 3, 4 }))); Assert.Equal(955331, Objects.GetHashCode(new Stack<int>(new int[] { 4, 3, 2, 1 }))); Assert.Equal(955331, Objects.GetHashCode(new Stack(new int[] { 4, 3, 2, 1 }))); } [Fact] public void GetHashCodeOfMap() { Assert.Equal(10, Objects.GetHashCode(new Hashtable { { 1, 2 }, { 3, 4 } })); Assert.Equal(10, Objects.GetHashCode(new Dictionary<int, int> { { 1, 2 }, { 3, 4 } })); } class CustomKey { private int a; private double b; private String c; public CustomKey(int a, double b, String c) { this.a = a; this.b = b; this.c = c; } override public int GetHashCode() { return Objects.Hash(a, b, c); } }; [Fact] public void hashOfCustomKey() { Assert.Equal(-1073604993, Objects.GetHashCode(new CustomKey(1, 2.0, "key"))); } } };