X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fapi%2Frevel%2Futils%2Fsimplestack_test.go;fp=src%2Ffoundation%2Fapi%2Frevel%2Futils%2Fsimplestack_test.go;h=3a9374058f46093ac2521f8538f16cd736ab5f01;hb=1d1ee6961c93781e1187d8c7faa868da6b2f01f4;hp=0000000000000000000000000000000000000000;hpb=56dd5e0f2164b37b40ac1daa188ccc618b4cbd19;p=iec.git diff --git a/src/foundation/api/revel/utils/simplestack_test.go b/src/foundation/api/revel/utils/simplestack_test.go new file mode 100644 index 0000000..3a93740 --- /dev/null +++ b/src/foundation/api/revel/utils/simplestack_test.go @@ -0,0 +1,127 @@ +package utils + +import ( + "testing" +) + +type SimpleStackTest struct { + index int +} + +func TestUnique(b *testing.T) { + stack := NewStackLock(10, 40, func() interface{} { + newone := &SimpleStackTest{} + return newone + }) + values := []interface{}{} + for x := 0; x < 10; x++ { + values = append(values, stack.Pop()) + } + if stack.active != 10 { + b.Errorf("Failed to match 10 active %v ", stack.active) + } + value1 := stack.Pop().(*SimpleStackTest) + value1.index = stack.active + value2 := stack.Pop().(*SimpleStackTest) + value2.index = stack.active + value3 := stack.Pop().(*SimpleStackTest) + value3.index = stack.active + + if !isDifferent(value1, value2, value3) { + b.Errorf("Failed to get unique values") + } + + if stack.active != 13 { + b.Errorf("Failed to match 13 active %v ", stack.active) + } + + for _, v := range values { + stack.Push(v) + } + if stack.len != 10 { + b.Errorf("Failed to match 10 len %v ", stack.len) + } + if stack.capacity != 10 { + b.Errorf("Failed to capacity 10 len %v ", stack.capacity) + } + + stack.Push(value1) + stack.Push(value2) + stack.Push(value3) + if stack.capacity != 13 { + b.Errorf("Failed to capacity 13 len %v ", stack.capacity) + } + + value1 = stack.Pop().(*SimpleStackTest) + value2 = stack.Pop().(*SimpleStackTest) + value3 = stack.Pop().(*SimpleStackTest) + println(value1, value2, value3) + if !isDifferent(value1, value2, value3) { + b.Errorf("Failed to get unique values") + } + +} +func TestLimits(b *testing.T) { + stack := NewStackLock(10, 20, func() interface{} { + newone := &SimpleStackTest{} + return newone + }) + values := []interface{}{} + for x := 0; x < 50; x++ { + values = append(values, stack.Pop()) + } + if stack.active != 50 { + b.Errorf("Failed to match 50 active %v ", stack.active) + } + for _, v := range values { + stack.Push(v) + } + if stack.Capacity() != 20 { + b.Errorf("Failed to match 20 capcity %v ", stack.Capacity()) + } + +} +func isDifferent(values ...*SimpleStackTest) bool { + if len(values) == 2 { + return values[0] != values[1] + } + for _, v := range values[1:] { + if values[0] == v { + return false + } + } + return isDifferent(values[1:]...) +} + +func BenchmarkCreateWrite(b *testing.B) { + stack := NewStackLock(0, 40, func() interface{} { return &SimpleStackTest{} }) + for x := 0; x < b.N; x++ { + stack.Push(x) + } +} +func BenchmarkAllocWrite(b *testing.B) { + stack := NewStackLock(b.N, b.N+100, func() interface{} { return &SimpleStackTest{} }) + for x := 0; x < b.N; x++ { + stack.Push(x) + } +} +func BenchmarkCreate(b *testing.B) { + NewStackLock(b.N, b.N+100, func() interface{} { return &SimpleStackTest{} }) +} +func BenchmarkParrallel(b *testing.B) { + stack := NewStackLock(b.N, b.N+100, func() interface{} { return &SimpleStackTest{} }) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + for x := 0; x < 50000; x++ { + stack.Push(x) + } + } + }) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + for x := 0; x < 50000; x++ { + stack.Pop() + } + } + }) +}