github.com/mitranim/gg@v0.1.17/ord_set_test.go (about)

     1  package gg_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/mitranim/gg"
     7  	"github.com/mitranim/gg/gtest"
     8  )
     9  
    10  func TestOrdSetOf(t *testing.T) {
    11  	defer gtest.Catch(t)
    12  
    13  	gtest.Zero(gg.OrdSetOf[int]())
    14  
    15  	gtest.Equal(
    16  		gg.OrdSetOf(10, 30, 20, 20, 10),
    17  		gg.OrdSet[int]{
    18  			Slice: []int{10, 30, 20},
    19  			Index: gg.SetOf(10, 20, 30),
    20  		},
    21  	)
    22  }
    23  
    24  func TestOrdSetFrom(t *testing.T) {
    25  	defer gtest.Catch(t)
    26  
    27  	gtest.Zero(gg.OrdSetFrom[[]int, int]())
    28  
    29  	gtest.Equal(
    30  		gg.OrdSetFrom([]int{10, 30}, []int{20, 20, 10}),
    31  		gg.OrdSet[int]{
    32  			Slice: []int{10, 30, 20},
    33  			Index: gg.SetOf(10, 20, 30),
    34  		},
    35  	)
    36  }
    37  
    38  func TestOrdSet(t *testing.T) {
    39  	defer gtest.Catch(t)
    40  
    41  	t.Run(`Has`, func(t *testing.T) {
    42  		defer gtest.Catch(t)
    43  
    44  		gtest.False(gg.OrdSetOf[int]().Has(0))
    45  		gtest.False(gg.OrdSetOf[int]().Has(10))
    46  		gtest.False(gg.OrdSetOf[int](10).Has(20))
    47  		gtest.True(gg.OrdSetOf[int](10).Has(10))
    48  		gtest.True(gg.OrdSetOf[int](10, 20).Has(10))
    49  		gtest.True(gg.OrdSetOf[int](10, 20).Has(20))
    50  	})
    51  
    52  	t.Run(`Add`, func(t *testing.T) {
    53  		defer gtest.Catch(t)
    54  
    55  		var tar gg.OrdSet[int]
    56  
    57  		tar.Add(10)
    58  		gtest.Equal(tar, gg.OrdSetOf(10))
    59  
    60  		tar.Add(20)
    61  		gtest.Equal(tar, gg.OrdSetOf(10, 20))
    62  
    63  		tar.Add(10, 10)
    64  		gtest.Equal(tar, gg.OrdSetOf(10, 20))
    65  
    66  		tar.Add(20, 20)
    67  		gtest.Equal(tar, gg.OrdSetOf(10, 20))
    68  
    69  		tar.Add(40, 30)
    70  		gtest.Equal(tar, gg.OrdSetOf(10, 20, 40, 30))
    71  	})
    72  
    73  	t.Run(`Clear`, func(t *testing.T) {
    74  		defer gtest.Catch(t)
    75  
    76  		tar := gg.OrdSetOf(10, 20, 30)
    77  		gtest.NotZero(tar)
    78  
    79  		tar.Clear()
    80  		gtest.Zero(tar)
    81  	})
    82  
    83  	t.Run(`MarshalJSON`, func(t *testing.T) {
    84  		defer gtest.Catch(t)
    85  
    86  		gtest.Eq(gg.JsonString(gg.OrdSet[int]{}), `null`)
    87  
    88  		gtest.Eq(
    89  			gg.JsonString(gg.OrdSetOf(20, 10, 30)),
    90  			`[20,10,30]`,
    91  		)
    92  	})
    93  
    94  	t.Run(`UnmarshalJSON`, func(t *testing.T) {
    95  		defer gtest.Catch(t)
    96  
    97  		gtest.Equal(
    98  			gg.JsonParseTo[gg.OrdSet[int]](`[20, 10, 30]`),
    99  			gg.OrdSetOf(20, 10, 30),
   100  		)
   101  	})
   102  }