github.com/cilium/ebpf@v0.15.1-0.20240517100537-8079b37aa138/asm/dsl_test.go (about)

     1  package asm
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestDSL(t *testing.T) {
     8  	testcases := []struct {
     9  		name string
    10  		have Instruction
    11  		want Instruction
    12  	}{
    13  		{"Call", FnMapLookupElem.Call(), Instruction{OpCode: 0x85, Constant: 1}},
    14  		{"Exit", Return(), Instruction{OpCode: 0x95}},
    15  		{"LoadAbs", LoadAbs(2, Byte), Instruction{OpCode: 0x30, Constant: 2}},
    16  		{"Store", StoreMem(RFP, -4, R0, Word), Instruction{
    17  			OpCode: 0x63,
    18  			Dst:    RFP,
    19  			Src:    R0,
    20  			Offset: -4,
    21  		}},
    22  		{"Add.Imm", Add.Imm(R1, 22), Instruction{OpCode: 0x07, Dst: R1, Constant: 22}},
    23  		{"Add.Reg", Add.Reg(R1, R2), Instruction{OpCode: 0x0f, Dst: R1, Src: R2}},
    24  		{"Add.Imm32", Add.Imm32(R1, 22), Instruction{
    25  			OpCode: 0x04, Dst: R1, Constant: 22,
    26  		}},
    27  		{"JSGT.Imm", JSGT.Imm(R1, 4, "foo"), Instruction{
    28  			OpCode: 0x65, Dst: R1, Constant: 4, Offset: -1,
    29  		}.WithReference("foo")},
    30  		{"JSGT.Imm32", JSGT.Imm32(R1, -2, "foo"), Instruction{
    31  			OpCode: 0x66, Dst: R1, Constant: -2, Offset: -1,
    32  		}.WithReference("foo")},
    33  		{"JSLT.Reg", JSLT.Reg(R1, R2, "foo"), Instruction{
    34  			OpCode: 0xcd, Dst: R1, Src: R2, Offset: -1,
    35  		}.WithReference("foo")},
    36  		{"JSLT.Reg32", JSLT.Reg32(R1, R3, "foo"), Instruction{
    37  			OpCode: 0xce, Dst: R1, Src: R3, Offset: -1,
    38  		}.WithReference("foo")},
    39  	}
    40  
    41  	for _, tc := range testcases {
    42  		if !tc.have.equal(tc.want) {
    43  			t.Errorf("%s: have %v, want %v", tc.name, tc.have, tc.want)
    44  		}
    45  	}
    46  }