TestVM_DirectCallOpcodes tests the specialized call opcodes directly
(t *testing.T)
| 594 | |
| 595 | // TestVM_DirectCallOpcodes tests the specialized call opcodes directly |
| 596 | func TestVM_DirectCallOpcodes(t *testing.T) { |
| 597 | tests := []struct { |
| 598 | name string |
| 599 | bytecode []vm.Opcode |
| 600 | args []int |
| 601 | consts []any |
| 602 | funcs []vm.Function |
| 603 | want any |
| 604 | wantErr bool |
| 605 | }{ |
| 606 | { |
| 607 | name: "OpCall0", |
| 608 | bytecode: []vm.Opcode{vm.OpCall0}, |
| 609 | args: []int{0}, |
| 610 | funcs: []vm.Function{ |
| 611 | func(args ...any) (any, error) { |
| 612 | return 42, nil |
| 613 | }, |
| 614 | }, |
| 615 | want: 42, |
| 616 | }, |
| 617 | { |
| 618 | name: "OpCall1", |
| 619 | bytecode: []vm.Opcode{ |
| 620 | vm.OpPush, |
| 621 | vm.OpCall1, |
| 622 | }, |
| 623 | args: []int{0, 0}, |
| 624 | consts: []any{10}, |
| 625 | funcs: []vm.Function{ |
| 626 | func(args ...any) (any, error) { |
| 627 | return args[0].(int) * 2, nil |
| 628 | }, |
| 629 | }, |
| 630 | want: 20, |
| 631 | }, |
| 632 | { |
| 633 | name: "OpCall2", |
| 634 | bytecode: []vm.Opcode{ |
| 635 | vm.OpPush, |
| 636 | vm.OpPush, |
| 637 | vm.OpCall2, |
| 638 | }, |
| 639 | args: []int{0, 1, 0}, |
| 640 | consts: []any{10, 5}, |
| 641 | funcs: []vm.Function{ |
| 642 | func(args ...any) (any, error) { |
| 643 | return args[0].(int) + args[1].(int), nil |
| 644 | }, |
| 645 | }, |
| 646 | want: 15, |
| 647 | }, |
| 648 | { |
| 649 | name: "OpCall3", |
| 650 | bytecode: []vm.Opcode{ |
| 651 | vm.OpPush, |
| 652 | vm.OpPush, |
| 653 | vm.OpPush, |