github.com/moontrade/nogc@v0.1.7/collections/tree/art_test.go (about)

     1  package tree
     2  
     3  //func TestLock(t *testing.T) {
     4  //	//SleepUnsafe(time.Minute)
     5  //	l := synchronization.NewLock()
     6  //	//l.Lock()
     7  //	l.LockUnsafe()
     8  //	l.UnlockUnsafe()
     9  //
    10  //	wg := &sync.WaitGroup{}
    11  //	wg.Add(2)
    12  //	go func() {
    13  //		defer wg.Done()
    14  //		println("go 1 before")
    15  //		l.LockUnsafe()
    16  //		println("go 1 after. waiting 2 seconds...")
    17  //		synchronization.SleepUnsafe(time.Second * 2)
    18  //		l.UnlockUnsafe()
    19  //	}()
    20  //
    21  //	go func() {
    22  //		defer wg.Done()
    23  //		println("go 2 before. waiting 2 seconds...")
    24  //		synchronization.SleepUnsafe(time.Second * 2)
    25  //		//time.Sleep(time.Second*2)
    26  //		l.Unlock()
    27  //		synchronization.SleepUnsafe(time.Second)
    28  //		l.LockUnsafe()
    29  //		println("go 2 after")
    30  //		l.UnlockUnsafe()
    31  //	}()
    32  //
    33  //	wg.Wait()
    34  //}
    35  //
    36  //func BenchmarkRWLock_Lock(b *testing.B) {
    37  //	l := synchronization.NewLock()
    38  //	b.Run("Unsafe", func(b *testing.B) {
    39  //		for i := 0; i < b.N; i++ {
    40  //			l.LockUnsafe()
    41  //			l.UnlockUnsafe()
    42  //		}
    43  //	})
    44  //
    45  //	b.Run("Shared Unsafe", func(b *testing.B) {
    46  //		for i := 0; i < b.N; i++ {
    47  //			l.LockSharedUnsafe()
    48  //			l.UnlockSharedUnsafe()
    49  //		}
    50  //	})
    51  //	b.Run("Shared Safe", func(b *testing.B) {
    52  //		for i := 0; i < b.N; i++ {
    53  //			l.LockShared()
    54  //			l.UnlockShared()
    55  //		}
    56  //	})
    57  //	mut := &sync.Mutex{}
    58  //	b.Run("Go Mutex", func(b *testing.B) {
    59  //		for i := 0; i < b.N; i++ {
    60  //			mut.Lock()
    61  //			mut.Unlock()
    62  //		}
    63  //	})
    64  //
    65  //	rw := &sync.RWMutex{}
    66  //	b.Run("Go RWMutex Lock/Unlock", func(b *testing.B) {
    67  //		for i := 0; i < b.N; i++ {
    68  //			rw.Lock()
    69  //			rw.Unlock()
    70  //		}
    71  //	})
    72  //
    73  //	b.Run("Go RWMutex RLock/RUnlock", func(b *testing.B) {
    74  //		for i := 0; i < b.N; i++ {
    75  //			rw.RLock()
    76  //			rw.RUnlock()
    77  //		}
    78  //	})
    79  //}
    80  
    81  //func TestNew2(t *testing.T) {
    82  //	println("sizeof Leaf", unsafe.Sizeof(Leaf{}))
    83  //	art, _ := NewART()
    84  //	art.InsertBytes(nogc.BytesOfString("hello"), Value{
    85  //		Data: 3,
    86  //	})
    87  //	art.InsertBytes(nogc.BytesOfString("below"), Value{
    88  //		Data: 3,
    89  //	})
    90  //	art.InsertString("hello01", Value{
    91  //		Data: 3,
    92  //	})
    93  //	found := art.FindBytes(nogc.BytesOfString("hello"))
    94  //	fmt.Println("found", found)
    95  //	println("size", art.Size())
    96  //	min := art.Minimum()
    97  //	println("min", uint(min.Data()), "key", min.Key().String())
    98  //	max := art.Maximum()
    99  //	println("max", uint(max.Data()), "key", max.Key().String())
   100  //	art.Free()
   101  //}
   102  //
   103  //func TestBytes(t *testing.T) {
   104  //	art, _ := NewART()
   105  //	key := nogc.AllocBytes(8)
   106  //
   107  //	//println(art.String())
   108  //	for i := 0; i < 1000; i++ {
   109  //		key.SetInt64BE(0, int64(i))
   110  //		art.InsertBytes(key, Value{
   111  //			Data: 3,
   112  //		})
   113  //	}
   114  //	fmt.Println("1000:			", art.Bytes())
   115  //	for i := 1000; i < 10000; i++ {
   116  //		key.SetInt64BE(0, int64(i))
   117  //		art.InsertBytes(key, Value{
   118  //			Data: 3,
   119  //		})
   120  //	}
   121  //	fmt.Println("10000:			", art.Bytes())
   122  //	for i := 10000; i < 100000; i++ {
   123  //		key.SetInt64BE(0, int64(i))
   124  //		art.InsertBytes(key, Value{
   125  //			Data: 3,
   126  //		})
   127  //	}
   128  //	fmt.Println("100000:			", art.Bytes())
   129  //	for i := 100000; i < 1000000; i++ {
   130  //		key.SetInt64BE(0, int64(i))
   131  //		art.InsertBytes(key, Value{
   132  //			Data: 3,
   133  //		})
   134  //	}
   135  //	fmt.Println("10000:			", art.Bytes())
   136  //}
   137  //
   138  //func BenchmarkTree_Insert2(b *testing.B) {
   139  //	b.Run("insert int32BE", func(b *testing.B) {
   140  //		art, _ := NewART()
   141  //		key := nogc.AllocBytes(4)
   142  //
   143  //		//println(art.String())
   144  //		b.ResetTimer()
   145  //		b.ReportAllocs()
   146  //		for i := 0; i < b.N; i++ {
   147  //			key.SetInt32BE(0, int32(i))
   148  //			art.InsertBytes(key, Value{
   149  //				Data: 3,
   150  //			})
   151  //		}
   152  //		b.StopTimer()
   153  //		art.Free()
   154  //		key.Free()
   155  //	})
   156  //	b.Run("insert int32LE", func(b *testing.B) {
   157  //		art, _ := NewART()
   158  //		key := nogc.AllocBytes(4)
   159  //
   160  //		//println(art.String())
   161  //		b.ResetTimer()
   162  //		b.ReportAllocs()
   163  //		for i := 0; i < b.N; i++ {
   164  //			key.SetInt32LE(0, int32(i))
   165  //			art.InsertBytes(key, Value{
   166  //				Data: 3,
   167  //			})
   168  //		}
   169  //		b.StopTimer()
   170  //		fmt.Println("art bytes", art.Bytes())
   171  //		fmt.Println("art size", art.Size())
   172  //		art.Free()
   173  //		key.Free()
   174  //	})
   175  //	b.Run("insert int64BE", func(b *testing.B) {
   176  //		art, _ := NewART()
   177  //		key := nogc.AllocBytes(8)
   178  //
   179  //		//println(art.String())
   180  //		b.ResetTimer()
   181  //		b.ReportAllocs()
   182  //		for i := 0; i < b.N; i++ {
   183  //			key.SetInt64BE(0, int64(i))
   184  //			art.InsertBytes(key, Value{
   185  //				Data: 3,
   186  //			})
   187  //		}
   188  //		b.StopTimer()
   189  //		fmt.Println("art bytes", art.Bytes())
   190  //		fmt.Println("art size", art.Size())
   191  //		art.Free()
   192  //		key.Free()
   193  //	})
   194  //	b.Run("insert int64LE", func(b *testing.B) {
   195  //		art, _ := NewART()
   196  //		key := nogc.AllocBytes(8)
   197  //
   198  //		//println(art.String())
   199  //		b.ResetTimer()
   200  //		b.ReportAllocs()
   201  //		for i := 0; i < b.N; i++ {
   202  //			key.SetInt64LE(0, int64(i))
   203  //			art.InsertBytes(key, Value{
   204  //				Data: 3,
   205  //			})
   206  //		}
   207  //		b.StopTimer()
   208  //		art.Free()
   209  //		key.Free()
   210  //	})
   211  //	b.Run("insert int64 PointerSet", func(b *testing.B) {
   212  //		m := nogc.NewPointerSet(uintptr(b.N * 2))
   213  //		key := nogc.AllocBytes(8)
   214  //
   215  //		var mu sync.Mutex
   216  //		//println(art.String())
   217  //		b.ResetTimer()
   218  //		b.ReportAllocs()
   219  //		for i := 0; i < b.N; i++ {
   220  //			key.SetInt64BE(0, int64(i))
   221  //			mu.Lock()
   222  //			m.Put(uintptr(i))
   223  //			mu.Unlock()
   224  //		}
   225  //		b.StopTimer()
   226  //		key.Free()
   227  //		_ = m.Close()
   228  //	})
   229  //	b.Run("insert int64 gomap", func(b *testing.B) {
   230  //		m := make(map[int64]struct{}, b.N*2)
   231  //		key := nogc.AllocBytes(8)
   232  //
   233  //		var mu sync.Mutex
   234  //		b.ResetTimer()
   235  //		b.ReportAllocs()
   236  //		for i := 0; i < b.N; i++ {
   237  //			mu.Lock()
   238  //			m[int64(i)] = struct{}{}
   239  //			mu.Unlock()
   240  //		}
   241  //		b.StopTimer()
   242  //		key.Free()
   243  //	})
   244  //	//b.Run("insert int64 BTree HINT", func(b *testing.B) {
   245  //	//	m := NewBTree(unsafe.Sizeof(BTreeRecordInt64{}), 64, BTreeInt64Compare(), 0)
   246  //	//	key := nogc.AllocBytes(8)
   247  //	//
   248  //	//	var mu sync.Mutex
   249  //	//	hint := uint64(0)
   250  //	//	b.ResetTimer()
   251  //	//	b.ReportAllocs()
   252  //	//	for i := 0; i < b.N; i++ {
   253  //	//		mu.Lock()
   254  //	//		m.SetHint(int64(i), 101, &hint)
   255  //	//		mu.Unlock()
   256  //	//	}
   257  //	//	b.StopTimer()
   258  //	//	key.Free()
   259  //	//})
   260  //}
   261  //
   262  //func BenchmarkTree_Find2(b *testing.B) {
   263  //	runInt64BE := func(entries int) {
   264  //		b.Run("int64BE "+strconv.Itoa(entries)+" entries", func(b *testing.B) {
   265  //			art, _ := NewART()
   266  //			defer art.Free()
   267  //			key := nogc.AllocBytes(8)
   268  //			defer key.Free()
   269  //
   270  //			for i := 0; i < entries; i++ {
   271  //				key.SetInt64BE(0, int64(i))
   272  //				art.InsertBytes(key, Value{
   273  //					Data: 3,
   274  //				})
   275  //			}
   276  //			//key.SetInt64BE(0, int64(entries/2))
   277  //			b.ResetTimer()
   278  //			b.ReportAllocs()
   279  //			for i := 0; i < b.N; i++ {
   280  //				key.SetInt64BE(0, int64(i))
   281  //				art.FindBytes(key)
   282  //			}
   283  //			b.StopTimer()
   284  //		})
   285  //	}
   286  //	runInt64BE(10)
   287  //	runInt64BE(100)
   288  //	runInt64BE(1000)
   289  //	runInt64BE(10000)
   290  //	runInt64BE(100000)
   291  //	runInt64BE(1000000)
   292  //	//runInt64BE(10000000)
   293  //}