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 }