From 623db252508b759dbe5e2b5a72914fd845e1510e Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Fri, 22 May 2009 16:41:28 +0000 Subject: [PATCH] Fix hash code for doubles, add unit test to compare with integer hash codes. --- bin/LuaJit0.class | Bin 0 -> 1140 bytes src/core/org/luaj/vm/LDouble.java | 2 +- .../java/org/luaj/compiler/SimpleTests.java | 22 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 bin/LuaJit0.class diff --git a/bin/LuaJit0.class b/bin/LuaJit0.class new file mode 100644 index 0000000000000000000000000000000000000000..dd42a9934813211366155f238f9c38067a4306d8 GIT binary patch literal 1140 zcmZ`(YflqV5IwiM+qLa2lt)1XM4)J2P##*9Vo@IW0;LRV5)x}@Eb_^XVD zN8$&6fIrH3Zi|H_nx=E-&g0CPJJbI9{o^NqRXh)405eM52_cHv5auwiw1g51A>75i z5RynKkq%R2l$KT6qKPFFIf1~zvcPEBZSCcpjuilGWQ$amgP7m zNFe-*7sqXPTFjHBX47tMIaa%Ew*@NKU^-UCvpl=t2k)}DVk3Hvp#7SO%L?7{;fmX7 z?bVkYtu5An#vV~KSXBsP?I zf}+Hx3Ve!Z?C%0oV50xH*GUN^{_DF!SU?;J-1Ilx?~H>Q>!Yag^*zix5Qu;9C;pvo z%$Ky?a5&=aQdwZwA5RZUjQXN4X21;3B{fmvV(eILK4p|!RQo^3Mo2{xA&N;- z;+!ybf%uhpQAX{3hqLB?e~QfID;qw$hlzFRg%azhBS!EutBBdtZuV2xT4^C%&K gw^+b?{u_Km3ZIeYTTYX10Jqr+n91E`OSdrf2cHJ?UjP6A literal 0 HcmV?d00001 diff --git a/src/core/org/luaj/vm/LDouble.java b/src/core/org/luaj/vm/LDouble.java index af82c564..3e00c5e2 100644 --- a/src/core/org/luaj/vm/LDouble.java +++ b/src/core/org/luaj/vm/LDouble.java @@ -47,7 +47,7 @@ public class LDouble extends LNumber { int iz = (int) m_value; if ( iz == m_value ) return iz; long bits = Double.doubleToLongBits( m_value ); - return ( (int) bits >> 32 ) + ( (int) bits ); + return ((int) (bits >> 32)) + ((int)bits); } } diff --git a/src/test/java/org/luaj/compiler/SimpleTests.java b/src/test/java/org/luaj/compiler/SimpleTests.java index 18a0df6e..a20cb9d3 100644 --- a/src/test/java/org/luaj/compiler/SimpleTests.java +++ b/src/test/java/org/luaj/compiler/SimpleTests.java @@ -8,6 +8,8 @@ import junit.framework.TestCase; import org.luaj.TestPlatform; import org.luaj.lib.BaseLib; import org.luaj.vm.LClosure; +import org.luaj.vm.LDouble; +import org.luaj.vm.LInteger; import org.luaj.vm.LPrototype; import org.luaj.vm.LValue; import org.luaj.vm.LuaState; @@ -85,4 +87,24 @@ public class SimpleTests extends TestCase { String s = "print( 1 == b and b )\n"; doTest( s ); } + + private static final int [] samehash = { 0, 1, -1, 2, -2, 4, 8, 16, 32, Integer.MAX_VALUE, Integer.MIN_VALUE }; + private static final double [] diffhash = { .5, 1, 1.5, 1, .5, 1.5, 1.25, 2.5 }; + + public void testDoubleHashCode() { + for ( int i=0; i