1 | module.exports = `
|
2 | pragma solidity >=0.4.22 <0.7.0;
|
3 |
|
4 | library Assert {
|
5 |
|
6 | event AssertionEvent(
|
7 | bool passed,
|
8 | string message
|
9 | );
|
10 |
|
11 | function ok(bool a, string memory message) public returns (bool result) {
|
12 | result = a;
|
13 | emit AssertionEvent(result, message);
|
14 | }
|
15 |
|
16 | function equal(uint a, uint b, string memory message) public returns (bool result) {
|
17 | result = (a == b);
|
18 | emit AssertionEvent(result, message);
|
19 | }
|
20 |
|
21 | function equal(int a, int b, string memory message) public returns (bool result) {
|
22 | result = (a == b);
|
23 | emit AssertionEvent(result, message);
|
24 | }
|
25 |
|
26 | function equal(bool a, bool b, string memory message) public returns (bool result) {
|
27 | result = (a == b);
|
28 | emit AssertionEvent(result, message);
|
29 | }
|
30 |
|
31 | // TODO: only for certain versions of solc
|
32 | //function equal(fixed a, fixed b, string message) public returns (bool result) {
|
33 | // result = (a == b);
|
34 | // emit AssertionEvent(result, message);
|
35 | //}
|
36 |
|
37 | // TODO: only for certain versions of solc
|
38 | //function equal(ufixed a, ufixed b, string message) public returns (bool result) {
|
39 | // result = (a == b);
|
40 | // emit AssertionEvent(result, message);
|
41 | //}
|
42 |
|
43 | function equal(address a, address b, string memory message) public returns (bool result) {
|
44 | result = (a == b);
|
45 | emit AssertionEvent(result, message);
|
46 | }
|
47 |
|
48 | function equal(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
|
49 | result = (a == b);
|
50 | emit AssertionEvent(result, message);
|
51 | }
|
52 |
|
53 | function equal(string memory a, string memory b, string memory message) public returns (bool result) {
|
54 | result = (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)));
|
55 | emit AssertionEvent(result, message);
|
56 | }
|
57 |
|
58 | function notEqual(uint a, uint b, string memory message) public returns (bool result) {
|
59 | result = (a != b);
|
60 | emit AssertionEvent(result, message);
|
61 | }
|
62 |
|
63 | function notEqual(int a, int b, string memory message) public returns (bool result) {
|
64 | result = (a != b);
|
65 | emit AssertionEvent(result, message);
|
66 | }
|
67 |
|
68 | function notEqual(bool a, bool b, string memory message) public returns (bool result) {
|
69 | result = (a != b);
|
70 | emit AssertionEvent(result, message);
|
71 | }
|
72 |
|
73 | // TODO: only for certain versions of solc
|
74 | //function notEqual(fixed a, fixed b, string message) public returns (bool result) {
|
75 | // result = (a != b);
|
76 | // emit AssertionEvent(result, message);
|
77 | //}
|
78 |
|
79 | // TODO: only for certain versions of solc
|
80 | //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) {
|
81 | // result = (a != b);
|
82 | // emit AssertionEvent(result, message);
|
83 | //}
|
84 |
|
85 | function notEqual(address a, address b, string memory message) public returns (bool result) {
|
86 | result = (a != b);
|
87 | emit AssertionEvent(result, message);
|
88 | }
|
89 |
|
90 | function notEqual(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
|
91 | result = (a != b);
|
92 | emit AssertionEvent(result, message);
|
93 | }
|
94 |
|
95 | function notEqual(string memory a, string memory b, string memory message) public returns (bool result) {
|
96 | result = (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b)));
|
97 | emit AssertionEvent(result, message);
|
98 | }
|
99 |
|
100 | /*----------------- Greater than --------------------*/
|
101 | function greaterThan(uint a, uint b, string memory message) public returns (bool result) {
|
102 | result = (a > b);
|
103 | emit AssertionEvent(result, message);
|
104 | }
|
105 |
|
106 | function greaterThan(int a, int b, string memory message) public returns (bool result) {
|
107 | result = (a > b);
|
108 | emit AssertionEvent(result, message);
|
109 | }
|
110 | // TODO: safely compare between uint and int
|
111 | function greaterThan(uint a, int b, string memory message) public returns (bool result) {
|
112 | if(b < int(0)) {
|
113 | // int is negative uint "a" always greater
|
114 | result = true;
|
115 | } else {
|
116 | result = (a > uint(b));
|
117 | }
|
118 | emit AssertionEvent(result, message);
|
119 | }
|
120 | function greaterThan(int a, uint b, string memory message) public returns (bool result) {
|
121 | if(a < int(0)) {
|
122 | // int is negative uint "b" always greater
|
123 | result = false;
|
124 | } else {
|
125 | result = (uint(a) > b);
|
126 | }
|
127 | emit AssertionEvent(result, message);
|
128 | }
|
129 | /*----------------- Lesser than --------------------*/
|
130 | function lesserThan(uint a, uint b, string memory message) public returns (bool result) {
|
131 | result = (a < b);
|
132 | emit AssertionEvent(result, message);
|
133 | }
|
134 |
|
135 | function lesserThan(int a, int b, string memory message) public returns (bool result) {
|
136 | result = (a < b);
|
137 | emit AssertionEvent(result, message);
|
138 | }
|
139 | // TODO: safely compare between uint and int
|
140 | function lesserThan(uint a, int b, string memory message) public returns (bool result) {
|
141 | if(b < int(0)) {
|
142 | // int is negative int "b" always lesser
|
143 | result = false;
|
144 | } else {
|
145 | result = (a < uint(b));
|
146 | }
|
147 | emit AssertionEvent(result, message);
|
148 | }
|
149 |
|
150 | function lesserThan(int a, uint b, string memory message) public returns (bool result) {
|
151 | if(a < int(0)) {
|
152 | // int is negative int "a" always lesser
|
153 | result = true;
|
154 | } else {
|
155 | result = (uint(a) < b);
|
156 | }
|
157 | emit AssertionEvent(result, message);
|
158 | }
|
159 | }
|
160 | `
|