diff options
author | Kevin Kelley <kevin@kelleysoft.com> | 2018-11-22 08:02:25 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-12-06 05:15:02 +0800 |
commit | fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c (patch) | |
tree | 654e692585f825a6ca1ea50c1e27b06b7f2107e1 /test/libdevcore/StringUtils.cpp | |
parent | d3c8ba00ac00426b256998a678a8d4bfbf0acd83 (diff) | |
download | dexon-solidity-fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c.tar dexon-solidity-fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c.tar.gz dexon-solidity-fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c.tar.bz2 dexon-solidity-fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c.tar.lz dexon-solidity-fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c.tar.xz dexon-solidity-fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c.tar.zst dexon-solidity-fb6fd1b3c25fd9c2bc9b8abb97fd150bc4ce219c.zip |
add a 'readable' format for large hex values
Diffstat (limited to 'test/libdevcore/StringUtils.cpp')
-rw-r--r-- | test/libdevcore/StringUtils.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/libdevcore/StringUtils.cpp b/test/libdevcore/StringUtils.cpp index 76c11b82..0baeb964 100644 --- a/test/libdevcore/StringUtils.cpp +++ b/test/libdevcore/StringUtils.cpp @@ -18,8 +18,12 @@ * Unit tests for the StringUtils routines. */ +#include <libdevcore/CommonData.h> +#include <libdevcore/FixedHash.h> #include <libdevcore/StringUtils.h> +#include <libsolidity/ast/Types.h> // for IntegerType + #include <test/Options.h> using namespace std; @@ -100,6 +104,59 @@ BOOST_AUTO_TEST_CASE(test_human_readable_join) BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b", "c"}), "; ", " or "), "a; b or c"); } +BOOST_AUTO_TEST_CASE(test_format_number_readable) +{ + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x8000000)), "0x08 * 2**24"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x80000000)), "0x80 * 2**24"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x800000000)), "0x08 * 2**32"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x8000000000)), "0x80 * 2**32"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x80000000000)), "0x08 * 2**40"); + + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x7ffffff)), "0x08 * 2**24 - 1"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x7fffffff)), "0x80 * 2**24 - 1"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x7ffffffff)), "0x08 * 2**32 - 1"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x7fffffffff)), "0x80 * 2**32 - 1"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x7ffffffffff)), "0x08 * 2**40 - 1"); + + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x88000000)), "0x88 * 2**24"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x8888888888000000)), "0x8888888888 * 2**24"); + + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0x100000000)), "2**32"); + BOOST_CHECK_EQUAL(formatNumberReadable(u256(0xFFFFffff)), "2**32 - 1"); + + u160 a = 0; + for (int i = 0; i < 20; i++) + { + a <<= 8; + a |= 0x55; + } + u256 b = 0; + for (int i = 0; i < 32; i++) + { + b <<= 8; + b |= 0x55; + } + u256 c = (u256)FixedHash<32>( + fromHex("0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789") + ); + u256 d = u256(0xAAAAaaaaAAAAaaaa) << 192 | + u256(0xFFFFffffFFFFffff) << 128 | + u256(0xFFFFffffFFFFffff) << 64 | + u256(0xFFFFffffFFFFffff); + BOOST_CHECK_EQUAL(formatNumberReadable(a, true), "0x5555...{+32 more}...5555"); + BOOST_CHECK_EQUAL(formatNumberReadable(b, true), "0x5555...{+56 more}...5555"); + BOOST_CHECK_EQUAL(formatNumberReadable(c, true), "0xABCD...{+56 more}...6789"); + BOOST_CHECK_EQUAL(formatNumberReadable(d, true), "0xAAAAaaaaAAAAaaab * 2**192 - 1"); + + //for codegen/ExpressionCompiler + BOOST_CHECK_EQUAL(formatNumberReadable(u256(-1)), "2**256 - 1"); + + // for formal/SMTChecker + BOOST_CHECK_EQUAL( + formatNumberReadable(solidity::IntegerType(256).minValue()), "0"); + BOOST_CHECK_EQUAL( + formatNumberReadable(solidity::IntegerType(256).maxValue()), "2**256 - 1"); +} BOOST_AUTO_TEST_SUITE_END() |