@@ -106,7 +106,13 @@ impl RandOps {
106
106
SafeRc :: make_mut ( & mut c7) [ 0 ] = Stack :: make_null ( ) ;
107
107
108
108
let mut t1v = t1v. into_tuple ( ) . expect ( "t1 was checked as tuple" ) ;
109
- SafeRc :: make_mut ( & mut t1v) [ SmcInfoBase :: RANDSEED_IDX ] = int. into_dyn_value ( ) ;
109
+ {
110
+ let t1v = SafeRc :: make_mut ( & mut t1v) ;
111
+ if t1v. len ( ) <= SmcInfoBase :: RANDSEED_IDX {
112
+ t1v. resize_with ( SmcInfoBase :: RANDSEED_IDX + 1 , Stack :: make_null) ;
113
+ }
114
+ t1v[ SmcInfoBase :: RANDSEED_IDX ] = int. into_dyn_value ( ) ;
115
+ }
110
116
let t1_len = t1v. len ( ) ;
111
117
112
118
// NOTE: Restore c7 and control registers state.
@@ -207,6 +213,15 @@ pub mod test {
207
213
#[ test]
208
214
#[ traced_test]
209
215
fn random ( ) {
216
+ assert_run_vm ! ( "INT 123 RAND" , c7: tuple![ ] , [ ] => [ int 0 ] , exit_code: 7 ) ;
217
+ assert_run_vm ! ( "INT 123 RAND" , c7: tuple![ [ ] ] , [ ] => [ int 0 ] , exit_code: 7 ) ;
218
+
219
+ assert_run_vm ! ( "INT 123 SETRAND" , c7: tuple![ ] , [ ] => [ int 0 ] , exit_code: 7 ) ;
220
+ assert_run_vm ! ( "INT 123 SETRAND" , c7: tuple![ [ ] ] , [ ] => [ ] , exit_code: 0 ) ;
221
+
222
+ assert_run_vm ! ( "INT 123 ADDRAND" , c7: tuple![ ] , [ ] => [ int 0 ] , exit_code: 7 ) ;
223
+ assert_run_vm ! ( "INT 123 ADDRAND" , c7: tuple![ [ ] ] , [ ] => [ int 0 ] , exit_code: 7 ) ;
224
+
210
225
let value = uint256 ( "576f8d6b5ac3bcc80844b7d50b1cc6603444bbe7cfcf8fc0aa1ee3c636d9e339" ) ;
211
226
let c7 = tuple ! [ [
212
227
null, // 0
0 commit comments