github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/runtimepb/x_test.go (about)

     1  package runtimepb
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"testing"
     7  	"unsafe"
     8  )
     9  
    10  type testStruct struct {
    11  	// i1, i2 int
    12  }
    13  
    14  var preventCompilerOptimization int
    15  
    16  func TestMemoryConsumptionOfMap(t *testing.T) {
    17  
    18  	fLogger, fDumper := AllocLogger()
    19  	lenPrev := 0
    20  
    21  	var m map[int]*testStruct
    22  	m = make(map[int]*testStruct, 10*1000)
    23  
    24  	for i := 0; i < 100*1000; i++ {
    25  
    26  		key := rand.Intn(i + 1)
    27  		ts := testStruct{}
    28  		m[key] = &ts
    29  		if i%10000 == 0 {
    30  			fmt.Printf("%11v | ", len(m)-lenPrev)
    31  			lenPrev = len(m)
    32  			fLogger()
    33  		}
    34  	}
    35  	fmt.Printf("\n")
    36  	// _ = m
    37  	fDumper()
    38  
    39  }
    40  
    41  func TestMapBooleanVsEmpty(t *testing.T) {
    42  
    43  	var bl bool = true
    44  	var empty struct{}
    45  
    46  	const mapSize = 10 * 1000
    47  	const numElements = 10 * 1000
    48  
    49  	fmt.Println("boolean consumes ", unsafe.Sizeof(bl), " byte(s)")
    50  	fmt.Println("empty   consumes ", unsafe.Sizeof(empty), " byte(s)")
    51  
    52  	fLogger, fDumper := AllocLogger()
    53  
    54  	m1 := make(map[int]struct{}, mapSize)
    55  	fLogger()
    56  
    57  	m2 := make(map[int]bool, mapSize)
    58  	fLogger()
    59  
    60  	// fmt.Println(unsafe.Sizeof(m1))
    61  	// fmt.Println(unsafe.Sizeof(m2))
    62  
    63  	cntr := 0
    64  	for i := 0; i < numElements; i++ {
    65  		m1[i] = empty
    66  		if i%(numElements/5) == numElements/5-1 {
    67  			fLogger()
    68  		}
    69  		cntr++
    70  		preventCompilerOptimization = cntr
    71  	}
    72  	fLogger()
    73  
    74  	for i := 0; i < numElements; i++ {
    75  		m2[i] = true
    76  		if i%(numElements/5) == numElements/5-1 {
    77  			fLogger()
    78  		}
    79  		cntr++
    80  		preventCompilerOptimization = cntr
    81  	}
    82  	fDumper()
    83  
    84  }