Commit 46b932cc authored by Marek Kotewicz's avatar Marek Kotewicz

negative integers support

parent f85f77f6
...@@ -57,9 +57,10 @@ var findMethodIndex = function (json, methodName) { ...@@ -57,9 +57,10 @@ var findMethodIndex = function (json, methodName) {
/// @param string string to be padded /// @param string string to be padded
/// @param number of characters that result string should have /// @param number of characters that result string should have
/// @param sign, by default 0
/// @returns right aligned string /// @returns right aligned string
var padLeft = function (string, chars) { var padLeft = function (string, chars, sign) {
return new Array(chars - string.length + 1).join("0") + string; return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
}; };
/// @param expected type prefix (string) /// @param expected type prefix (string)
...@@ -86,8 +87,17 @@ var setupInputTypes = function () { ...@@ -86,8 +87,17 @@ var setupInputTypes = function () {
/// @returns right-aligned byte representation of int /// @returns right-aligned byte representation of int
var formatInt = function (value) { var formatInt = function (value) {
var padding = 32 * 2; var padding = 32 * 2;
if (typeof value === 'number') if (typeof value === 'number') {
if (value < 0) {
// two's complement
// TODO: fix big numbers support
value = ((value) >>> 0).toString(16)
return padLeft(value, padding, 'f');
}
value = value.toString(16); value = value.toString(16);
}
else if (value.indexOf('0x') === 0) else if (value.indexOf('0x') === 0)
value = value.substr(2); value = value.substr(2);
else if (typeof value === 'string') else if (typeof value === 'string')
......
...@@ -55,7 +55,7 @@ describe('abi', function() { ...@@ -55,7 +55,7 @@ describe('abi', function() {
}); });
it('should parse input uint', function() { it('should parse input uint256', function() {
// given // given
var d = clone(description); var d = clone(description);
...@@ -88,6 +88,9 @@ describe('abi', function() { ...@@ -88,6 +88,9 @@ describe('abi', function() {
// then // then
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001"); assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a"); assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
assert.equal(parser.test(-1), "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
assert.equal(parser.test(-2), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe");
assert.equal(parser.test(-16), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0");
}); });
...@@ -106,6 +109,9 @@ describe('abi', function() { ...@@ -106,6 +109,9 @@ describe('abi', function() {
// then // then
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001"); assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a"); assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
assert.equal(parser.test(-1), "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
assert.equal(parser.test(-2), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe");
assert.equal(parser.test(-16), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0");
}); });
...@@ -124,6 +130,9 @@ describe('abi', function() { ...@@ -124,6 +130,9 @@ describe('abi', function() {
// then // then
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001"); assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a"); assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
assert.equal(parser.test(-1), "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
assert.equal(parser.test(-2), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe");
assert.equal(parser.test(-16), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0");
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment