@@ -371,3 +371,63 @@ fn test_shl_shr_too_few_args() {
371
371
let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
372
372
}
373
373
}
374
+
375
+
376
+ #[ test]
377
+ fn test_or_and_correct_types ( ) {
378
+ for instr in vec ! [
379
+ Bytecode :: Or ,
380
+ Bytecode :: And ,
381
+ ] {
382
+ let code = vec ! [ Bytecode :: LdFalse , Bytecode :: LdTrue , instr. clone( ) ] ;
383
+ let module = make_module ( code) ;
384
+ let fun_context = get_fun_context ( & module) ;
385
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
386
+ assert ! ( result. is_ok( ) ) ;
387
+ }
388
+ }
389
+
390
+ #[ test]
391
+ fn test_or_and_wrong_types ( ) {
392
+ for instr in vec ! [
393
+ Bytecode :: Or ,
394
+ Bytecode :: And ,
395
+ ] {
396
+ let code = vec ! [ Bytecode :: LdU32 ( 42 ) , Bytecode :: LdTrue , instr. clone( ) ] ;
397
+ let module = make_module ( code) ;
398
+ let fun_context = get_fun_context ( & module) ;
399
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
400
+ assert_eq ! (
401
+ result. unwrap_err( ) . major_status( ) ,
402
+ StatusCode :: BOOLEAN_OP_TYPE_MISMATCH_ERROR
403
+ ) ;
404
+
405
+ let code = vec ! [ Bytecode :: LdTrue , Bytecode :: LdU64 ( 42 ) , instr. clone( ) ] ;
406
+ let module = make_module ( code) ;
407
+ let fun_context = get_fun_context ( & module) ;
408
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
409
+ assert_eq ! (
410
+ result. unwrap_err( ) . major_status( ) ,
411
+ StatusCode :: BOOLEAN_OP_TYPE_MISMATCH_ERROR
412
+ ) ;
413
+ }
414
+ }
415
+
416
+ #[ test]
417
+ #[ should_panic]
418
+ fn test_or_and_too_few_args ( ) {
419
+ for instr in vec ! [
420
+ Bytecode :: Or ,
421
+ Bytecode :: And ,
422
+ ] {
423
+ let code = vec ! [ Bytecode :: LdTrue , instr. clone( ) ] ;
424
+ let module = make_module ( code) ;
425
+ let fun_context = get_fun_context ( & module) ;
426
+ let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
427
+
428
+ let code = vec ! [ instr. clone( ) ] ;
429
+ let module = make_module ( code) ;
430
+ let fun_context = get_fun_context ( & module) ;
431
+ let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
432
+ }
433
+ }
0 commit comments