github.com/mitranim/gg@v0.1.17/gsql/gsql_arr_test.go (about) 1 package gsql_test 2 3 import ( 4 "testing" 5 6 "github.com/mitranim/gg" 7 "github.com/mitranim/gg/gsql" 8 "github.com/mitranim/gg/gtest" 9 ) 10 11 func TestArrOf(t *testing.T) { 12 defer gtest.Catch(t) 13 14 gtest.Zero(gsql.Arr[int](nil)) 15 gtest.Equal(gsql.ArrOf[int](), gsql.Arr[int](nil)) 16 gtest.Equal(gsql.ArrOf(10), gsql.Arr[int]{10}) 17 gtest.Equal(gsql.ArrOf(10, 20), gsql.Arr[int]{10, 20}) 18 gtest.Equal(gsql.ArrOf(10, 20, 30), gsql.Arr[int]{10, 20, 30}) 19 } 20 21 func TestArr(t *testing.T) { 22 t.Run(`String`, func(t *testing.T) { 23 defer gtest.Catch(t) 24 25 gtest.Str(gsql.Arr[int](nil), ``) 26 gtest.Str(gsql.Arr[int]{}, `{}`) 27 gtest.Str(gsql.Arr[int]{10}, `{10}`) 28 gtest.Str(gsql.Arr[int]{10, 20}, `{10,20}`) 29 gtest.Str(gsql.Arr[int]{10, 20, 30}, `{10,20,30}`) 30 gtest.Str(gsql.Arr[gsql.Arr[int]]{{}, {}}, `{{},{}}`) 31 gtest.Str(gsql.Arr[gsql.Arr[int]]{{10, 20}, {30, 40}}, `{{10,20},{30,40}}`) 32 }) 33 34 t.Run(`Parse`, func(t *testing.T) { 35 defer gtest.Catch(t) 36 37 testParser(``, gsql.Arr[int](nil)) 38 testParser(`{}`, gsql.Arr[int]{}) 39 testParser(`{10}`, gsql.Arr[int]{10}) 40 testParser(`{10,20}`, gsql.Arr[int]{10, 20}) 41 testParser(`{10,20,30}`, gsql.Arr[int]{10, 20, 30}) 42 testParser(`{{},{}}`, gsql.Arr[gsql.Arr[int]]{{}, {}}) 43 testParser(`{{10},{20},{30,40}}`, gsql.Arr[gsql.Arr[int]]{{10}, {20}, {30, 40}}) 44 }) 45 } 46 47 // TODO consider moving to `gtest`. 48 func testParser[ 49 A any, 50 B interface { 51 *A 52 gg.Parser 53 }, 54 ](src string, exp A) { 55 var tar A 56 gtest.NoError(B(&tar).Parse(src)) 57 gtest.Equal(tar, exp) 58 } 59 60 func BenchmarkArr_Append(b *testing.B) { 61 buf := make([]byte, 0, 4096) 62 arr := gsql.ArrOf(10, 20, 30, 40, 50, 60, 70, 80) 63 b.ResetTimer() 64 65 for ind := 0; ind < b.N; ind++ { 66 gg.Nop1(arr.AppendTo(buf)) 67 } 68 } 69 70 func BenchmarkArr_String(b *testing.B) { 71 arr := gsql.ArrOf(10, 20, 30, 40, 50, 60, 70, 80) 72 b.ResetTimer() 73 74 for ind := 0; ind < b.N; ind++ { 75 gg.Nop1(arr.String()) 76 } 77 }