1
1
script ;
2
2
3
- const B1 = Address {
4
- value : 0x0100000000000000000000000000000000000000000000000000000000000010
5
- };
6
-
7
- pub fn addr_of <T >(val : T ) -> raw_ptr {
8
- if ! __is_reference_type :: <T >() {
9
- revert (0 );
10
- }
3
+ pub fn as_raw_ptr <T >(val : & T ) -> raw_ptr {
11
4
asm(ptr : val ) {
12
5
ptr : raw_ptr
13
6
}
@@ -18,21 +11,158 @@ enum X {
18
11
B : u64 ,
19
12
}
20
13
21
- fn main () {
22
- let sender = Identity :: Address (B1 );
23
- assert (__addr_of (sender ) == addr_of (sender ));
14
+ struct Y {
15
+ a : u32 ,
16
+ b : u64 ,
17
+ }
18
+
19
+ const A_U256 : u256 = 0x0 ;
20
+ const B_U256 : u256 = 0x1 ;
21
+
22
+ const A_U32 : u32 = 0 ;
23
+ const B_U32 : u32 = 1 ;
24
+
25
+ const A_BOOL : bool = true ;
26
+ const B_BOOL : bool = false ;
27
+
28
+ const A_U64 : u64 = 0 ;
29
+ const B_U64 : u64 = 1 ;
30
+
31
+ const A_X : X = X :: A (0 );
32
+ const B_X : X = X :: B (1 );
24
33
34
+ const A_Y : Y = Y { a : 0 , b : 1 };
35
+ const B_Y : Y = Y { a : 1 , b : 2 };
36
+
37
+ fn main () {
25
38
let x = X :: A (2 );
26
39
let y = X :: B (22 );
27
- assert (__addr_of (x ) == addr_of (x ));
28
- assert (__addr_of (x ) != addr_of (y ));
40
+ assert (__addr_of (x ) == as_raw_ptr (& x ));
41
+ assert (__addr_of (x ) != as_raw_ptr (& y ));
42
+
43
+ let y = Y { a : 2 , b : 22 };
44
+ let z = Y { a : 3 , b : 23 };
45
+ assert (__addr_of (y ) == as_raw_ptr (& y ));
46
+ assert (__addr_of (y ) != as_raw_ptr (& z ));
47
+
48
+ let addr_y_a = __addr_of (y . a);
49
+ let addr_y_b = __addr_of (y . b);
50
+ assert (addr_y_a == as_raw_ptr (& y . a));
51
+ assert (addr_y_b == as_raw_ptr (& y . b));
52
+ assert (addr_y_a != addr_y_b );
29
53
30
54
let a = [1 ,2 ,3 ];
31
- assert (__addr_of (a ) == addr_of ( a ));
55
+ assert (__addr_of (a ) == as_raw_ptr ( & a ));
32
56
33
57
let b = " hello" ;
34
- assert (__addr_of (b ) == addr_of ( b ));
58
+ assert (__addr_of (b ) == as_raw_ptr ( & b ));
35
59
36
60
let c = (1 , 2 );
37
- assert (__addr_of (c ) == addr_of (c ));
61
+ assert (__addr_of (c ) == as_raw_ptr (& c ));
62
+
63
+ let i1 = 42u64 ;
64
+ let i2 = 43u64 ;
65
+ assert (__addr_of (i1 ) == as_raw_ptr (& i1 ));
66
+ assert (__addr_of (i1 ) != as_raw_ptr (& i2 ));
67
+
68
+ let b1 = true ;
69
+ let b2 = false ;
70
+ assert (__addr_of (b1 ) == as_raw_ptr (& b1 ));
71
+ assert (__addr_of (b1 ) != as_raw_ptr (& b2 ));
72
+
73
+ let u8_1 = 8u8 ;
74
+ let u8_2 = 9u8 ;
75
+ assert (__addr_of (u8_1 ) == as_raw_ptr (& u8_1 ));
76
+ assert (__addr_of (u8_1 ) != as_raw_ptr (& u8_2 ));
77
+
78
+ let u256_1 : u256 = 0x0000000000000000000000000000000000000000000000000000000000000001u256 ;
79
+ let u256_2 : u256 = 0x0000000000000000000000000000000000000000000000000000000000000002u256 ;
80
+ assert (__addr_of (u256_1 ) == as_raw_ptr (& u256_1 ));
81
+ assert (__addr_of (u256_1 ) != as_raw_ptr (& u256_2 ));
82
+
83
+ let addr_addr_of = __addr_of (__addr_of (x ));
84
+ assert (! addr_addr_of . is_null ());
85
+ assert (__addr_of (__addr_of (x )) != __addr_of (x ));
86
+
87
+ let some_temp = __addr_of (1 + 4 );
88
+ assert (! some_temp . is_null ());
89
+
90
+ let raw_ptr = __addr_of (x );
91
+ assert (! raw_ptr . is_null ());
92
+
93
+ const X1 : u32 = 42 ;
94
+ const Y1 : u32 = 43 ;
95
+ assert (__addr_of (X1 ) == as_raw_ptr (& X1 ));
96
+ assert (__addr_of (X1 ) != as_raw_ptr (& Y1 ));
97
+ assert (__addr_of (X1 ) != __addr_of (Y1 ));
98
+
99
+ const X2 : u64 = 42 ;
100
+ const Y2 : u64 = 43 ;
101
+ assert (__addr_of (X2 ) == as_raw_ptr (& X2 ));
102
+ assert (__addr_of (X2 ) != as_raw_ptr (& Y2 ));
103
+ assert (__addr_of (X2 ) != __addr_of (Y2 ));
104
+
105
+ const X3 : u256 = 42u256 ;
106
+ const Y3 : u256 = 43u256 ;
107
+ assert (__addr_of (X3 ) == as_raw_ptr (& X3 ));
108
+ assert (__addr_of (X3 ) != as_raw_ptr (& Y3 ));
109
+ assert (__addr_of (X3 ) != __addr_of (Y3 ));
110
+
111
+ const X4 : bool = true ;
112
+ const Y4 : bool = false ;
113
+ assert (__addr_of (X4 ) == as_raw_ptr (& X4 ));
114
+ assert (__addr_of (X4 ) != as_raw_ptr (& Y4 ));
115
+ assert (__addr_of (X4 ) != __addr_of (Y4 ));
116
+
117
+ const X5 : X = X :: A (42 );
118
+ const Y5 : X = X :: B (43 );
119
+ assert (__addr_of (X5 ) == as_raw_ptr (& X5 ));
120
+ assert (__addr_of (X5 ) != as_raw_ptr (& Y5 ));
121
+ assert (__addr_of (X5 ) != __addr_of (Y5 ));
122
+
123
+ const X6 : Y = Y { a : 42 , b : 43 };
124
+ const Y6 : Y = Y { a : 44 , b : 45 };
125
+ assert (__addr_of (X6 ) == as_raw_ptr (& X6 ));
126
+ assert (__addr_of (X6 ) != as_raw_ptr (& Y6 ));
127
+ assert (__addr_of (X6 ) != __addr_of (Y6 ));
128
+
129
+ const X7 : [u32 ; 3 ] = [1 , 2 , 3 ];
130
+ const Y7 : [u32 ; 3 ] = [4 , 5 , 6 ];
131
+ assert (__addr_of (X7 ) == as_raw_ptr (& X7 ));
132
+ assert (__addr_of (X7 ) != as_raw_ptr (& Y7 ));
133
+
134
+ const X8 : (u32 , u32 ) = (1 , 2 );
135
+ const Y8 : (u32 , u32 ) = (3 , 4 );
136
+ assert (__addr_of (X8 ) == as_raw_ptr (& X8 ));
137
+ assert (__addr_of (X8 ) != as_raw_ptr (& Y8 ));
138
+
139
+ const X10 : u8 = 8 ;
140
+ const Y10 : u8 = 9 ;
141
+ assert (__addr_of (X10 ) == as_raw_ptr (& X10 ));
142
+ assert (__addr_of (X10 ) != as_raw_ptr (& Y10 ));
143
+
144
+ assert (__addr_of (A_U256) == as_raw_ptr (& A_U256));
145
+ assert (__addr_of (B_U256) == as_raw_ptr (& B_U256));
146
+ assert (__addr_of (A_U256) != __addr_of (B_U256));
147
+
148
+ assert (__addr_of (A_U32) == as_raw_ptr (& A_U32));
149
+ assert (__addr_of (B_U32) == as_raw_ptr (& B_U32));
150
+ assert (__addr_of (A_U32) != __addr_of (B_U32));
151
+ assert (__addr_of (A_U32) != __addr_of (A_U256));
152
+
153
+ assert (__addr_of (A_BOOL) == as_raw_ptr (& A_BOOL));
154
+ assert (__addr_of (B_BOOL) == as_raw_ptr (& B_BOOL));
155
+ assert (__addr_of (A_BOOL) != __addr_of (B_BOOL));
156
+
157
+ assert (__addr_of (A_U64) == as_raw_ptr (& A_U64));
158
+ assert (__addr_of (B_U64) == as_raw_ptr (& B_U64));
159
+ assert (__addr_of (A_U64) != __addr_of (B_U64));
160
+
161
+ assert (__addr_of (A_X) == as_raw_ptr (& A_X));
162
+ assert (__addr_of (B_X) == as_raw_ptr (& B_X));
163
+ assert (__addr_of (A_X) != __addr_of (B_X));
164
+
165
+ assert (__addr_of (A_Y) == as_raw_ptr (& A_Y));
166
+ assert (__addr_of (B_Y) == as_raw_ptr (& B_Y));
167
+ assert (__addr_of (A_Y) != __addr_of (B_Y));
38
168
}
0 commit comments