diff --git a/long/long-tests.ts b/long/long-tests.ts
index c1a05f576..928cc9453 100644
--- a/long/long-tests.ts
+++ b/long/long-tests.ts
@@ -1,68 +1,117 @@
///
-// --- commonjs ---
import Long = require("long");
-// --- browser ---
-//var Long = dcodeIO.Long;
-var val:dcodeIO.Long;
-var n:number;
-var b:boolean;
-var s:string;
+var val: Long;
+var n: number = 42;
+var b: boolean = true;
+var s: string = "1337";
+val = new Long(0xFFFFFFFF, 0x7FFFFFFF, true);
val = new Long(0xFFFFFFFF, 0x7FFFFFFF);
+val = new Long(0xFFFFFFFF);
-val = Long.from28Bits(0xFFFFFFF, 0xFFFFFFF, 0xFF);
-
-val = Long.fromInt(-1, true);
n = val.low;
n = val.high;
b = val.unsigned;
-s = val.toString();
val = val.add(val);
+val = val.add(n);
+val = val.add(s);
+
val = val.and(val);
-val = val.clone();
+val = val.and(n);
+val = val.and(s);
+
n = val.compare(val);
+n = val.compare(n);
+n = val.compare(s);
+
val = val.div(val);
+val = val.div(n);
+val = val.div(s);
+
b = val.equals(val);
+b = val.equals(n);
+b = val.equals(s);
+
n = val.getHighBits();
n = val.getHighBitsUnsigned();
n = val.getLowBits();
n = val.getLowBitsUnsigned();
n = val.getNumBitsAbs();
+
b = val.greaterThan(val);
+b = val.greaterThan(n);
+b = val.greaterThan(s);
+
b = val.greaterThanOrEqual(val);
+b = val.greaterThanOrEqual(n);
+b = val.greaterThanOrEqual(s);
+
b = val.isEven();
b = val.isNegative();
b = val.isOdd();
+b = val.isPositive();
b = val.isZero();
+
b = val.lessThan(val);
+b = val.lessThan(n);
+b = val.lessThan(s);
+
b = val.lessThanOrEqual(val);
+b = val.lessThanOrEqual(n);
+b = val.lessThanOrEqual(s);
+
val = val.modulo(val);
+val = val.modulo(n);
+val = val.modulo(s);
+
val = val.multiply(val);
+val = val.multiply(n);
+val = val.multiply(s);
+
val = val.negate();
val = val.not();
+
b = val.notEquals(val);
+b = val.notEquals(n);
+b = val.notEquals(s);
+
val = val.or(val);
+val = val.or(n);
+val = val.or(s);
+
val = val.shiftLeft(2);
+val = val.shiftLeft(val);
+
val = val.shiftRight(1);
+val = val.shiftRight(val);
+
val = val.shiftRightUnsigned(1);
+val = val.shiftRightUnsigned(val);
+
val = val.subtract(val);
+val = val.subtract(n);
+val = val.subtract(s);
+
n = val.toInt();
n = val.toNumber();
val = val.toSigned();
-val = val.toUnsigned();
-val = val.xor(val);
-val = Long.MAX_SIGNED_VALUE;
+s = val.toString();
+s = val.toString(n);
+
+val = val.toUnsigned();
+
+val = val.xor(val);
+val = val.xor(n);
+val = val.xor(s);
+
val = Long.MAX_UNSIGNED_VALUE;
val = Long.MAX_VALUE;
-val = Long.MIN_SIGNED_VALUE;
-val = Long.MIN_UNSIGNED_VALUE;
val = Long.MIN_VALUE;
val = Long.NEG_ONE;
val = Long.ONE;
+val = Long.UZERO;
val = Long.ZERO;
-
-
diff --git a/long/long.d.ts b/long/long.d.ts
index 3d6554017..5c3704a81 100644
--- a/long/long.d.ts
+++ b/long/long.d.ts
@@ -1,80 +1,72 @@
-// Type definitions for Long.js 1.1.2
+// Type definitions for Long.js v2.2.5
// Project: https://github.com/dcodeIO/Long.js
-// Definitions by: Toshihide Hara
+// Definitions by: Peter Kooijmans
// Definitions: https://github.com/borisyankov/DefinitelyTyped
-declare module dcodeIO {
-
- interface LongStatic {
- new(low:number, high:number, unsigned?:boolean):Long;
-
- MAX_SIGNED_VALUE:Long;
- MAX_UNSIGNED_VALUE:Long;
- MAX_VALUE:Long;
- MIN_SIGNED_VALUE:Long;
- MIN_UNSIGNED_VALUE:Long;
- MIN_VALUE:Long;
- NEG_ONE:Long;
- ONE:Long;
- ZERO:Long;
-
- from28Bits(part0:number, part1:number, part2:number, unsigned?:boolean):Long;
- fromBits(lowBits:number, highBits:number, unsigned?:boolean):Long;
- fromInt(value:number, unsigned?:boolean):Long;
- fromNumber(value:number, unsigned?:boolean):Long;
- fromString(str:string, unsigned?:boolean, radix?:number):Long;
- fromString(str:string, unsigned?:number, radix?:number):Long;
- fromString(str:string, unsigned?:any, radix?:number):Long;
- }
-
- interface Long {
- high:number;
- low:number;
- unsigned:boolean;
-
- add(other:Long):Long;
- and(other:Long):Long;
- clone():Long;
- compare(other:Long):number;
- div(other:Long):Long;
- equals(other:Long):boolean;
- getHighBits():number;
- getHighBitsUnsigned():number;
- getLowBits():number;
- getLowBitsUnsigned():number;
- getNumBitsAbs():number;
- greaterThan(other:Long):boolean;
- greaterThanOrEqual(other:Long):boolean;
- isEven():boolean;
- isNegative():boolean;
- isOdd():boolean;
- isZero():boolean;
- lessThan(other:Long):boolean;
- lessThanOrEqual(other:Long):boolean;
- modulo(other:Long):Long;
- multiply(other:Long):Long;
- negate():Long;
- not():Long;
- notEquals(other:Long):boolean;
- or(other:Long):Long;
- shiftLeft(numBits:number):Long;
- shiftRight(numBits:number):Long;
- shiftRightUnsigned(numBits:number):Long;
- subtract(other:Long):Long;
- toInt():number;
- toNumber():number;
- toSigned():Long;
- toString(radix?:number):string;
- toUnsigned():Long;
- xor(other:Long):Long;
- }
-
- // for browser
- export var Long:LongStatic;
-}
-
-// for node, commonjs
declare module "long" {
- var Long:dcodeIO.LongStatic;
- export = Long;
+
+ module Long {
+ export var MAX_UNSIGNED_VALUE: Long;
+ export var MAX_VALUE: Long;
+ export var MIN_VALUE: Long;
+ export var NEG_ONE: Long;
+ export var ONE: Long;
+ export var UONE: Long;
+ export var UZERO: Long;
+ export var ZERO: Long;
+
+ export function fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long;
+ export function fromInt(value: number, unsigned?: boolean): Long;
+ export function fromNumber(value: number, unsigned?: boolean): Long;
+ export function fromString(str: string, unsigned?: boolean | number, radix?: number): Long;
+ export function fromValue(val: Long | number | string): Long;
+
+ export function isLong(obj: any): boolean;
+ }
+
+ class Long {
+ high: number;
+ low: number;
+ unsigned :boolean;
+
+ constructor(low: number, high?: number, unsigned?:boolean);
+
+ add(other: Long | number | string): Long;
+ and(other: Long | number | string): Long;
+ compare(other: Long | number | string): number;
+ div(divisor: Long | number | string): Long;
+ equals(other: Long | number | string): boolean;
+ getHighBits(): number;
+ getHighBitsUnsigned(): number;
+ getLowBits(): number;
+ getLowBitsUnsigned(): number;
+ getNumBitsAbs(): number;
+ greaterThan(other: Long | number | string): boolean;
+ greaterThanOrEqual(other: Long | number | string): boolean;
+ isEven(): boolean;
+ isNegative(): boolean;
+ isOdd(): boolean;
+ isPositive(): boolean;
+ isZero(): boolean;
+ lessThan(other: Long | number | string): boolean;
+ lessThanOrEqual(other: Long | number | string): boolean;
+ modulo(divisor: Long | number | string): Long;
+ multiply(multiplier: Long | number | string): Long;
+ negate(): Long;
+ not(): Long;
+ notEquals(other: Long | number | string): boolean;
+ or(other: Long | number | string): Long;
+ shiftLeft(numBits: number | Long): Long;
+ shiftRight(numBits: number | Long): Long;
+ shiftRightUnsigned(numBits: number | Long): Long;
+ subtract(other: Long | number | string): Long;
+ toInt(): number;
+ toNumber(): number;
+ toSigned(): Long;
+ toString(radix?: number): string;
+ toUnsigned(): Long;
+ xor(other: Long | number | string): Long;
+ }
+
+ export = Long;
}