mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
cond-expr: add more unit tests
This commit is contained in:
parent
d36537e737
commit
5840a3513f
@ -2986,6 +2986,156 @@ BOOST_AUTO_TEST_CASE(left_value_in_conditional_expression_not_supported_yet)
|
||||
BOOST_CHECK(expectError(text) == Error::Type::TypeError);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(conditional_expression_with_different_struct)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract C {
|
||||
struct s1 {
|
||||
uint x;
|
||||
}
|
||||
struct s2 {
|
||||
uint x;
|
||||
}
|
||||
function f() {
|
||||
s1 x;
|
||||
s2 y;
|
||||
true ? x : y;
|
||||
}
|
||||
}
|
||||
)";
|
||||
BOOST_CHECK(expectError(text) == Error::Type::TypeError);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(conditional_expression_with_different_function_type)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract C {
|
||||
function x(bool) {}
|
||||
function y() {}
|
||||
|
||||
function f() {
|
||||
true ? x : y;
|
||||
}
|
||||
}
|
||||
)";
|
||||
BOOST_CHECK(expectError(text) == Error::Type::TypeError);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(conditional_expression_with_different_enum)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract C {
|
||||
enum small { A, B, C, D }
|
||||
enum big { A, B, C, D }
|
||||
|
||||
function f() {
|
||||
small x;
|
||||
big y;
|
||||
|
||||
true ? x : y;
|
||||
}
|
||||
}
|
||||
)";
|
||||
BOOST_CHECK(expectError(text) == Error::Type::TypeError);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(conditional_expression_with_different_mapping)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract C {
|
||||
mapping(uint8 => uint8) table1;
|
||||
mapping(uint32 => uint8) table2;
|
||||
|
||||
function f() {
|
||||
true ? table1 : table2;
|
||||
}
|
||||
}
|
||||
)";
|
||||
BOOST_CHECK(expectError(text) == Error::Type::TypeError);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(conditional_with_all_types)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract C {
|
||||
struct s1 {
|
||||
uint x;
|
||||
}
|
||||
s1 struct_x;
|
||||
s1 struct_y;
|
||||
|
||||
function fun_x() {}
|
||||
function fun_y() {}
|
||||
|
||||
enum small { A, B, C, D }
|
||||
|
||||
mapping(uint8 => uint8) table1;
|
||||
mapping(uint8 => uint8) table2;
|
||||
|
||||
function f() {
|
||||
// integers
|
||||
uint x;
|
||||
uint y;
|
||||
true ? x : y;
|
||||
|
||||
// integer constants
|
||||
true ? 1 : 3;
|
||||
|
||||
// string literal
|
||||
true ? "hello" : "world";
|
||||
|
||||
// bool
|
||||
true ? true : false;
|
||||
|
||||
// real is not there yet.
|
||||
|
||||
// array
|
||||
byte[2] memory a;
|
||||
byte[2] memory b;
|
||||
true ? a : b;
|
||||
|
||||
bytes memory e;
|
||||
bytes memory f;
|
||||
true ? e : f;
|
||||
|
||||
// fixed bytes
|
||||
bytes2 c;
|
||||
bytes2 d;
|
||||
true ? c : d;
|
||||
|
||||
// contract doesn't fit in here
|
||||
|
||||
// struct
|
||||
true ? struct_x : struct_y;
|
||||
|
||||
// function
|
||||
true ? fun_x : fun_y;
|
||||
|
||||
// enum
|
||||
small enum_x;
|
||||
small enum_y;
|
||||
true ? enum_x : enum_y;
|
||||
|
||||
// tuple
|
||||
true ? (1, 2) : (3, 4);
|
||||
|
||||
// mapping
|
||||
true ? table1 : table2;
|
||||
|
||||
// typetype
|
||||
true ? uint32(1) : uint32(2);
|
||||
|
||||
// modifier doesn't fit in here
|
||||
|
||||
// magic doesn't fit in here
|
||||
|
||||
// module doesn't fit in here
|
||||
}
|
||||
}
|
||||
)";
|
||||
BOOST_CHECK(success(text));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
}
|
||||
|
@ -1178,20 +1178,6 @@ BOOST_AUTO_TEST_CASE(conditional_with_assignment)
|
||||
BOOST_CHECK(successParse(text));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(conditional_as_left_value)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract A {
|
||||
function f() {
|
||||
uint x;
|
||||
uint y;
|
||||
(true ? x : y) = 3;
|
||||
}
|
||||
}
|
||||
)";
|
||||
BOOST_CHECK(successParse(text));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user