github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/xslices/diff_test.go (about)

     1  package xslices
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestDiff(t *testing.T) {
    10  	for _, tt := range []struct {
    11  		name     string
    12  		previous []int
    13  		newest   []int
    14  		steady   []int
    15  		added    []int
    16  		dropped  []int
    17  	}{
    18  		{
    19  			name: "WithoutChanges",
    20  			previous: []int{
    21  				2,
    22  				1,
    23  				0,
    24  				3,
    25  			},
    26  			newest: []int{
    27  				1,
    28  				3,
    29  				2,
    30  				0,
    31  			},
    32  			steady: []int{
    33  				0,
    34  				1,
    35  				2,
    36  				3,
    37  			},
    38  			added:   []int{},
    39  			dropped: []int{},
    40  		},
    41  		{
    42  			name: "OnlyAdded",
    43  			previous: []int{
    44  				1,
    45  				0,
    46  				3,
    47  			},
    48  			newest: []int{
    49  				1,
    50  				3,
    51  				2,
    52  				0,
    53  			},
    54  			steady: []int{
    55  				0,
    56  				1,
    57  				3,
    58  			},
    59  			added: []int{
    60  				2,
    61  			},
    62  			dropped: []int{},
    63  		},
    64  		{
    65  			name: "OnlyAddedWithDuplicatesInPrevious",
    66  			previous: []int{
    67  				1,
    68  				0,
    69  				1,
    70  				3,
    71  			},
    72  			newest: []int{
    73  				1,
    74  				3,
    75  				2,
    76  				0,
    77  			},
    78  			steady: []int{
    79  				0,
    80  				1,
    81  				3,
    82  			},
    83  			added: []int{
    84  				2,
    85  			},
    86  			dropped: []int{
    87  				1,
    88  			},
    89  		},
    90  		{
    91  			name: "OnlyAddedWithDuplicatesInNewest",
    92  			previous: []int{
    93  				1,
    94  				0,
    95  				3,
    96  			},
    97  			newest: []int{
    98  				1,
    99  				1,
   100  				3,
   101  				1,
   102  				2,
   103  				0,
   104  			},
   105  			steady: []int{
   106  				0,
   107  				1,
   108  				3,
   109  			},
   110  			added: []int{
   111  				1,
   112  				1,
   113  				2,
   114  			},
   115  			dropped: []int{},
   116  		},
   117  		{
   118  			name: "OnlyDropped",
   119  			previous: []int{
   120  				1,
   121  				2,
   122  				0,
   123  				3,
   124  			},
   125  			newest: []int{
   126  				1,
   127  				3,
   128  				0,
   129  			},
   130  			steady: []int{
   131  				0,
   132  				1,
   133  				3,
   134  			},
   135  			added: []int{},
   136  			dropped: []int{
   137  				2,
   138  			},
   139  		},
   140  		{
   141  			name: "AddedAndDropped1",
   142  			previous: []int{
   143  				4,
   144  				7,
   145  				8,
   146  			},
   147  			newest: []int{
   148  				1,
   149  				3,
   150  				0,
   151  			},
   152  			steady: []int{},
   153  			added: []int{
   154  				0,
   155  				1,
   156  				3,
   157  			},
   158  			dropped: []int{
   159  				4,
   160  				7,
   161  				8,
   162  			},
   163  		},
   164  		{
   165  			name: "AddedAndDropped2",
   166  			previous: []int{
   167  				1,
   168  				3,
   169  				0,
   170  			},
   171  			newest: []int{
   172  				4,
   173  				7,
   174  				8,
   175  			},
   176  			steady: []int{},
   177  			added: []int{
   178  				4,
   179  				7,
   180  				8,
   181  			},
   182  			dropped: []int{
   183  				0,
   184  				1,
   185  				3,
   186  			},
   187  		},
   188  		{
   189  			name: "AddedWithDuplicates",
   190  			previous: []int{
   191  				1,
   192  				3,
   193  				3,
   194  				0,
   195  			},
   196  			newest: []int{
   197  				4,
   198  				7,
   199  				7,
   200  				8,
   201  			},
   202  			steady: []int{},
   203  			added: []int{
   204  				4,
   205  				7,
   206  				7,
   207  				8,
   208  			},
   209  			dropped: []int{
   210  				0,
   211  				1,
   212  				3,
   213  				3,
   214  			},
   215  		},
   216  	} {
   217  		t.Run(tt.name, func(t *testing.T) {
   218  			steady, added, dropped := Diff(tt.previous, tt.newest, func(lhs, rhs int) int {
   219  				return lhs - rhs
   220  			})
   221  			require.Equal(t, tt.added, added)
   222  			require.Equal(t, tt.dropped, dropped)
   223  			require.Equal(t, tt.steady, steady)
   224  		})
   225  	}
   226  }