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  }