github.com/benz9527/toy-box/algo@v0.0.0-20240221120937-66c0c6bd5abd/dichotomy/dichotomy_test.go (about)

     1  package dichotomy
     2  
     3  import "testing"
     4  
     5  func TestDichotomyIndex(t *testing.T) {
     6  	type args struct {
     7  		nums   []int
     8  		target int
     9  	}
    10  	tests := []struct {
    11  		name string
    12  		args args
    13  		want int
    14  	}{
    15  		{
    16  			name: "1",
    17  			args: args{
    18  				nums: []int{
    19  					1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 10,
    20  				},
    21  				target: 5,
    22  			},
    23  			want: 8,
    24  		},
    25  		{
    26  			name: "2",
    27  			args: args{
    28  				nums: []int{
    29  					1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 11,
    30  				},
    31  				target: 10,
    32  			},
    33  			want: -15, // -14-1
    34  		},
    35  		{
    36  			name: "3",
    37  			args: args{
    38  				nums: []int{
    39  					1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 11,
    40  				},
    41  				target: 12,
    42  			},
    43  			want: -16, // -15-1
    44  		},
    45  		{
    46  			name: "4",
    47  			args: args{
    48  				nums: []int{
    49  					1, 2, 2, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 11,
    50  				},
    51  				target: 3,
    52  			},
    53  			want: -4, // -3-1
    54  		},
    55  	}
    56  	for _, tt := range tests {
    57  		t.Run(tt.name, func(t *testing.T) {
    58  			if got := BinarySearchLastIndex(tt.args.nums, tt.args.target); got != tt.want {
    59  				t.Errorf("BinarySearchLastIndex() = %v, want %v", got, tt.want)
    60  			}
    61  		})
    62  	}
    63  }
    64  
    65  func TestBinarySearchFirstIndex(t *testing.T) {
    66  	type args struct {
    67  		nums   []int
    68  		target int
    69  	}
    70  	tests := []struct {
    71  		name string
    72  		args args
    73  		want int
    74  	}{
    75  		{
    76  			name: "1",
    77  			args: args{
    78  				nums: []int{
    79  					1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 10,
    80  				},
    81  				target: 5,
    82  			},
    83  			want: 4,
    84  		},
    85  		{
    86  			name: "2",
    87  			args: args{
    88  				nums: []int{
    89  					1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 11,
    90  				},
    91  				target: 10,
    92  			},
    93  			want: -15, // -14-1
    94  		},
    95  		{
    96  			name: "3",
    97  			args: args{
    98  				nums: []int{
    99  					1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 11,
   100  				},
   101  				target: 12,
   102  			},
   103  			want: -16, // -15-1
   104  		},
   105  		{
   106  			name: "4",
   107  			args: args{
   108  				nums: []int{
   109  					1, 2, 2, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 11,
   110  				},
   111  				target: 3,
   112  			},
   113  			want: -4, // -3-1
   114  		},
   115  		{
   116  			name: "5",
   117  			args: args{
   118  				nums: []int{
   119  					2, 2, 2, 4, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 11,
   120  				},
   121  				target: 2,
   122  			},
   123  			want: 0,
   124  		},
   125  	}
   126  	for _, tt := range tests {
   127  		t.Run(tt.name, func(t *testing.T) {
   128  			if got := BinarySearchFirstIndex(tt.args.nums, tt.args.target); got != tt.want {
   129  				t.Errorf("BinarySearchFirstIndex() = %v, want %v", got, tt.want)
   130  			}
   131  		})
   132  	}
   133  }