mirror of
https://github.com/corda/corda.git
synced 2025-01-01 02:36:44 +00:00
9411c223af
commit fabf4dd0cca19118c59c925f572a655d1d9c4092
Author: Joel Dice <joel.dice@gmail.com>
Date: Sun Jul 9 17:36:06 2017 -0600
reserve a little more stack space for worst-case lambda expressions
commit 24b95016dd6f62fa4a82312310fcb5c55cc22f93
Author: Joel Dice <joel.dice@gmail.com>
Date: Sun Jul 9 17:33:39 2017 -0600
support constructor references
commit a329416f4f37840d2a5d7976874585413cd4c6af
Author: Joel Dice <joel.dice@gmail.com>
Date: Sun Jul 9 17:11:19 2017 -0600
normalize class name in Classes.forName
This fixes a Tomcat classloading issue when using the OpenJDK class library.
commit ecafdf40baf2f3cde4835620e9af4380b1081fe7
Author: Joel Dice <joel.dice@gmail.com>
Date: Sun Jul 9 16:58:04 2017 -0600
fix some lambda bugs
commit 552dfd779baf077cc6445b4042588e4b6e34f3d2
Merge: 63dda56 aa2f25d
Author: Joel Dice <joel.dice@gmail.com>
Date: Sat Jul 8 10:57:59 2017 -0600
Merge remote-tracking branch 'corda/chrisr3-invoking-extension'
commit 63dda560f8648a793bdb609879076ab729b17e19
Merge: 3ec983d e589f10
Author: Joel Dice <joel.dice@gmail.com>
Date: Sat Jul 8 10:54:53 2017 -0600
Merge pull request #538 from dicej/master
avoid definePackage infinite recursion with OpenJDK class library
commit aa2f25da404b2fc168a672392df939b52ea250ab
Author: Chris Rankin <chris.rankin@r3.com>
Date: Mon Jul 3 17:26:41 2017 +0100
Add support for "invokevirtual" and "invokeinterface".
The "invokeinterface" support seems to be broken for lambdas that require native types to be boxed/unboxed.
commit e589f105741ea36d07bba1e300c7ed69c33a22d1
Author: Joel Dice <joel.dice@gmail.com>
Date: Sun Jul 2 19:43:36 2017 -0600
avoid definePackage infinite recursion with OpenJDK class library
commit 3ec983dd82e01b36fb96411df345a54119a68181
Merge: 6f6bdd7 78881d4
Author: Joel Dice <joel.dice@gmail.com>
Date: Tue Jun 13 09:50:49 2017 -0600
Merge pull request #534 from lwahlmeier/fileGetParentFile
fixed File.getParent when getting parent returns root
commit 78881d427cd474c14f5ce94484f5253de564074b
Author: Luke Wahlmeier <lwahlmeier@gmail.com>
Date: Tue May 30 13:42:56 2017 -0600
fixed File.getParent when getting parent returns root
commit 6f6bdd7d5c171e0c4c807d0a4f3aa676461307de
Merge: 8b694f9 b22343e
Author: Joel Dice <joel.dice@gmail.com>
Date: Mon May 22 12:58:09 2017 -0600
Merge pull request #529 from mikehearn/proguard-fixes
Some fixes to the ProGuard files
commit 8b694f961496f2d47a377254f61153b0338335fd
Merge: dfae414 61c82e1
Author: Joel Dice <joel.dice@gmail.com>
Date: Mon May 22 12:57:54 2017 -0600
Merge pull request #531 from mikehearn/fileinputstream-compat
FileInputStream has wrapped some more native methods
commit dfae414da8da57049076c16c43472cc32bdeb07c
Merge: 16dd804 d7a6f68
Author: Joel Dice <joel.dice@gmail.com>
Date: Mon May 22 12:57:38 2017 -0600
Merge pull request #532 from mikehearn/use-symlinks
Symlink OpenJDK files rather than hardlink
commit d7a6f68235b2d42c03aba36f1bb48d173adb4fa6
Author: Mike Hearn <mike@plan99.net>
Date: Sun May 14 21:42:06 2017 +0200
Symlink OpenJDK files rather than hardlink
commit 61c82e1070d857bcdc7a4f086d13836d9608da00
Author: Mike Hearn <mike@plan99.net>
Date: Sun May 14 21:40:52 2017 +0200
FileInputStream has wrapped some more native methods in recent OpenJDK releases
commit b22343eb6731f1df2631635e2fcf9d51817273fe
Author: Mike Hearn <mike@plan99.net>
Date: Sun May 14 21:38:09 2017 +0200
Some fixes to the ProGuard files
commit 16dd804f392168497fa17ab682978f938e291bfb
Merge: e2d3270 19deadd
Author: Joel Dice <joel.dice@gmail.com>
Date: Wed Mar 22 16:00:30 2017 -0600
Merge pull request #526 from MaartenR/arrays-binsearch
Added integer array binary search methods to Arrays class
commit e2d3270fe8e92203b6107b95f862ff5bd245c37a
Merge: dee99d6 545b9c8
Author: Joel Dice <joel.dice@gmail.com>
Date: Wed Mar 22 16:00:20 2017 -0600
Merge pull request #527 from MaartenR/integer-nolz
Added numberOfLeadingZeros method to Integer class
commit 545b9c8732a6ea026285b1edf976a79eb541ef2e
Author: Maarten Raaphorst <mwraaphorst@gmail.com>
Date: Tue Mar 14 11:23:36 2017 +0100
Tested more negative numbers
commit b45bcf09535daef99ed31451ae55db8bec83164c
Author: Maarten Raaphorst <mwraaphorst@gmail.com>
Date: Tue Mar 14 10:47:27 2017 +0100
Added unit test for numberOfLeadingZeros method of the Integer class
commit 19deadd36bbfc02a8c13e6d91963e41f5125057f
Author: Maarten Raaphorst <mwraaphorst@gmail.com>
Date: Mon Mar 13 12:19:17 2017 +0100
Fixed mistake with end index being exclusive
commit 7271c0b7077ae3bef473e036aa0f0298a9eb0601
Author: Maarten Raaphorst <mwraaphorst@gmail.com>
Date: Fri Mar 10 11:17:13 2017 +0100
Added numberOfLeadingZeros method to Integer class
commit 023bb69acd071348f29cd43ff954d3dcf2856c7c
Author: Maarten Raaphorst <mwraaphorst@gmail.com>
Date: Thu Mar 9 13:43:03 2017 +0100
Added integer array binary search methods to Arrays class
commit dee99d6dd60b743a870d1a2c58183649c8a6449c
Merge: f7a651d
6c90953
Author: Joel Dice <joel.dice@gmail.com>
Date: Wed Mar 1 08:39:32 2017 -0700
Merge pull request #525 from MaartenR/master
Added functionality to HttpURLConnection for obtaining content length
commit 6c90953745be5451ac9a028639f94e3fcc43d7f3
Author: Maarten Raaphorst <raaphorst@serviceplanet.nl>
Date: Wed Mar 1 14:19:51 2017 +0100
Made http headers case insensitive
commit 2c3a82d2b387251a8932ddb6575e718c2c1785a7
Author: Maarten Raaphorst <mwraaphorst@gmail.com>
Date: Fri Feb 3 05:42:56 2017 -0800
Added functionality to HttpURLConnection for obtaining content length
371 lines
10 KiB
Java
371 lines
10 KiB
Java
public class Integers {
|
|
private static void expect(boolean v) {
|
|
if (! v) throw new RuntimeException();
|
|
}
|
|
|
|
private static int gcd(int m, int n) {
|
|
int temp;
|
|
m = Math.abs(m);
|
|
n = Math.abs(n);
|
|
if (m < n) {
|
|
temp = m;
|
|
m = n;
|
|
n = temp;
|
|
}
|
|
while (n != 0) {
|
|
temp = m;
|
|
m = n;
|
|
n = temp % n;
|
|
}
|
|
return m;
|
|
}
|
|
|
|
private static void testNumberOfLeadingZeros() {
|
|
expect(Integer.numberOfLeadingZeros(Integer.MAX_VALUE) == 1);
|
|
expect(Integer.numberOfLeadingZeros(0) == 32);
|
|
|
|
int positive = 1;
|
|
int negative = Integer.MIN_VALUE;
|
|
for(int i = 0; i < 32; i++) {
|
|
expect(Integer.numberOfLeadingZeros(positive) == 32 - i - 1);
|
|
positive <<= 1;
|
|
|
|
expect(Integer.numberOfLeadingZeros(negative) == 0);
|
|
negative += ((int)Math.pow(2, i));
|
|
}
|
|
|
|
for(int i = 0; i < 99999; i++) {
|
|
String binary = "";
|
|
int nolz = 0;
|
|
boolean nolzFound = false;
|
|
for(int j = 0; j < 31; j++) {
|
|
double r = Math.random();
|
|
if(r < 0.5) {
|
|
binary += "0";
|
|
if(!nolzFound) {
|
|
nolz++;
|
|
}
|
|
} else {
|
|
binary += "1";
|
|
nolzFound = true;
|
|
}
|
|
}
|
|
|
|
double r = Math.random();
|
|
if(r < 0.5) {
|
|
// positive
|
|
binary = "0" + binary;
|
|
nolz++;
|
|
expect(Integer.numberOfLeadingZeros(Integer.parseInt(binary, 2)) == nolz);
|
|
} else {
|
|
// negative
|
|
expect(Integer.numberOfLeadingZeros(-Integer.parseInt(binary, 2)) == 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
{ int foo = 1028;
|
|
foo -= 1023;
|
|
expect(foo == 5);
|
|
}
|
|
|
|
expect(gcd(12, 4) == 4);
|
|
|
|
{ int a = 2;
|
|
int b = 2;
|
|
int c = a + b;
|
|
}
|
|
|
|
{ int a = 2;
|
|
int c = a + a;
|
|
}
|
|
|
|
{ int a = -5;
|
|
int b = 2;
|
|
expect(a >> b == -5 >> 2);
|
|
expect(a >>> b == -5 >>> 2);
|
|
expect(a << b == -5 << 2);
|
|
expect(a + b == -5 + 2);
|
|
expect(a - b == -5 - 2);
|
|
expect(a * b == -5 * 2);
|
|
expect(a / b == -5 / 2);
|
|
expect(a % b == -5 % 2);
|
|
expect((a & b) == (-5 & 2));
|
|
expect((a | b) == (-5 | 2));
|
|
expect((a ^ b) == (-5 ^ 2));
|
|
expect(-a == 5);
|
|
expect(~a == ~-5);
|
|
|
|
a = 5;
|
|
b = 2;
|
|
expect(a >> b == 5 >> 2);
|
|
expect(a >>> b == 5 >>> 2);
|
|
expect(a << b == 5 << 2);
|
|
expect(a + b == 5 + 2);
|
|
expect(a - b == 5 - 2);
|
|
expect(a * b == 5 * 2);
|
|
expect(a / b == 5 / 2);
|
|
expect(a % b == 5 % 2);
|
|
expect((a & b) == (5 & 2));
|
|
expect((a | b) == (5 | 2));
|
|
expect((a ^ b) == (5 ^ 2));
|
|
expect(-a == -5);
|
|
expect(~a == ~5);
|
|
}
|
|
|
|
{ int a = -5;
|
|
expect(a >> 2 == -5 >> 2);
|
|
expect(a >>> 2 == -5 >>> 2);
|
|
expect(a << 2 == -5 << 2);
|
|
expect(a + 2 == -5 + 2);
|
|
expect(a - 2 == -5 - 2);
|
|
expect(a * 2 == -5 * 2);
|
|
expect(a / 2 == -5 / 2);
|
|
expect(a % 2 == -5 % 2);
|
|
expect((a & 2) == (-5 & 2));
|
|
expect((a | 2) == (-5 | 2));
|
|
expect((a ^ 2) == (-5 ^ 2));
|
|
|
|
a = 5;
|
|
expect(a >> 2 == 5 >> 2);
|
|
expect(a >>> 2 == 5 >>> 2);
|
|
expect(a << 2 == 5 << 2);
|
|
expect(a + 2 == 5 + 2);
|
|
expect(a - 2 == 5 - 2);
|
|
expect(a * 2 == 5 * 2);
|
|
expect(a / 2 == 5 / 2);
|
|
expect(a % 2 == 5 % 2);
|
|
expect((a & 2) == (5 & 2));
|
|
expect((a | 2) == (5 | 2));
|
|
expect((a ^ 2) == (5 ^ 2));
|
|
}
|
|
|
|
{ int a = -5;
|
|
int b = 1234567;
|
|
expect(a + b == -5 + 1234567);
|
|
expect(a - b == -5 - 1234567);
|
|
expect(a * b == -5 * 1234567);
|
|
expect(a / b == -5 / 1234567);
|
|
expect(a % b == -5 % 1234567);
|
|
expect((a & b) == (-5 & 1234567));
|
|
expect((a | b) == (-5 | 1234567));
|
|
expect((a ^ b) == (-5 ^ 1234567));
|
|
|
|
a = 5;
|
|
b = 1234567;
|
|
expect(a + b == 5 + 1234567);
|
|
expect(a - b == 5 - 1234567);
|
|
expect(a * b == 5 * 1234567);
|
|
expect(a / b == 5 / 1234567);
|
|
expect(a % b == 5 % 1234567);
|
|
expect((a & b) == (5 & 1234567));
|
|
expect((a | b) == (5 | 1234567));
|
|
expect((a ^ b) == (5 ^ 1234567));
|
|
}
|
|
|
|
{ int a = -5;
|
|
expect(a + 1234567 == -5 + 1234567);
|
|
expect(a - 1234567 == -5 - 1234567);
|
|
expect(a * 1234567 == -5 * 1234567);
|
|
expect(a / 1234567 == -5 / 1234567);
|
|
expect(a % 1234567 == -5 % 1234567);
|
|
expect((a & 1234567) == (-5 & 1234567));
|
|
expect((a | 1234567) == (-5 | 1234567));
|
|
expect((a ^ 1234567) == (-5 ^ 1234567));
|
|
|
|
a = 5;
|
|
expect(a + 1234567 == 5 + 1234567);
|
|
expect(a - 1234567 == 5 - 1234567);
|
|
expect(a * 1234567 == 5 * 1234567);
|
|
expect(a / 1234567 == 5 / 1234567);
|
|
expect(a % 1234567 == 5 % 1234567);
|
|
expect((a & 1234567) == (5 & 1234567));
|
|
expect((a | 1234567) == (5 | 1234567));
|
|
expect((a ^ 1234567) == (5 ^ 1234567));
|
|
}
|
|
|
|
{ int a = -1234567;
|
|
int b = 2;
|
|
expect(a >> b == -1234567 >> 2);
|
|
expect(a >>> b == -1234567 >>> 2);
|
|
expect(a << b == -1234567 << 2);
|
|
expect(a + b == -1234567 + 2);
|
|
expect(a - b == -1234567 - 2);
|
|
expect(a * b == -1234567 * 2);
|
|
expect(a / b == -1234567 / 2);
|
|
expect(a % b == -1234567 % 2);
|
|
expect((a & b) == (-1234567 & 2));
|
|
expect((a | b) == (-1234567 | 2));
|
|
expect((a ^ b) == (-1234567 ^ 2));
|
|
expect(-a == 1234567);
|
|
expect(~a == ~-1234567);
|
|
|
|
a = 1234567;
|
|
b = 2;
|
|
expect(a >> b == 1234567 >> 2);
|
|
expect(a >>> b == 1234567 >>> 2);
|
|
expect(a << b == 1234567 << 2);
|
|
expect(a + b == 1234567 + 2);
|
|
expect(a - b == 1234567 - 2);
|
|
expect(a * b == 1234567 * 2);
|
|
expect(a / b == 1234567 / 2);
|
|
expect(a % b == 1234567 % 2);
|
|
expect((a & b) == (1234567 & 2));
|
|
expect((a | b) == (1234567 | 2));
|
|
expect((a ^ b) == (1234567 ^ 2));
|
|
expect(-a == -1234567);
|
|
expect(~a == ~1234567);
|
|
}
|
|
|
|
{ int a = -1234567;
|
|
expect(a >> 2 == -1234567 >> 2);
|
|
expect(a >>> 2 == -1234567 >>> 2);
|
|
expect(a << 2 == -1234567 << 2);
|
|
expect(a + 2 == -1234567 + 2);
|
|
expect(a - 2 == -1234567 - 2);
|
|
expect(a * 2 == -1234567 * 2);
|
|
expect(a / 2 == -1234567 / 2);
|
|
expect(a % 2 == -1234567 % 2);
|
|
expect((a & 2) == (-1234567 & 2));
|
|
expect((a | 2) == (-1234567 | 2));
|
|
expect((a ^ 2) == (-1234567 ^ 2));
|
|
|
|
a = 1234567;
|
|
expect(a >> 2 == 1234567 >> 2);
|
|
expect(a >>> 2 == 1234567 >>> 2);
|
|
expect(a << 2 == 1234567 << 2);
|
|
expect(a + 2 == 1234567 + 2);
|
|
expect(a - 2 == 1234567 - 2);
|
|
expect(a * 2 == 1234567 * 2);
|
|
expect(a / 2 == 1234567 / 2);
|
|
expect(a % 2 == 1234567 % 2);
|
|
expect((a & 2) == (1234567 & 2));
|
|
expect((a | 2) == (1234567 | 2));
|
|
expect((a ^ 2) == (1234567 ^ 2));
|
|
}
|
|
|
|
{ int a = -1234567;
|
|
int b = 1234567;
|
|
expect(a + b == -1234567 + 1234567);
|
|
expect(a - b == -1234567 - 1234567);
|
|
expect(a * b == -1234567 * 1234567);
|
|
expect(a / b == -1234567 / 1234567);
|
|
expect(a % b == -1234567 % 1234567);
|
|
expect((a & b) == (-1234567 & 1234567));
|
|
expect((a | b) == (-1234567 | 1234567));
|
|
expect((a ^ b) == (-1234567 ^ 1234567));
|
|
|
|
a = 1234567;
|
|
b = 1234567;
|
|
expect(a + b == 1234567 + 1234567);
|
|
expect(a - b == 1234567 - 1234567);
|
|
expect(a * b == 1234567 * 1234567);
|
|
expect(a / b == 1234567 / 1234567);
|
|
expect(a % b == 1234567 % 1234567);
|
|
expect((a & b) == (1234567 & 1234567));
|
|
expect((a | b) == (1234567 | 1234567));
|
|
expect((a ^ b) == (1234567 ^ 1234567));
|
|
}
|
|
|
|
{ int a = -1234567;
|
|
expect(a + 1234567 == -1234567 + 1234567);
|
|
expect(a - 1234567 == -1234567 - 1234567);
|
|
expect(a * 1234567 == -1234567 * 1234567);
|
|
expect(a / 1234567 == -1234567 / 1234567);
|
|
expect(a % 1234567 == -1234567 % 1234567);
|
|
expect((a & 1234567) == (-1234567 & 1234567));
|
|
expect((a | 1234567) == (-1234567 | 1234567));
|
|
expect((a ^ 1234567) == (-1234567 ^ 1234567));
|
|
|
|
a = 1234567;
|
|
expect(a + 1234567 == 1234567 + 1234567);
|
|
expect(a - 1234567 == 1234567 - 1234567);
|
|
expect(a * 1234567 == 1234567 * 1234567);
|
|
expect(a / 1234567 == 1234567 / 1234567);
|
|
expect(a % 1234567 == 1234567 % 1234567);
|
|
expect((a & 1234567) == (1234567 & 1234567));
|
|
expect((a | 1234567) == (1234567 | 1234567));
|
|
expect((a ^ 1234567) == (1234567 ^ 1234567));
|
|
}
|
|
|
|
{ int get_buffer = 2144642881;
|
|
int bits_left = 30;
|
|
int l = 9;
|
|
int code = (((get_buffer >> (bits_left -= (l)))) & ((1<<(l))-1));
|
|
expect(code == 510);
|
|
}
|
|
|
|
{ int width = 8;
|
|
int height = 8;
|
|
int depth = 24;
|
|
int scanlinePad = 4;
|
|
|
|
int bytesPerLine = (((width * depth + 7) / 8) + (scanlinePad - 1))
|
|
/ scanlinePad * scanlinePad;
|
|
expect(bytesPerLine == 24);
|
|
}
|
|
|
|
{ int y = -11760768;
|
|
expect((y + 0x8000) == (-11760768 + 0x8000)); }
|
|
|
|
expect(Math.min(796, 1069) == 796);
|
|
|
|
{ int b = 1;
|
|
expect((b << 32) == 1); }
|
|
|
|
{ int b = 0xFFFFFFFF;
|
|
expect((b >>> -1) == 1); }
|
|
|
|
{ int b = 0x10000000;
|
|
expect((b >> -31) == 0x8000000); }
|
|
|
|
{ int b = 1; int s = 32;
|
|
expect((b << s) == 1); }
|
|
|
|
{ int b = 0xFFFFFFFF; int s = -1;
|
|
expect((b >>> s) == 1); }
|
|
|
|
{ int b = 0x10000000; int s = -31;
|
|
expect((b >> s) == 0x8000000); }
|
|
|
|
{ int b = 0xBE;
|
|
expect((b & 0xFF) == 0xBE); }
|
|
|
|
{ int b = 0xBE;
|
|
expect((b >>> 0) == 0xBE); }
|
|
|
|
{ int b = 0xBE;
|
|
expect((b >> 0) == 0xBE); }
|
|
|
|
{ int b = 0xBE;
|
|
expect((b << 0) == 0xBE); }
|
|
|
|
{ int b = 0xBE;
|
|
expect(((b >>> 0) & 0xFF) == 0xBE); }
|
|
|
|
{ int b = 0xBE; int x = 0xFF;
|
|
expect((b & x) == 0xBE); }
|
|
|
|
{ int b = 0xBE; int x = 0;
|
|
expect((b >>> x) == 0xBE); }
|
|
|
|
{ int b = 0xBE; int x = 0;
|
|
expect((b >> x) == 0xBE); }
|
|
|
|
{ int b = 0xBE; int x = 0;
|
|
expect((b << x) == 0xBE); }
|
|
|
|
{ int b = 0xBE; int x = 0; int y = 0xFF;
|
|
expect(((b >>> x) & y) == 0xBE); }
|
|
|
|
expect(123 == Integer.decode("123").intValue());
|
|
expect(-123 == Integer.decode("-123").intValue());
|
|
expect(-83 == Integer.decode("-0123").intValue());
|
|
expect(-291 == Integer.decode("-0x123").intValue());
|
|
expect(291 == Integer.decode("#123").intValue());
|
|
|
|
testNumberOfLeadingZeros();
|
|
}
|
|
}
|