github.com/bobyang007/helper@v1.1.3/reflecth/set_test.go (about)

     1  package reflecth
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  func TestSet(t *testing.T) {
     9  	type myStruct0 struct {
    10  		i int
    11  		s string
    12  	}
    13  
    14  	my0 := myStruct0{}
    15  	myV := ValueOfPtr(&my0)
    16  
    17  	myIV := myV.FieldByName("i")
    18  	Set(myIV, reflect.ValueOf(2))
    19  	if testR := (myStruct0{2, ""}); myV.Interface() != testR {
    20  		t.Errorf("expect %#v, got %#v", testR, myV.Interface())
    21  	}
    22  
    23  	//
    24  	//
    25  	//
    26  
    27  	type myStruct1 struct {
    28  		I int
    29  		S string
    30  	}
    31  
    32  	my1 := myStruct1{}
    33  	myV = ValueOfPtr(&my1)
    34  
    35  	myIV = myV.FieldByName("I")
    36  	Set(myIV, reflect.ValueOf(3))
    37  	if testR := (myStruct1{3, ""}); myV.Interface() != testR {
    38  		t.Errorf("expect %#v, got %#v", testR, myV.Interface())
    39  	}
    40  }
    41  
    42  func BenchmarkSet(b *testing.B) {
    43  	for i := 0; i < b.N; i++ {
    44  		type myStruct0 struct {
    45  			i int
    46  			s string
    47  		}
    48  
    49  		my0 := myStruct0{}
    50  		myV := ValueOfPtr(&my0)
    51  
    52  		myIV := myV.FieldByName("i")
    53  		Set(myIV, reflect.ValueOf(2))
    54  		if myV.Interface() != (myStruct0{2, ""}) {
    55  			b.Errorf("%#v", myV.Interface())
    56  		}
    57  	}
    58  }