Pārlūkot izejas kodu

[tests] add more Int64 tests

closes #10662
Simon Krajewski 3 gadi atpakaļ
vecāks
revīzija
3cdd184835
1 mainītis faili ar 281 papildinājumiem un 232 dzēšanām
  1. 281 232
      tests/unit/src/unit/TestInt64.hx

+ 281 - 232
tests/unit/src/unit/TestInt64.hx

@@ -1,8 +1,9 @@
 package unit;
 package unit;
 
 
-using haxe.Int64;
 import haxe.Int64.*;
 import haxe.Int64.*;
 
 
+using haxe.Int64;
+
 class TestInt64 extends Test {
 class TestInt64 extends Test {
 
 
 	public function testMake() {
 	public function testMake() {
@@ -61,20 +62,19 @@ class TestInt64 extends Test {
 
 
 		// This fails because the first division fails:
 		// This fails because the first division fails:
 		var ten = haxe.Int64.make(0, 10);
 		var ten = haxe.Int64.make(0, 10);
-		var modulus = haxe.Int64.divMod( z, ten ).modulus.low;
-		eq( modulus, 0 );
+		var modulus = haxe.Int64.divMod(z, ten).modulus.low;
+		eq(modulus, 0);
 
 
 		// The first division failed because of negate:
 		// The first division failed because of negate:
-		eq( (-z).low, -2147483648 );
-		eq( (-z).high, 2147483647 );
+		eq((-z).low, -2147483648);
+		eq((-z).high, 2147483647);
 	}
 	}
 
 
 	// Some tests of how it generates Int64 when used as Null<Int64> or as type parameters
 	// Some tests of how it generates Int64 when used as Null<Int64> or as type parameters
-	function testGen()
-	{
+	function testGen() {
 		var arr:Array<Int64> = [];
 		var arr:Array<Int64> = [];
 		arr.push(1);
 		arr.push(1);
-		arr.push(Int64.make(0xFFFFFFFF,0x80000000));
+		arr.push(Int64.make(0xFFFFFFFF, 0x80000000));
 		eq(arr[0].high, 0);
 		eq(arr[0].high, 0);
 		eq(arr[0].low, 1);
 		eq(arr[0].low, 1);
 		eq(arr[1].high, 0xFFFFFFFF);
 		eq(arr[1].high, 0xFFFFFFFF);
@@ -89,59 +89,62 @@ class TestInt64 extends Test {
 		eq(n.low, 0xefefefef);
 		eq(n.low, 0xefefefef);
 	}
 	}
 
 
-	function tryOverflow( a : Int64 )
-	{
+	function tryOverflow(a:Int64) {
 		a.toInt();
 		a.toInt();
 	}
 	}
 
 
 	public function testIncrement() {
 	public function testIncrement() {
-		var a : Int64, b : Int64, c : Int64;
+		var a:Int64, b:Int64, c:Int64;
 
 
 		// Int64 should act as a value type and be immutable.
 		// Int64 should act as a value type and be immutable.
 		// Increment ops should swap `this` to a new Int64 object.
 		// Increment ops should swap `this` to a new Int64 object.
-		a = 0; b = a;
+		a = 0;
+		b = a;
 		a++;
 		a++;
 		f(a == b);
 		f(a == b);
 
 
-		a = 0; b = a;
+		a = 0;
+		b = a;
 		++a;
 		++a;
 		f(a == b);
 		f(a == b);
 
 
-		a = 0; b = a;
+		a = 0;
+		b = a;
 		a--;
 		a--;
 		f(a == b);
 		f(a == b);
 
 
-		a = 0; b = a;
+		a = 0;
+		b = a;
 		--a;
 		--a;
 		f(a == b);
 		f(a == b);
 
 
-		a = Int64.make(0,0xFFFFFFFF);
+		a = Int64.make(0, 0xFFFFFFFF);
 		b = a;
 		b = a;
-		c = Int64.make(1,0);
-		int64eq( a++, b );
-		int64eq( a--, c );
-		int64eq( ++a, c );
-		int64eq( --a, b );
+		c = Int64.make(1, 0);
+		int64eq(a++, b);
+		int64eq(a--, c);
+		int64eq(++a, c);
+		int64eq(--a, b);
 	}
 	}
 
 
 	public function testToString() {
 	public function testToString() {
-		var a : Int64;
+		var a:Int64;
 
 
 		// Issue #903
 		// Issue #903
 		a = 0;
 		a = 0;
-		eq( Std.string( a ), "0" );
+		eq(Std.string(a), "0");
 
 
 		a = 156;
 		a = 156;
-		eq( '$a', "156" );
+		eq('$a', "156");
 
 
 		a = -1;
 		a = -1;
-		eq( '$a', "-1" );
+		eq('$a', "-1");
 
 
-		a = Int64.make(0xFFFFFFFE,0);
-		eq( a.toStr(), "-8589934592" );
+		a = Int64.make(0xFFFFFFFE, 0);
+		eq(a.toStr(), "-8589934592");
 
 
-		a = Int64.make(1,1);
-		eq( a.toStr(), "4294967297" );
+		a = Int64.make(1, 1);
+		eq(a.toStr(), "4294967297");
 
 
 		// set a to 2^63 (overflows to the smallest negative number)
 		// set a to 2^63 (overflows to the smallest negative number)
 		a = Int64.ofInt(2);
 		a = Int64.ofInt(2);
@@ -149,259 +152,273 @@ class TestInt64 extends Test {
 			a = Int64.mul(a, 2);
 			a = Int64.mul(a, 2);
 		}
 		}
 
 
-		eq( Int64.add(a, -1).toStr(), "9223372036854775807" ); // largest positive
-		eq( Int64.add(a, 1).toStr(), "-9223372036854775807" ); // smallest negative - 1
-		eq( a.toStr(), "-9223372036854775808" ); // smallest negative
+		eq(Int64.add(a, -1).toStr(), "9223372036854775807"); // largest positive
+		eq(Int64.add(a, 1).toStr(), "-9223372036854775807"); // smallest negative - 1
+		eq(a.toStr(), "-9223372036854775808"); // smallest negative
 	}
 	}
 
 
 	public function testComparison() {
 	public function testComparison() {
-		var a : Int64, b : Int64;
-		a = 1; b = 1;
-		t( a == b ); f( a != b );
-		t( a <= b ); f( a < b );
-		t( a >= b ); f( a > b );
-		eq( a.compare(b), 0 );
-		eq( a.ucompare(b), 0 );
+		var a:Int64, b:Int64;
+		a = 1;
+		b = 1;
+		t(a == b);
+		f(a != b);
+		t(a <= b);
+		f(a < b);
+		t(a >= b);
+		f(a > b);
+		eq(a.compare(b), 0);
+		eq(a.ucompare(b), 0);
 
 
 		a = -10;
 		a = -10;
 		b = -15;
 		b = -15;
-		f( a == b ); t( a != b );
-		f( a <= b ); f( a < b );
-		t( a >= b ); t( a > b );
-		t( a.compare(b) > 0 );
-		t( a.ucompare(b) > 0 );
-
-		a = Int64.make(0,0);
-		b = Int64.make(1,0);
-		f( a == b ); t( a != b );
-		t( a <= b ); t( a < b );
-		f( a >= b ); f( a > b );
-		t( a.compare(b) < 0 );
-		t( a.ucompare(b) < 0 );
-
-		a = Int64.make(0x0FFFFFFF,0xFFFFFFFF);
-		b = Int64.make(0x80000000,0x80000000);
-		f( a == b ); t( a != b );
-		f( a <= b ); f( a < b );
-		t( a >= b ); t( a > b );
-		t( a.compare(b) > 0 );
-		t( a.ucompare(b) < 0 );
+		f(a == b);
+		t(a != b);
+		f(a <= b);
+		f(a < b);
+		t(a >= b);
+		t(a > b);
+		t(a.compare(b) > 0);
+		t(a.ucompare(b) > 0);
+
+		a = Int64.make(0, 0);
+		b = Int64.make(1, 0);
+		f(a == b);
+		t(a != b);
+		t(a <= b);
+		t(a < b);
+		f(a >= b);
+		f(a > b);
+		t(a.compare(b) < 0);
+		t(a.ucompare(b) < 0);
+
+		a = Int64.make(0x0FFFFFFF, 0xFFFFFFFF);
+		b = Int64.make(0x80000000, 0x80000000);
+		f(a == b);
+		t(a != b);
+		f(a <= b);
+		f(a < b);
+		t(a >= b);
+		t(a > b);
+		t(a.compare(b) > 0);
+		t(a.ucompare(b) < 0);
 
 
 		// Issue #2317
 		// Issue #2317
 		a = Int64.make(0xA, 0x828D97A8);
 		a = Int64.make(0xA, 0x828D97A8);
 		b = 0;
 		b = 0;
-		t( a.compare(b) > 0 );
-		t( a.ucompare(b) > 0 );
+		t(a.compare(b) > 0);
+		t(a.ucompare(b) > 0);
 
 
 		// Issue #2090
 		// Issue #2090
 		a = 0;
 		a = 0;
 		b = Int64.make(320, -2138504556);
 		b = Int64.make(320, -2138504556);
-		t( a.compare(b) < 0 );
-		t( a.ucompare(b) < 0 );
-
-
+		t(a.compare(b) < 0);
+		t(a.ucompare(b) < 0);
 	}
 	}
 
 
 	public function testAddition() {
 	public function testAddition() {
-		var a : Int64, b : Int64;
+		var a:Int64, b:Int64;
 
 
-		a = Int64.make(0,0x9E370301);
-		b = Int64.make(0,0xB0590000);
-		int64eq( a+b, Int64.make(0x1,0x4E900301) );
+		a = Int64.make(0, 0x9E370301);
+		b = Int64.make(0, 0xB0590000);
+		int64eq(a + b, Int64.make(0x1, 0x4E900301));
 
 
 		// negation
 		// negation
 		b = -a;
 		b = -a;
-		int64eq( a+b, 0 );
+		int64eq(a + b, 0);
 
 
 		// Int64+Int
 		// Int64+Int
-		int64eq( a+12345678, Int64.make(0,0x9EF3644F) );
+		int64eq(a + 12345678, Int64.make(0, 0x9EF3644F));
 
 
 		// Int+Int64
 		// Int+Int64
-		int64eq( 0xF0002222+a, Int64.make(0,0x8E372523) );
+		int64eq(0xF0002222 + a, Int64.make(0, 0x8E372523));
 	}
 	}
 
 
 	public function testSubtraction() {
 	public function testSubtraction() {
-		var a : Int64, b : Int64;
+		var a:Int64, b:Int64;
 
 
-		a = Int64.make(1,0);
-		b = Int64.make(0,1);
-		int64eq( a-b, Int64.make(0,0xFFFFFFFF) );
+		a = Int64.make(1, 0);
+		b = Int64.make(0, 1);
+		int64eq(a - b, Int64.make(0, 0xFFFFFFFF));
 
 
 		b = a;
 		b = a;
-		int64eq( a-b, 0 );
+		int64eq(a - b, 0);
 
 
-		b = Int64.make(0xFFFFFFFE,1);
-		int64eq( a-b, Int64.make(2,0xFFFFFFFF) );
+		b = Int64.make(0xFFFFFFFE, 1);
+		int64eq(a - b, Int64.make(2, 0xFFFFFFFF));
 
 
 		// Int64-Int
 		// Int64-Int
-		int64eq( a-12345678, Int64.make(0,0xFF439EB2) );
+		int64eq(a - 12345678, Int64.make(0, 0xFF439EB2));
 
 
 		// Int-Int64
 		// Int-Int64
-		int64eq( 12345678-a, Int64.make(0xFFFFFFFF,0x00BC614E) );
+		int64eq(12345678 - a, Int64.make(0xFFFFFFFF, 0x00BC614E));
 	}
 	}
 
 
 	public function testMultiplication() {
 	public function testMultiplication() {
-		var a : Int64, b : Int64;
+		var a:Int64, b:Int64;
 
 
 		a = Int64.make(0, 0x239B0E13);
 		a = Int64.make(0, 0x239B0E13);
 		b = Int64.make(0, 0x39193D1B);
 		b = Int64.make(0, 0x39193D1B);
-		int64eq( a*b, Int64.make(0x07F108C6,0x4E900301) );
+		int64eq(a * b, Int64.make(0x07F108C6, 0x4E900301));
 
 
 		a = Int64.make(0, 0xD3F9C9F4);
 		a = Int64.make(0, 0xD3F9C9F4);
 		b = Int64.make(0, 0xC865C765);
 		b = Int64.make(0, 0xC865C765);
-		int64eq( a*b, Int64.make(0xA5EF6C6E,0x1ACD5944) );
+		int64eq(a * b, Int64.make(0xA5EF6C6E, 0x1ACD5944));
 
 
 		var a = Int64.make(0xFFF21CDA, 0x972E8BA3);
 		var a = Int64.make(0xFFF21CDA, 0x972E8BA3);
 		var b = Int64.make(0x0098C29B, 0x81000001);
 		var b = Int64.make(0x0098C29B, 0x81000001);
-		int64eq( a*b, Int64.make(0xDDE8A2E8, 0xBA2E8BA3) );
+		int64eq(a * b, Int64.make(0xDDE8A2E8, 0xBA2E8BA3));
 
 
 		var a = Int64.make(0x81230000, 0x81230000);
 		var a = Int64.make(0x81230000, 0x81230000);
 		var b = Int64.make(0x90909090, 0x90909090);
 		var b = Int64.make(0x90909090, 0x90909090);
-		int64eq( a*b, Int64.make(0xF04C9C9C,0x53B00000) );
+		int64eq(a * b, Int64.make(0xF04C9C9C, 0x53B00000));
 
 
 		var a = Int64.make(0x00001000, 0x0020020E);
 		var a = Int64.make(0x00001000, 0x0020020E);
 		var b = Int64.make(0xBEDBEDED, 0xDEBDEBDE);
 		var b = Int64.make(0xBEDBEDED, 0xDEBDEBDE);
-		int64eq( a*b, Int64.make(0xC45C967D,0x25FAA224) );
+		int64eq(a * b, Int64.make(0xC45C967D, 0x25FAA224));
 
 
 		// Issue #1532
 		// Issue #1532
 		a = Int64.make(0xFFF21CDA, 0x972E8BA3);
 		a = Int64.make(0xFFF21CDA, 0x972E8BA3);
 		b = Int64.make(0x0098C29B, 0x81000001);
 		b = Int64.make(0x0098C29B, 0x81000001);
-		int64eq( a*b, Int64.make(0xDDE8A2E8, 0xBA2E8BA3) );
+		int64eq(a * b, Int64.make(0xDDE8A2E8, 0xBA2E8BA3));
 
 
 		// Int64*Int
 		// Int64*Int
 		a = Int64.make(0x01000000, 0x11131111);
 		a = Int64.make(0x01000000, 0x11131111);
-		int64eq( a*7, Int64.make(0x07000000,0x77857777) );
+		int64eq(a * 7, Int64.make(0x07000000, 0x77857777));
 
 
 		// Int*Int64
 		// Int*Int64
 		a = Int64.make(0x91111111, 0x11111111);
 		a = Int64.make(0x91111111, 0x11111111);
-		int64eq( 2*a, Int64.make(0x22222222,0x22222222) );
+		int64eq(2 * a, Int64.make(0x22222222, 0x22222222));
 	}
 	}
 
 
 	public function testDivision() {
 	public function testDivision() {
-		var a : Int64, b : Int64;
+		var a:Int64, b:Int64;
 
 
 		a = Int64.make(0x00002342, 0xDDEF3421);
 		a = Int64.make(0x00002342, 0xDDEF3421);
 		b = Int64.make(0x00000001, 0x00002000);
 		b = Int64.make(0x00000001, 0x00002000);
-		int64eq( a/b, 9026 );
-		int64eq( a%b, Int64.make(0,0xD986F421) );
+		int64eq(a / b, 9026);
+		int64eq(a % b, Int64.make(0, 0xD986F421));
 		var result = a.divMod(b);
 		var result = a.divMod(b);
-		int64eq( a/b, result.quotient );
-		int64eq( a%b, result.modulus );
+		int64eq(a / b, result.quotient);
+		int64eq(a % b, result.modulus);
 
 
 		a = Int64.make(0xF0120AAA, 0xAAAAAAA0);
 		a = Int64.make(0xF0120AAA, 0xAAAAAAA0);
 		b = Int64.make(0x00020001, 0x0FF02000);
 		b = Int64.make(0x00020001, 0x0FF02000);
-		int64eq( a/b, -2038 );
-		int64eq( a%b, Int64.make(0xFFFE131F,0x8C496AA0) );
+		int64eq(a / b, -2038);
+		int64eq(a % b, Int64.make(0xFFFE131F, 0x8C496AA0));
 		result = a.divMod(b);
 		result = a.divMod(b);
-		int64eq( a/b, result.quotient );
-		int64eq( a%b, result.modulus );
+		int64eq(a / b, result.quotient);
+		int64eq(a % b, result.modulus);
 
 
 		a = Int64.make(0, 2);
 		a = Int64.make(0, 2);
 		b = Int64.make(0xFFFFFFFF, 0xFAFAFAFA);
 		b = Int64.make(0xFFFFFFFF, 0xFAFAFAFA);
-		int64eq( a/b, 0 );
-		int64eq( a%b, 2 );
+		int64eq(a / b, 0);
+		int64eq(a % b, 2);
 		result = a.divMod(b);
 		result = a.divMod(b);
-		int64eq( a/b, result.quotient );
-		int64eq( a%b, result.modulus );
+		int64eq(a / b, result.quotient);
+		int64eq(a % b, result.modulus);
 
 
 		a = Int64.make(0x7ABADDAD, 0xDEADBEEF);
 		a = Int64.make(0x7ABADDAD, 0xDEADBEEF);
 		b = Int64.make(0xFFFFFFF1, 0x1FFFFFFF);
 		b = Int64.make(0xFFFFFFF1, 0x1FFFFFFF);
-		int64eq( a/b, Int64.make(0xFFFFFFFF,0xF7BFCEAE) );
-		int64eq( a%b, Int64.make(0x0000000A,0x166D8D9D) );
+		int64eq(a / b, Int64.make(0xFFFFFFFF, 0xF7BFCEAE));
+		int64eq(a % b, Int64.make(0x0000000A, 0x166D8D9D));
 		result = a.divMod(b);
 		result = a.divMod(b);
-		int64eq( a/b, result.quotient );
-		int64eq( a%b, result.modulus );
+		int64eq(a / b, result.quotient);
+		int64eq(a % b, result.modulus);
 
 
 		a = Int64.make(0x81234567, 0xFDECBA98);
 		a = Int64.make(0x81234567, 0xFDECBA98);
 		b = Int64.make(0xFFFFFEFF, 0xEEEEEEEE);
 		b = Int64.make(0xFFFFFEFF, 0xEEEEEEEE);
-		int64eq( a/b, 0x007ED446 );
-		int64eq( a%b, Int64.make(0xFFFFFFF5,0x31964D84) );
+		int64eq(a / b, 0x007ED446);
+		int64eq(a % b, Int64.make(0xFFFFFFF5, 0x31964D84));
 		result = a.divMod(b);
 		result = a.divMod(b);
-		int64eq( a/b, result.quotient );
-		int64eq( a%b, result.modulus );
+		int64eq(a / b, result.quotient);
+		int64eq(a % b, result.modulus);
 
 
 		// Int64/Int
 		// Int64/Int
-		int64eq( a/2, Int64.make(0xC091A2B3,0xFEF65D4C) );
-		int64eq( a%100, -68 );
+		int64eq(a / 2, Int64.make(0xC091A2B3, 0xFEF65D4C));
+		int64eq(a % 100, -68);
 
 
 		// Int/Int64
 		// Int/Int64
-		int64eq( 10001/a, 0 );
-		int64eq( 515151%a, 515151 );
+		int64eq(10001 / a, 0);
+		int64eq(515151 % a, 515151);
 	}
 	}
 
 
 	public function testBinaryOps() {
 	public function testBinaryOps() {
-		var a : Int64, b : Int64;
+		var a:Int64, b:Int64;
 
 
 		a = haxe.Int64.make(0x0FFFFFFF, 0x00000001);
 		a = haxe.Int64.make(0x0FFFFFFF, 0x00000001);
 		b = haxe.Int64.make(0, 0x8FFFFFFF);
 		b = haxe.Int64.make(0, 0x8FFFFFFF);
-		int64eq( a&b, 1 );
-		int64eq( a|b, Int64.make(0x0FFFFFFF, 0x8FFFFFFF) );
-		int64eq( a^b, Int64.make(0x0FFFFFFF, 0x8FFFFFFE) );
-		int64eq( ~a, Int64.make(0xF0000000, 0xFFFFFFFE) );
+		int64eq(a & b, 1);
+		int64eq(a | b, Int64.make(0x0FFFFFFF, 0x8FFFFFFF));
+		int64eq(a ^ b, Int64.make(0x0FFFFFFF, 0x8FFFFFFE));
+		int64eq(~a, Int64.make(0xF0000000, 0xFFFFFFFE));
 	}
 	}
 
 
 	public function testShifts() {
 	public function testShifts() {
-		var a : Int64;
+		var a:Int64;
 
 
 		a = 1 << 20;
 		a = 1 << 20;
-		int64eq( a, 0x100000 );
+		int64eq(a, 0x100000);
 
 
 		a <<= 20;
 		a <<= 20;
-		int64eq( a, Int64.make(0x100,0x00000000) );
+		int64eq(a, Int64.make(0x100, 0x00000000));
 
 
 		a = -1;
 		a = -1;
 		a >>= 4;
 		a >>= 4;
-		int64eq( a, -1 );
+		int64eq(a, -1);
 		a >>>= 4;
 		a >>>= 4;
-		int64eq( a, Int64.make(0x0FFFFFFF,0xFFFFFFFF) );
+		int64eq(a, Int64.make(0x0FFFFFFF, 0xFFFFFFFF));
 
 
 		// Ensure proper overflow behavior for shift operand
 		// Ensure proper overflow behavior for shift operand
-		a = Int64.make(1,1);
-		int64eq( a << 0, a );
-		int64eq( a >> 0, a );
-		int64eq( a >>> 0, a );
-		int64eq( a << 64, a );
-		int64eq( a >> 64, a );
-		int64eq( a >>> 64, a );
+		a = Int64.make(1, 1);
+		int64eq(a << 0, a);
+		int64eq(a >> 0, a);
+		int64eq(a >>> 0, a);
+		int64eq(a << 64, a);
+		int64eq(a >> 64, a);
+		int64eq(a >>> 64, a);
 	}
 	}
 
 
 	/** Tests that we have all of the classic Int64 interface. */
 	/** Tests that we have all of the classic Int64 interface. */
 	public function testBackwardsCompat() {
 	public function testBackwardsCompat() {
-		var a : Int64 = 32.ofInt();
-		var b : Int64 = (-4).ofInt();
-
-		f( a.eq(b) );
-		t( a.neq(b) );
-		int64eq( a.add(b), 28 );
-		int64eq( a.sub(b), 36 );
-		int64eq( a.div(b), -8 );
-		int64eq( a.mod(b), 0 );
-		int64eq( b.shl(1), -8 );
-		int64eq( b.shr(1), -2 );
-		int64eq( b.ushr(1), Int64.make(0x7FFFFFFF,0xFFFFFFFE) );
-		int64eq( a.and(b), 32 );
-		int64eq( a.or(b), -4 );
-		int64eq( a.xor(b), -36 );
-		int64eq( a.neg(), -32 );
-		f( a.isNeg() );  t( b.isNeg() );
-		f( a.isZero() ); f( b.isZero() );
-		t( a.compare(b) > 0 );
-		t( a.ucompare(b) < 0 );
-		int64eq( a.toInt(), 32 );
-		int64eq( b.toInt(), -4 );
+		var a:Int64 = 32.ofInt();
+		var b:Int64 = (-4).ofInt();
+
+		f(a.eq(b));
+		t(a.neq(b));
+		int64eq(a.add(b), 28);
+		int64eq(a.sub(b), 36);
+		int64eq(a.div(b), -8);
+		int64eq(a.mod(b), 0);
+		int64eq(b.shl(1), -8);
+		int64eq(b.shr(1), -2);
+		int64eq(b.ushr(1), Int64.make(0x7FFFFFFF, 0xFFFFFFFE));
+		int64eq(a.and(b), 32);
+		int64eq(a.or(b), -4);
+		int64eq(a.xor(b), -36);
+		int64eq(a.neg(), -32);
+		f(a.isNeg());
+		t(b.isNeg());
+		f(a.isZero());
+		f(b.isZero());
+		t(a.compare(b) > 0);
+		t(a.ucompare(b) < 0);
+		int64eq(a.toInt(), 32);
+		int64eq(b.toInt(), -4);
 	}
 	}
 
 
-	public function testCapture()
-	{
-		var a = Int64.make(0xFF00FF00,0xF0F0F0F0),
-			b = Int64.make(0xFF00FF00,0xF0F0F0F0);
+	public function testCapture() {
+		var a = Int64.make(0xFF00FF00, 0xF0F0F0F0),
+			b = Int64.make(0xFF00FF00, 0xF0F0F0F0);
 		eq(a.compare(b), 0);
 		eq(a.compare(b), 0);
 		eq(a.high, 0xFF00FF00);
 		eq(a.high, 0xFF00FF00);
-		function test() return Int64.compare(a,Int64.make(0xFF00FF00,0xF0F0F0F0));
-		eq(test(),0);
-		function testSet(v:Int64) b = v;
-		testSet( make(0xFF00FF00, 0xFF0) );
-		eq(b.compare(make(0xFF00FF00,0xFF0)),0);
+		function test()
+			return Int64.compare(a, Int64.make(0xFF00FF00, 0xF0F0F0F0));
+		eq(test(), 0);
+		function testSet(v:Int64)
+			b = v;
+		testSet(make(0xFF00FF00, 0xFF0));
+		eq(b.compare(make(0xFF00FF00, 0xFF0)), 0);
 		eq(b.high, 0xFF00FF00);
 		eq(b.high, 0xFF00FF00);
 	}
 	}
 
 
@@ -409,29 +426,28 @@ class TestInt64 extends Test {
 		var a = Int64.make(0, 0x239B0E13);
 		var a = Int64.make(0, 0x239B0E13);
 		var b = Int64.make(0, 0x39193D1B);
 		var b = Int64.make(0, 0x39193D1B);
 		var c = Int64.mul(a, b);
 		var c = Int64.mul(a, b);
-		eq( c.toStr(), "572248275467371265" );
+		eq(c.toStr(), "572248275467371265");
 		eq(Int64.toStr(c), "572248275467371265");
 		eq(Int64.toStr(c), "572248275467371265");
 
 
 		var a = Int64.make(0, 0xD3F9C9F4);
 		var a = Int64.make(0, 0xD3F9C9F4);
 		var b = Int64.make(0, 0xC865C765);
 		var b = Int64.make(0, 0xC865C765);
 		var c = Int64.mul(a, b);
 		var c = Int64.mul(a, b);
-		eq( c.toStr(), "-6489849317865727676" );
+		eq(c.toStr(), "-6489849317865727676");
 
 
 		var a = Int64.make(0, 0x9E370301);
 		var a = Int64.make(0, 0x9E370301);
 		var b = Int64.make(0, 0xB0590000);
 		var b = Int64.make(0, 0xB0590000);
 		var c = Int64.add(a, b);
 		var c = Int64.add(a, b);
-		eq( Int64.toStr(c), "5613028097" );
+		eq(Int64.toStr(c), "5613028097");
 
 
 		var a = Int64.make(0xFFF21CDA, 0x972E8BA3);
 		var a = Int64.make(0xFFF21CDA, 0x972E8BA3);
 		var b = Int64.make(0x0098C29B, 0x81000001);
 		var b = Int64.make(0x0098C29B, 0x81000001);
 		var c = Int64.mul(a, b);
 		var c = Int64.mul(a, b);
 		var expected = Int64.make(0xDDE8A2E8, 0xBA2E8BA3);
 		var expected = Int64.make(0xDDE8A2E8, 0xBA2E8BA3);
-		eq( expected.compare(c), 0 );
+		eq(expected.compare(c), 0);
 	}
 	}
 
 
 	public function testCompare() {
 	public function testCompare() {
-		var a = ofInt(2),
-			b = ofInt(3);
+		var a = ofInt(2), b = ofInt(3);
 		t(a == a);
 		t(a == a);
 		t(b == b);
 		t(b == b);
 		eq(a.compare(a), 0);
 		eq(a.compare(a), 0);
@@ -440,47 +456,43 @@ class TestInt64 extends Test {
 	}
 	}
 
 
 	public function testBits() {
 	public function testBits() {
-		var x = make(0xfedcba98,0x76543210);
+		var x = make(0xfedcba98, 0x76543210);
 		var y = x.and((ofInt(0xffff))),
 		var y = x.and((ofInt(0xffff))),
 			z = x.or((ofInt(0xffff))),
 			z = x.or((ofInt(0xffff))),
-			w = x.xor((make(0xffffffff,0xffffffff)));
+			w = x.xor((make(0xffffffff, 0xffffffff)));
 		eq(y.toStr(), '12816');
 		eq(y.toStr(), '12816');
 		eq(z.toStr(), '-81985529216434177');
 		eq(z.toStr(), '-81985529216434177');
 		eq(w.toStr(), '81985529216486895');
 		eq(w.toStr(), '81985529216486895');
 		eq(x.and(ofInt(0xffff)).toStr(), '12816');
 		eq(x.and(ofInt(0xffff)).toStr(), '12816');
 		eq((x.or(ofInt(0xffff))).toStr(), '-81985529216434177');
 		eq((x.or(ofInt(0xffff))).toStr(), '-81985529216434177');
 		eq((x.xor(ofInt(0xffff))).toStr(), '-81985529216446993');
 		eq((x.xor(ofInt(0xffff))).toStr(), '-81985529216446993');
-		eq((x.and(make(0x1,0xffffffff))).toStr(), '1985229328');
-		eq((x.or(make(0x1,0xffffffff))).toStr(), '-81985522611781633');
+		eq((x.and(make(0x1, 0xffffffff))).toStr(), '1985229328');
+		eq((x.or(make(0x1, 0xffffffff))).toStr(), '-81985522611781633');
 		eq((x.xor(make(0x1, 0xffffffff))).toStr(), '-81985524597010961');
 		eq((x.xor(make(0x1, 0xffffffff))).toStr(), '-81985524597010961');
-		var a = ofInt(7),
-			b = a.shl(1);
+		var a = ofInt(7), b = a.shl(1);
 		eq(b.toStr(), '14');
 		eq(b.toStr(), '14');
 	}
 	}
 
 
 	public function testAdd() {
 	public function testAdd() {
-		var a = ofInt(3),
-				b = ofInt(2),
-				c = make(0xffffffff,0xfffffffe);
-		eq( (a.add(b)).compare(ofInt(5)), 0 );
-		eq( (a.add(ofInt(4))).compare(ofInt(7)), 0 );
-		eq( (c.add(ofInt(3))).compare(ofInt(1)), 0 );
+		var a = ofInt(3), b = ofInt(2), c = make(0xffffffff, 0xfffffffe);
+		eq((a.add(b)).compare(ofInt(5)), 0);
+		eq((a.add(ofInt(4))).compare(ofInt(7)), 0);
+		eq((c.add(ofInt(3))).compare(ofInt(1)), 0);
 		// numbers larger than int32
 		// numbers larger than int32
-		eq( a.add(make(0x1, 0)).toStr(), '4294967299');
+		eq(a.add(make(0x1, 0)).toStr(), '4294967299');
 	}
 	}
 
 
 	public function testNeg() {
 	public function testNeg() {
-		eq(Std.string(ofInt(-1)),Std.string(neg(ofInt(1))));
-		eq(Std.string(ofInt(-100)),Std.string(neg(ofInt(100))));
+		eq(Std.string(ofInt(-1)), Std.string(neg(ofInt(1))));
+		eq(Std.string(ofInt(-100)), Std.string(neg(ofInt(100))));
 		eq(Std.string(make(-2147483648, 1)), Std.string(neg(make(2147483647, -1)))); // -9223372036854775807 == neg(9223372036854775807)
 		eq(Std.string(make(-2147483648, 1)), Std.string(neg(make(2147483647, -1)))); // -9223372036854775807 == neg(9223372036854775807)
 	}
 	}
 
 
-	function int64eq( v : Int64, v2 : Int64, ?pos ) {
+	function int64eq(v:Int64, v2:Int64, ?pos) {
 		t(v == v2);
 		t(v == v2);
 	}
 	}
 
 
-	public function testParseString()
-	{
+	public function testParseString() {
 		for (v in ["0", "1", "-1", "9223372036854775807", "-9223372036854775807"]) {
 		for (v in ["0", "1", "-1", "9223372036854775807", "-9223372036854775807"]) {
 			eq(Std.string(parseString(v)), v);
 			eq(Std.string(parseString(v)), v);
 		}
 		}
@@ -488,94 +500,131 @@ class TestInt64 extends Test {
 		// trims the string:
 		// trims the string:
 		eq("-23", Std.string(parseString("  -23 ")));
 		eq("-23", Std.string(parseString("  -23 ")));
 
 
-
 		// overflow and underflow raise exceptions:
 		// overflow and underflow raise exceptions:
-		try
-		{
+		try {
 			parseString("9223372036854775808");
 			parseString("9223372036854775808");
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 
 
-		try
-		{
+		try {
 			parseString("-9223372036854775809");
 			parseString("-9223372036854775809");
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 
 
-		try
-		{
+		try {
 			parseString("--1");
 			parseString("--1");
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 
 
-		try
-		{
+		try {
 			parseString("asd1");
 			parseString("asd1");
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 
 
-		try
-		{
+		try {
 			parseString("1asdf");
 			parseString("1asdf");
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 	}
 	}
 
 
-	public function testFromFloat()
-	{
+	public function testFromFloat() {
 		for (v in [0.0, 1.0, -1.0, 9007199254740991, -9007199254740991]) {
 		for (v in [0.0, 1.0, -1.0, 9007199254740991, -9007199254740991]) {
 			eq(Std.parseFloat(Std.string(fromFloat(v))), v);
 			eq(Std.parseFloat(Std.string(fromFloat(v))), v);
 		}
 		}
 
 
-		try
-		{
+		try {
 			fromFloat(9007199254740992);
 			fromFloat(9007199254740992);
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 
 
-		try
-		{
+		try {
 			fromFloat(-9007199254740992);
 			fromFloat(-9007199254740992);
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 
 
 		var nan = Math.NaN;
 		var nan = Math.NaN;
-		try
-		{
+		try {
 			fromFloat(nan);
 			fromFloat(nan);
 			f(true);
 			f(true);
-		}
-		catch (e:Dynamic)
-		{
+		} catch (e:Dynamic) {
 			// fine
 			// fine
 		}
 		}
 	}
 	}
-}
+
+	static function toHex(v:haxe.Int64) {
+		return "0x" + (v.high == 0 ? StringTools.hex(v.low) : StringTools.hex(v.high) + StringTools.hex(v.low, 8));
+	}
+
+	function testNicolas() {
+		inline function check(a:haxe.Int64, str:String) {
+			eq(toHex(a), str);
+		}
+
+		check(33, "0x21");
+		check(-8, "0xFFFFFFFFFFFFFFF8");
+		var x = haxe.Int64.make(0x87654321, 0xABCDEF99);
+		check(x, "0x87654321ABCDEF99");
+		var y = haxe.Int64.make(0xABCDEF99, 0x87654321);
+		var small = haxe.Int64.make(0x3, 0x87654321);
+		check(x + x, "0xECA8643579BDF32");
+		check(x * x, "0xF6889F3201490971");
+		check(x + y, "0x333332BB333332BA");
+		check(x - y, "0xDB9753882468AC78");
+		check(x / small, "0xFFFFFFFFDDD2DC89");
+		check(x % small, "0xFFFFFFFFA2DAA6F0");
+		check(-x, "0x789ABCDE54321067");
+		check(small / 255, "0x38AF033");
+		check(small % 255, "0x54");
+		check(x << 1, "0xECA8643579BDF32");
+		check(x << 33, "0x579BDF3200000000");
+		check(x >> 8, "0xFF87654321ABCDEF");
+		check(x >> 40, "0xFFFFFFFFFF876543");
+		check(x >>> 40, "0x876543");
+		check(x & y, "0x8345430183454301");
+		check(x | y, "0xAFEDEFB9AFEDEFB9");
+		check(x ^ y, "0x2CA8ACB82CA8ACB8");
+		x++;
+		check(x, "0x87654321ABCDEF9A");
+		x--;
+		check(x, "0x87654321ABCDEF99");
+		check(~x, "0x789ABCDE54321066");
+		t(x == x);
+		f(x == y);
+
+		t(y >= x);
+		f(x >= y);
+		t(x >= x);
+		t(x + 1 >= x);
+		f(x - 1 >= x);
+		t(y > x);
+		f(x > y);
+		t(x + 1 > x);
+		f(x - 1 > x);
+		f(x > x);
+
+		f(y <= x);
+		t(x <= y);
+		t(x <= x);
+		f(x + 1 <= x);
+		t(x - 1 <= x);
+		f(y < x);
+		t(x < y);
+		f(x + 1 < x);
+		t(x - 1 < x);
+		f(x < x);
+	}
+}