diff --git a/CHANGES.current b/CHANGES.current index 5e9f9a866..f3976c5f4 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -5,6 +5,12 @@ See the RELEASENOTES file for a summary of changes in each release. Version 3.0.9 (in progress) =========================== +2016-03-31: wsfulton + [Java] unsigned long long marshalling improvements when a negative number + is passed from Java to C. A cast to signed long long in the C layer will now + result in the expected value. No change for positive numbers passed to C. + Fixes #623. + 2016-03-22: alexwarg [Lua] #398 Fix lua __getitem + inheritance The new handling of classes in Lua (not merging methods into the derived classes) diff --git a/Examples/test-suite/java/long_long_runme.java b/Examples/test-suite/java/long_long_runme.java index 3a967f7a7..76aa0705d 100644 --- a/Examples/test-suite/java/long_long_runme.java +++ b/Examples/test-suite/java/long_long_runme.java @@ -3,7 +3,8 @@ // unsigned long long types map correctly to long and BigInteger respectively. import long_long.*; -import java.math.*; +import java.math.BigInteger; +import java.util.ArrayList; public class long_long_runme { @@ -54,12 +55,57 @@ public class long_long_runme { check_ull(testNumber); testNumber = testNumber.add(BigInteger.ONE); } - + try { long_long.setUll(null); throw new RuntimeException("null check failed"); } catch (NullPointerException e) { } + + // UnsignedToSigned - checks that a cast from unsigned long long to long long in C + // gives expected value (including -ve numbers) + + long[] nums = { + 0x00, + 0xFF, 0x80, 0x7F, 0x01, + -0xFF, -0x80, -0x7F, -0x01, + 0x100, 0x10000, + -0x100, -0x10000, + 0xFFFF, 0xFF80, 0xFF7F, 0xFF01, 0xFF00, + -0xFFFF, -0xFF80, -0xFF7F, -0xFF01, -0xFF00, + 0x7FFF, 0x7F80, 0x7F7F, 0x7F01, 0x7F00, + -0x7FFF, -0x7F80, -0x7F7F, -0x7F01, -0x7F00, + 0x80FF, 0x8080, 0x807F, 0x8001, 0x8000, + -0x80FF, -0x8080, -0x807F, -0x8001, -0x8000, + Integer.MAX_VALUE, Integer.MIN_VALUE, + Integer.MAX_VALUE+1, Integer.MIN_VALUE-1, + Long.MAX_VALUE, Long.MIN_VALUE, + }; + + ArrayList bigIntegers = new ArrayList(); + for (int i=0; i 0) { + $1 = ($1_type)(signed char)bae[0]; + for(i=1; i 0) { + $result = ($1_type)(signed char)bae[0]; + for(i=1; i 0) { + temp = ($*1_ltype)(signed char)bae[0]; + for(i=1; i 0) { + temp = ($*1_ltype)(signed char)bae[0]; + for(i=1; i 0) { + temp = ($*1_ltype)(signed char)bae[0]; + for(i=1; i 0) { + temp = ($*1_ltype)(signed char)bae[0]; + for(i=1; i