github.com/vugu/vugu@v0.3.6-0.20240430171613-3f6f402e014b/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  // }