mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add user operator test cases
This commit is contained in:
parent
3be5114fb0
commit
7d12eb5745
@ -0,0 +1,29 @@
|
|||||||
|
type SmallInt is int;
|
||||||
|
type BigInt is int;
|
||||||
|
|
||||||
|
using {add1 as +} for SmallInt;
|
||||||
|
using {add2 as +} for BigInt;
|
||||||
|
|
||||||
|
function add1(SmallInt, SmallInt) pure returns (SmallInt) {
|
||||||
|
return SmallInt.wrap(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function add2(BigInt, BigInt) pure returns (BigInt) {
|
||||||
|
return BigInt.wrap(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
function f() public pure returns (SmallInt) {
|
||||||
|
return SmallInt.wrap(0) + SmallInt.wrap(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function g() public pure returns (BigInt) {
|
||||||
|
return BigInt.wrap(0) + BigInt.wrap(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// f() -> 1
|
||||||
|
// g() -> 2
|
@ -0,0 +1,43 @@
|
|||||||
|
type Int is int;
|
||||||
|
|
||||||
|
function add1(Int, Int) pure returns (Int) {
|
||||||
|
return Int.wrap(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function add2(Int, Int) pure returns (Int) {
|
||||||
|
return Int.wrap(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
contract C1 {
|
||||||
|
using {add1 as +} for Int;
|
||||||
|
|
||||||
|
function f() public returns (Int) {
|
||||||
|
return Int.wrap(0) + Int.wrap(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contract C2 {
|
||||||
|
using {add2 as +} for Int;
|
||||||
|
|
||||||
|
function f() public returns (Int) {
|
||||||
|
return Int.wrap(0) + Int.wrap(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
function test1() public returns (Int) {
|
||||||
|
C1 c = new C1();
|
||||||
|
return c.f();
|
||||||
|
}
|
||||||
|
|
||||||
|
function test2() public returns (Int) {
|
||||||
|
C2 c = new C2();
|
||||||
|
return c.f();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// test1() -> 1
|
||||||
|
// test2() -> 2
|
@ -0,0 +1,28 @@
|
|||||||
|
==== Source: a.sol ====
|
||||||
|
pragma abicoder v2;
|
||||||
|
library L {
|
||||||
|
type Int is int128;
|
||||||
|
|
||||||
|
function add(Int, Int) pure public returns (Int) {
|
||||||
|
return Int.wrap(7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
==== Source: b.sol ====
|
||||||
|
pragma abicoder v2;
|
||||||
|
import "a.sol" as a;
|
||||||
|
==== Source: c.sol ====
|
||||||
|
pragma abicoder v2;
|
||||||
|
import "b.sol" as b;
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
using {b.a.L.add as +} for b.a.L.Int;
|
||||||
|
|
||||||
|
function f() pure public returns (b.a.L.Int) {
|
||||||
|
return b.a.L.Int.wrap(0) + b.a.L.Int.wrap(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// f() -> 7
|
@ -0,0 +1,12 @@
|
|||||||
|
type Int is int;
|
||||||
|
|
||||||
|
function add(Int, Int) returns (Int) {
|
||||||
|
return Int.wrap(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
using {add as +} for *;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----
|
||||||
|
// SyntaxError 3349: (101-124): The type has to be specified explicitly when attaching specific functions.
|
@ -0,0 +1,12 @@
|
|||||||
|
type Int is int;
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
using {add as +} for Int;
|
||||||
|
|
||||||
|
function add(Int, Int) public returns (Int) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----
|
||||||
|
// TypeError 4167: (42-45): Only file-level functions and library functions can be bound to a type in a "using" statement
|
@ -0,0 +1,8 @@
|
|||||||
|
using {add as +} for *;
|
||||||
|
|
||||||
|
function add(int, int) returns (int) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----
|
||||||
|
// SyntaxError 8118: (0-23): The type has to be specified explicitly at file level (cannot use '*').
|
@ -0,0 +1,12 @@
|
|||||||
|
type Int is int;
|
||||||
|
|
||||||
|
using {C.add as +} for Int;
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
function add(Int, Int) public returns (Int) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----
|
||||||
|
// TypeError 4167: (25-30): Only file-level functions and library functions can be bound to a type in a "using" statement
|
Loading…
Reference in New Issue
Block a user