Home | History | Annotate | Download | only in fixedbugs
      1 // errorcheck -0 -race
      2 
      3 // Copyright 2016 The Go Authors. All rights reserved.
      4 // Use of this source code is governed by a BSD-style
      5 // license that can be found in the LICENSE file.
      6 
      7 package foo
      8 
      9 const benchmarkNumNodes = 10000
     10 
     11 func BenchmarkUpdateNodeTransaction(b B) {
     12 	s, nodeIDs := setupNodes(benchmarkNumNodes)
     13 	b.ResetTimer()
     14 	for i := 0; i < b.N(); i++ {
     15 		_ = s.Update(func(tx1 Tx) error {
     16 			_ = UpdateNode(tx1, &Node{
     17 				ID: nodeIDs[i%benchmarkNumNodes],
     18 			})
     19 			return nil
     20 		})
     21 	}
     22 }
     23 
     24 type B interface {
     25 	ResetTimer()
     26 	N() int
     27 }
     28 
     29 type Tx interface {
     30 }
     31 
     32 type Node struct {
     33 	ID string
     34 }
     35 
     36 type MemoryStore struct {
     37 }
     38 
     39 // go:noinline
     40 func setupNodes(n int) (s *MemoryStore, nodeIDs []string) {
     41 	return
     42 }
     43 
     44 //go:noinline
     45 func (s *MemoryStore) Update(cb func(Tx) error) error {
     46 	return nil
     47 }
     48 
     49 var sink interface{}
     50 
     51 //go:noinline
     52 func UpdateNode(tx Tx, n *Node) error {
     53 	sink = tx
     54 	sink = n
     55 	return nil
     56 }
     57