github.com/vugu/vugu@v0.3.5/vgnode_test.go (about) 1 package vugu 2 3 import ( 4 "sync" 5 "testing" 6 // "github.com/vugu/html" 7 // "github.com/vugu/html/atom" 8 // html "golang.org/x/net/html" 9 // atom "golang.org/x/net/html/atom" 10 ) 11 12 //go:noinline 13 func allocVGNode() *VGNode { 14 var ret VGNode 15 return &ret 16 } 17 18 func BenchmarkAlloc(b *testing.B) { 19 20 b.ResetTimer() 21 22 for i := 0; i < b.N; i++ { 23 v := allocVGNode() 24 _ = v 25 } 26 27 } 28 29 var vgnodePool = sync.Pool{New: func() interface{} { return &VGNode{} }} 30 31 func BenchmarkPool(b *testing.B) { 32 33 objlist := make([]*VGNode, 0, 10) 34 35 b.ResetTimer() 36 37 for i := 0; i < b.N; i++ { 38 v := vgnodePool.Get().(*VGNode) 39 *v = VGNode{} // zero it out 40 41 // stack up 10 at a time and then release them to the pool 42 objlist = append(objlist, v) 43 if len(objlist) >= 10 { 44 for _, o := range objlist { 45 vgnodePool.Put(o) 46 } 47 objlist = objlist[:0] 48 } 49 } 50 51 } 52 53 // func TestFuncPtr(t *testing.T) { 54 55 // s1 := "s1" 56 // s2 := "s2" 57 58 // fA := fp(&s1) 59 // fB := fp(&s1) 60 // fC := fp(&s2) 61 62 // log.Printf("fA()=%v, fB()=%v, fC()=%v", fA(), fB(), fC()) 63 64 // // log.Printf("fA=%v, fB=%v, fC=%v", unsafe.Pointer(fA), unsafe.Pointer(fB), unsafe.Pointer(fC)) 65 // // log.Printf("fA=%v, fB=%v, fC=%v", fA, fB, fC) 66 // log.Printf("fA=%v, fB=%v, fC=%v", reflect.ValueOf(fA).Pointer(), reflect.ValueOf(fB).Pointer(), reflect.ValueOf(fC).Pointer()) 67 68 // log.Printf("fA==fB=%v, fA==fC=%v", fA == fB, fA == fC) 69 70 // } 71 72 // func fp(strp *string) func() string { 73 // // capture one variable 74 // return func() string { 75 // return *strp 76 // } 77 // } 78 79 // func TestParseTemplate(t *testing.T) { 80 81 // assert := assert.New(t) 82 83 // in := ` 84 // <div id="whatever"> 85 // <ul> 86 // <li vg-if=".Test1" vg-range=".Test2" @click="something" :testbind="bound">Blah!</li> 87 // </ul> 88 // </div> 89 // ` 90 91 // n, err := ParseTemplate(bytes.NewReader([]byte(in))) 92 // assert.NoError(err) 93 // assert.NotNil(n) 94 95 // found := false 96 // assert.NoError(n.Walk(func(v *VGNode) error { 97 // if v.Type == ElementNode && v.Data == "li" { 98 // found = true 99 // assert.Equal(".Test1", v.VGIf.Val) 100 // assert.Equal(".Test2", v.VGRange.Val) 101 // assert.Equal("@click", v.EventAttr[0].Key) 102 // assert.Equal(":testbind", v.BindAttr[0].Key) 103 // assert.Equal("bound", v.BindAttr[0].Val) 104 // } 105 // return nil 106 // })) 107 // assert.True(found) 108 109 // } 110 111 // func TestTmp(t *testing.T) { 112 113 // inRaw := []byte(`<li>hello</li> 114 115 // <script type="application/x-go"> 116 117 // type DemoLine struct { 118 // Num int 119 // } 120 121 // </script> 122 // `) 123 124 // nlist, err := html.ParseFragment(bytes.NewReader(inRaw), &html.Node{ 125 // Type: html.ElementNode, 126 // DataAtom: atom.Body, 127 // Data: "body", 128 // }) 129 // if err != nil { 130 // panic(err) 131 // } 132 133 // var buf bytes.Buffer 134 // for i := range nlist { 135 // log.Printf("%#v\n", nlist[i]) 136 // err = html.Render(&buf, nlist[i]) 137 // if err != nil { 138 // panic(err) 139 // } 140 // } 141 142 // log.Printf("OUT: %s", buf.String()) 143 144 // }