未验证 提交 5654773d 编写于 作者: D Daniel Larimer 提交者: GitHub

Merge pull request #2736 from EOSIO/currency-test-fixes

Currency test fixes
...@@ -63,10 +63,10 @@ namespace eosio { ...@@ -63,10 +63,10 @@ namespace eosio {
static constexpr uint8_t max_precision = 18; static constexpr uint8_t max_precision = 18;
explicit symbol(uint8_t p, const char* s): m_value(string_to_symbol(p, s)) { explicit symbol(uint8_t p, const char* s): m_value(string_to_symbol(p, s)) {
FC_ASSERT(valid(), "invalid symbol"); FC_ASSERT(valid(), "invalid symbol", ("s",s));
} }
explicit symbol(uint64_t v = SY(4, EOS)): m_value(v) { explicit symbol(uint64_t v = SY(4, EOS)): m_value(v) {
FC_ASSERT(valid(), "invalid symbol"); FC_ASSERT(valid(), "invalid symbol", ("name",name()));
} }
static symbol from_string(const string& from) static symbol from_string(const string& from)
{ {
......
...@@ -304,10 +304,8 @@ BOOST_FIXTURE_TEST_CASE(test_symbol, TESTER) try { ...@@ -304,10 +304,8 @@ BOOST_FIXTURE_TEST_CASE(test_symbol, TESTER) try {
// invalid - contains lower case characters, no validation // invalid - contains lower case characters, no validation
{ {
symbol malformed(SY(6,EoS)); BOOST_CHECK_EXCEPTION(symbol malformed(SY(6,EoS)),
BOOST_REQUIRE_EQUAL(false, malformed.valid()); fc::assert_exception, assert_message_contains("invalid symbol"));
BOOST_REQUIRE_EQUAL("EoS", malformed.name());
BOOST_REQUIRE_EQUAL(6, malformed.decimals());
} }
// invalid - contains lower case characters, exception thrown // invalid - contains lower case characters, exception thrown
......
...@@ -131,6 +131,28 @@ BOOST_FIXTURE_TEST_CASE( create_negative_max_supply, eosio_token_tester ) try { ...@@ -131,6 +131,28 @@ BOOST_FIXTURE_TEST_CASE( create_negative_max_supply, eosio_token_tester ) try {
} FC_LOG_AND_RETHROW() } FC_LOG_AND_RETHROW()
BOOST_FIXTURE_TEST_CASE( symbol_already_exists, eosio_token_tester ) try {
auto token = create( N(alice), asset::from_string("100 TKN"), true, false, false);
auto stats = get_stats("0,TKN");
REQUIRE_MATCHING_OBJECT( stats, mvo()
("supply", "0 TKN")
("max_supply", "100 TKN")
("issuer", "alice")
("can_freeze",1)
("can_recall",0)
("can_whitelist",0)
("is_frozen",false)
("enforce_whitelist",false)
);
produce_blocks(1);
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: token with symbol already exists" ),
create( N(alice), asset::from_string("100 TKN"), true, false, false)
);
} FC_LOG_AND_RETHROW()
BOOST_FIXTURE_TEST_CASE( create_max_supply, eosio_token_tester ) try { BOOST_FIXTURE_TEST_CASE( create_max_supply, eosio_token_tester ) try {
auto token = create( N(alice), asset::from_string("4611686018427387903 TKN"), true, false, false); auto token = create( N(alice), asset::from_string("4611686018427387903 TKN"), true, false, false);
...@@ -147,9 +169,13 @@ BOOST_FIXTURE_TEST_CASE( create_max_supply, eosio_token_tester ) try { ...@@ -147,9 +169,13 @@ BOOST_FIXTURE_TEST_CASE( create_max_supply, eosio_token_tester ) try {
); );
produce_blocks(1); produce_blocks(1);
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid supply" ), asset max(10, symbol(SY(0, NKT)));
create( N(alice), asset::from_string("4611686018427387904 TKN"), true, false, false) max.amount = 4611686018427387904;
);
BOOST_CHECK_EXCEPTION( create( N(alice), max, true, false, false) , asset_type_exception, [](const asset_type_exception& e) {
return expect_assert_message(e, "magnitude of asset amount must be less than 2^62");
});
} FC_LOG_AND_RETHROW() } FC_LOG_AND_RETHROW()
...@@ -169,15 +195,13 @@ BOOST_FIXTURE_TEST_CASE( create_max_decimals, eosio_token_tester ) try { ...@@ -169,15 +195,13 @@ BOOST_FIXTURE_TEST_CASE( create_max_decimals, eosio_token_tester ) try {
); );
produce_blocks(1); produce_blocks(1);
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid supply" ), asset max(10, symbol(SY(0, NKT)));
create( N(alice), asset::from_string("4.611686018427387904 TKN"), true, false, false)
);
//1.0000000000000000000 => 0x8ac7230489e80000L //1.0000000000000000000 => 0x8ac7230489e80000L
//TODO: Better error message max.amount = 0x8ac7230489e80000L;
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: max-supply must be positive" ),
create( N(alice), asset::from_string("1.0000000000000000000 TKN"), true, false, false) BOOST_CHECK_EXCEPTION( create( N(alice), max, true, false, false) , asset_type_exception, [](const asset_type_exception& e) {
); return expect_assert_message(e, "magnitude of asset amount must be less than 2^62");
});
} FC_LOG_AND_RETHROW() } FC_LOG_AND_RETHROW()
...@@ -211,10 +235,6 @@ BOOST_FIXTURE_TEST_CASE( issue_tests, eosio_token_tester ) try { ...@@ -211,10 +235,6 @@ BOOST_FIXTURE_TEST_CASE( issue_tests, eosio_token_tester ) try {
issue( N(alice), N(alice), asset::from_string("500.001 TKN"), "hola" ) issue( N(alice), N(alice), asset::from_string("500.001 TKN"), "hola" )
); );
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid quantity" ),
issue( N(alice), N(alice), asset::from_string("4611686018427387.904 TKN"), "hola" )
);
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: must issue positive quantity" ), BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: must issue positive quantity" ),
issue( N(alice), N(alice), asset::from_string("-1.000 TKN"), "hola" ) issue( N(alice), N(alice), asset::from_string("-1.000 TKN"), "hola" )
); );
...@@ -275,10 +295,6 @@ BOOST_FIXTURE_TEST_CASE( transfer_tests, eosio_token_tester ) try { ...@@ -275,10 +295,6 @@ BOOST_FIXTURE_TEST_CASE( transfer_tests, eosio_token_tester ) try {
transfer( N(alice), N(bob), asset::from_string("701 CERO"), "hola" ) transfer( N(alice), N(bob), asset::from_string("701 CERO"), "hola" )
); );
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid quantity" ),
transfer( N(alice), N(bob), asset::from_string("4611686018427387904 CERO"), "hola" )
);
BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: must transfer positive quantity" ), BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: must transfer positive quantity" ),
transfer( N(alice), N(bob), asset::from_string("-1000 CERO"), "hola" ) transfer( N(alice), N(bob), asset::from_string("-1000 CERO"), "hola" )
); );
......
...@@ -64,6 +64,12 @@ BOOST_AUTO_TEST_CASE(asset_from_string_overflow) ...@@ -64,6 +64,12 @@ BOOST_AUTO_TEST_CASE(asset_from_string_overflow)
BOOST_CHECK_EXCEPTION( asset::from_string("-0.1000000000000000000 CUR") , assert_exception, [](const assert_exception& e) { BOOST_CHECK_EXCEPTION( asset::from_string("-0.1000000000000000000 CUR") , assert_exception, [](const assert_exception& e) {
return expect_assert_message(e, "precision should be <= 18"); return expect_assert_message(e, "precision should be <= 18");
}); });
BOOST_CHECK_EXCEPTION( asset::from_string("1.0000000000000000000 CUR") , assert_exception, [](const assert_exception& e) {
return expect_assert_message(e, "precision should be <= 18");
});
BOOST_CHECK_EXCEPTION( asset::from_string("-1.0000000000000000000 CUR") , assert_exception, [](const assert_exception& e) {
return expect_assert_message(e, "precision should be <= 18");
});
// precision = 18, magnitude < 2^58 // precision = 18, magnitude < 2^58
a = asset::from_string("0.100000000000000000 CUR"); a = asset::from_string("0.100000000000000000 CUR");
...@@ -78,6 +84,12 @@ BOOST_AUTO_TEST_CASE(asset_from_string_overflow) ...@@ -78,6 +84,12 @@ BOOST_AUTO_TEST_CASE(asset_from_string_overflow)
BOOST_CHECK_EXCEPTION( asset::from_string("-4.611686018427387904 CUR") , asset_type_exception, [](const asset_type_exception& e) { BOOST_CHECK_EXCEPTION( asset::from_string("-4.611686018427387904 CUR") , asset_type_exception, [](const asset_type_exception& e) {
return expect_assert_message(e, "magnitude of asset amount must be less than 2^62"); return expect_assert_message(e, "magnitude of asset amount must be less than 2^62");
}); });
BOOST_CHECK_EXCEPTION( asset::from_string("4611686018427387.904 CUR") , asset_type_exception, [](const asset_type_exception& e) {
return expect_assert_message(e, "magnitude of asset amount must be less than 2^62");
});
BOOST_CHECK_EXCEPTION( asset::from_string("-4611686018427387.904 CUR") , asset_type_exception, [](const asset_type_exception& e) {
return expect_assert_message(e, "magnitude of asset amount must be less than 2^62");
});
// precision = 18, magnitude = 2^62-1 // precision = 18, magnitude = 2^62-1
a = asset::from_string("4.611686018427387903 CUR"); a = asset::from_string("4.611686018427387903 CUR");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册