Skip to content

Commit f99ceb7

Browse files
authored
UnitTestBot Go. Slices support (#1868)
* Add slices support * Delete print * Fix nil slice. Fix method equals for byte and rune types * Update samples * Update Go README
1 parent a3c7648 commit f99ceb7

File tree

17 files changed

+607
-164
lines changed

17 files changed

+607
-164
lines changed

utbot-go/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ inserts these values into the user functions, and executes the resulting test ca
1515

1616
### Supported types for function parameters
1717

18-
At the moment, UnitTestBot Go is able to generate values for _primitive types_, _arrays_ and _structs_.
18+
At the moment, UnitTestBot Go is able to generate values for _primitive types_, _arrays_, _slices_ and _structs_.
1919

2020
For _floating point types_, UnitTestBot Go supports working with _infinity_ and _NaN_.
2121

utbot-go/go-samples/simple/samples.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func GetCoordinatesOfMiddleBetweenTwoPoints(a, b Point) (float64, float64) {
5252
return (a.x + b.x) / 2, (a.y + b.y) / 2
5353
}
5454

55-
func GetCoordinateSumOfPoints(points [10]Point) (float64, float64) {
55+
func GetCoordinateSumOfPoints(points []Point) (float64, float64) {
5656
sumX := 0.0
5757
sumY := 0.0
5858
for _, point := range points {
@@ -91,7 +91,7 @@ var ErrNotFound = errors.New("target not found in array")
9191
// Binary search for target within a sorted array by repeatedly dividing the array in half and comparing the midpoint with the target.
9292
// This function uses recursive call to itself.
9393
// If a target is found, the index of the target is returned. Else the function return -1 and ErrNotFound.
94-
func Binary(array [10]int, target int, lowIndex int, highIndex int) (int, error) {
94+
func Binary(array []int, target int, lowIndex int, highIndex int) (int, error) {
9595
if highIndex < lowIndex {
9696
return -1, ErrNotFound
9797
}

utbot-go/go-samples/simple/samples_go_ut_test.go

Lines changed: 90 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,37 @@ import (
66
)
77

88
func TestDivOrPanicByUtGoFuzzer(t *testing.T) {
9-
actualVal := DivOrPanic(9223372036854775807, -1)
9+
actualVal := DivOrPanic(0, 1)
1010

11-
assert.Equal(t, -9223372036854775807, actualVal)
11+
assert.Equal(t, 0, actualVal)
1212
}
1313

1414
func TestDivOrPanicPanicsByUtGoFuzzer(t *testing.T) {
15-
assert.PanicsWithValue(t, "div by 0", func() { DivOrPanic(9223372036854775807, 0) })
15+
assert.PanicsWithValue(t, "div by 0", func() { DivOrPanic(1, 0) })
1616
}
1717

1818
func TestExtendedByUtGoFuzzer1(t *testing.T) {
19-
actualVal0, actualVal1, actualVal2 := Extended(9223372036854775807, -1)
19+
actualVal0, actualVal1, actualVal2 := Extended(9223372036854775807, 0)
2020

2121
assertMultiple := assert.New(t)
22-
assertMultiple.Equal(int64(-1), actualVal0)
23-
assertMultiple.Equal(int64(0), actualVal1)
24-
assertMultiple.Equal(int64(1), actualVal2)
22+
assertMultiple.Equal(int64(9223372036854775807), actualVal0)
23+
assertMultiple.Equal(int64(1), actualVal1)
24+
assertMultiple.Equal(int64(0), actualVal2)
2525
}
2626

2727
func TestExtendedByUtGoFuzzer2(t *testing.T) {
28-
actualVal0, actualVal1, actualVal2 := Extended(0, 9223372036854775807)
28+
actualVal0, actualVal1, actualVal2 := Extended(0, -9223372036854775808)
2929

3030
assertMultiple := assert.New(t)
31-
assertMultiple.Equal(int64(9223372036854775807), actualVal0)
31+
assertMultiple.Equal(int64(-9223372036854775808), actualVal0)
3232
assertMultiple.Equal(int64(0), actualVal1)
3333
assertMultiple.Equal(int64(1), actualVal2)
3434
}
3535

3636
func TestArraySumByUtGoFuzzer(t *testing.T) {
37-
actualVal := ArraySum([5]int{-1, 0, 0, 0, 0})
37+
actualVal := ArraySum([5]int{1, 0, 0, 0, 0})
3838

39-
assert.Equal(t, -1, actualVal)
39+
assert.Equal(t, 1, actualVal)
4040
}
4141

4242
func TestGenerateArrayOfIntegersByUtGoFuzzer(t *testing.T) {
@@ -46,31 +46,71 @@ func TestGenerateArrayOfIntegersByUtGoFuzzer(t *testing.T) {
4646
}
4747

4848
func TestDistanceBetweenTwoPointsByUtGoFuzzer(t *testing.T) {
49-
actualVal := DistanceBetweenTwoPoints(Point{x: 0.730967787376657, y: 0.730967787376657}, Point{x: 0.730967787376657, y: 0.730967787376657})
49+
actualVal := DistanceBetweenTwoPoints(Point{x: 0.990722785714783, y: 0.990722785714783}, Point{x: 2.0, y: 2.0})
5050

51-
assert.Equal(t, 0.0, actualVal)
51+
assert.Equal(t, 1.4273335246362906, actualVal)
5252
}
5353

5454
func TestGetCoordinatesOfMiddleBetweenTwoPointsByUtGoFuzzer(t *testing.T) {
55-
actualVal0, actualVal1 := GetCoordinatesOfMiddleBetweenTwoPoints(Point{x: 0.24053641567148587, y: 0.24053641567148587}, Point{x: 0.24053641567148587, y: 0.24053641567148587})
55+
actualVal0, actualVal1 := GetCoordinatesOfMiddleBetweenTwoPoints(Point{x: 0.4872328470301428, y: 0.4872328470301428}, Point{x: 2.0, y: 2.0})
56+
57+
assertMultiple := assert.New(t)
58+
assertMultiple.Equal(1.2436164235150713, actualVal0)
59+
assertMultiple.Equal(1.2436164235150713, actualVal1)
60+
}
61+
62+
func TestGetCoordinateSumOfPointsByUtGoFuzzer1(t *testing.T) {
63+
actualVal0, actualVal1 := GetCoordinateSumOfPoints([]Point{{x: 0.7462414053223305, y: 0.7462414053223305}})
64+
65+
assertMultiple := assert.New(t)
66+
assertMultiple.Equal(0.7462414053223305, actualVal0)
67+
assertMultiple.Equal(0.7462414053223305, actualVal1)
68+
}
69+
70+
func TestGetCoordinateSumOfPointsByUtGoFuzzer2(t *testing.T) {
71+
actualVal0, actualVal1 := GetCoordinateSumOfPoints([]Point{{x: 0.7462414053223305, y: 0.0}, {x: 0.7462414053223305, y: 0.0}, {x: 0.7462414053223305, y: 2.8480945388892178e-306}, {x: 0.7462414053223305, y: 0.0}})
72+
73+
assertMultiple := assert.New(t)
74+
assertMultiple.Equal(2.984965621289322, actualVal0)
75+
assertMultiple.Equal(2.8480945388892178e-306, actualVal1)
76+
}
77+
78+
func TestGetCoordinateSumOfPointsByUtGoFuzzer3(t *testing.T) {
79+
actualVal0, actualVal1 := GetCoordinateSumOfPoints([]Point{{x: 0.7462414053223305, y: 0.7462414053223305}, {x: 0.0, y: 0.7462414053223305}})
80+
81+
assertMultiple := assert.New(t)
82+
assertMultiple.Equal(0.7462414053223305, actualVal0)
83+
assertMultiple.Equal(1.492482810644661, actualVal1)
84+
}
85+
86+
func TestGetCoordinateSumOfPointsByUtGoFuzzer4(t *testing.T) {
87+
actualVal0, actualVal1 := GetCoordinateSumOfPoints([]Point{{x: 0.0, y: 0.0}, {x: 0.0, y: 0.0}, {x: 0.0, y: 0.0}})
88+
89+
assertMultiple := assert.New(t)
90+
assertMultiple.Equal(0.0, actualVal0)
91+
assertMultiple.Equal(0.0, actualVal1)
92+
}
93+
94+
func TestGetCoordinateSumOfPointsByUtGoFuzzer5(t *testing.T) {
95+
actualVal0, actualVal1 := GetCoordinateSumOfPoints([]Point{{x: 0.0, y: 0.7462414053223305}, {x: 0.0, y: 0.7462414053223305}, {x: 4.7783097267364807e-299, y: 0.7462414053223305}, {x: 0.0, y: 0.7462414053223305}, {x: 0.0, y: 0.7462414053223305}})
5696

5797
assertMultiple := assert.New(t)
58-
assertMultiple.Equal(0.24053641567148587, actualVal0)
59-
assertMultiple.Equal(0.24053641567148587, actualVal1)
98+
assertMultiple.Equal(4.7783097267364807e-299, actualVal0)
99+
assertMultiple.Equal(3.731207026611653, actualVal1)
60100
}
61101

62-
func TestGetCoordinateSumOfPointsByUtGoFuzzer(t *testing.T) {
63-
actualVal0, actualVal1 := GetCoordinateSumOfPoints([10]Point{{x: 0.6374174253501083, y: 0.6374174253501083}, {}, {}, {}, {}, {}, {}, {}, {}, {}})
102+
func TestGetCoordinateSumOfPointsByUtGoFuzzer6(t *testing.T) {
103+
actualVal0, actualVal1 := GetCoordinateSumOfPoints([]Point{})
64104

65105
assertMultiple := assert.New(t)
66-
assertMultiple.Equal(0.6374174253501083, actualVal0)
67-
assertMultiple.Equal(0.6374174253501083, actualVal1)
106+
assertMultiple.Equal(0.0, actualVal0)
107+
assertMultiple.Equal(0.0, actualVal1)
68108
}
69109

70110
func TestGetAreaOfCircleByUtGoFuzzer(t *testing.T) {
71-
actualVal := GetAreaOfCircle(Circle{Center: Point{x: 0.5504370051176339, y: 0.5504370051176339}, Radius: 0.5504370051176339})
111+
actualVal := GetAreaOfCircle(Circle{Center: Point{x: 0.7331520701949938, y: 0.7331520701949938}, Radius: 2.0})
72112

73-
assert.Equal(t, 0.9518425589456255, actualVal)
113+
assert.Equal(t, 12.566370614359172, actualVal)
74114
}
75115

76116
func TestIsIdentityByUtGoFuzzer1(t *testing.T) {
@@ -80,7 +120,7 @@ func TestIsIdentityByUtGoFuzzer1(t *testing.T) {
80120
}
81121

82122
func TestIsIdentityByUtGoFuzzer2(t *testing.T) {
83-
actualVal := IsIdentity([3][3]int{{1, 0, -9223372036854775808}, {-9223372036854775808, 1, -9223372036854775808}, {9223372036854775807, -1, 9223372036854775805}})
123+
actualVal := IsIdentity([3][3]int{{1, 3, 0}, {0, 3, 0}, {0, -9223372036854775808, 2}})
84124

85125
assert.Equal(t, false, actualVal)
86126
}
@@ -92,25 +132,25 @@ func TestIsIdentityByUtGoFuzzer3(t *testing.T) {
92132
}
93133

94134
func TestIsIdentityByUtGoFuzzer4(t *testing.T) {
95-
actualVal := IsIdentity([3][3]int{{1, 288230376151711745, 513}, {1, 9223372036854775807, 9223372036854775807}, {1, 129, 32769}})
135+
actualVal := IsIdentity([3][3]int{{1, 0, 1}, {1, 0, 1}, {0, 1, 1}})
96136

97137
assert.Equal(t, false, actualVal)
98138
}
99139

100140
func TestIsIdentityByUtGoFuzzer5(t *testing.T) {
101-
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {0, 1, 0}, {0, 0, 0}})
141+
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {0, 1, 2048}, {0, 0, 0}})
102142

103143
assert.Equal(t, false, actualVal)
104144
}
105145

106146
func TestIsIdentityByUtGoFuzzer6(t *testing.T) {
107-
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {1, 0, 0}, {0, 0, 0}})
147+
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {2199023255552, 1, 2048}, {0, 0, 3}})
108148

109149
assert.Equal(t, false, actualVal)
110150
}
111151

112152
func TestIsIdentityByUtGoFuzzer7(t *testing.T) {
113-
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {0, 1, 0}, {1, 0, 0}})
153+
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {0, 1, 0}, {0, 0, 0}})
114154

115155
assert.Equal(t, false, actualVal)
116156
}
@@ -121,40 +161,52 @@ func TestIsIdentityByUtGoFuzzer8(t *testing.T) {
121161
assert.Equal(t, false, actualVal)
122162
}
123163

164+
func TestIsIdentityByUtGoFuzzer9(t *testing.T) {
165+
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {0, 1, 0}, {18014398509481984, 1, 0}})
166+
167+
assert.Equal(t, false, actualVal)
168+
}
169+
170+
func TestIsIdentityByUtGoFuzzer10(t *testing.T) {
171+
actualVal := IsIdentity([3][3]int{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}})
172+
173+
assert.Equal(t, true, actualVal)
174+
}
175+
124176
func TestBinaryWithNonNilErrorByUtGoFuzzer1(t *testing.T) {
125-
actualVal, actualErr := Binary([10]int{-9223372036854775808, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9223372036854775807, 9223372036854775807, -1)
177+
actualVal, actualErr := Binary([]int{1}, 2, 0, -1)
126178

127179
assertMultiple := assert.New(t)
128180
assertMultiple.Equal(-1, actualVal)
129181
assertMultiple.ErrorContains(actualErr, "target not found in array")
130182
}
131183

132-
func TestBinaryWithNonNilErrorByUtGoFuzzer2(t *testing.T) {
133-
actualVal, actualErr := Binary([10]int{9223372036854775807, -9223372036854775808, 0, 0, 0, 0, 0, 0, 0, 0}, -1, 1, 1)
184+
func TestBinaryByUtGoFuzzer2(t *testing.T) {
185+
actualVal, actualErr := Binary([]int{9223372036854775807, -1, -1, -1, -1}, 9223372036854775807, 0, 1)
134186

135187
assertMultiple := assert.New(t)
136-
assertMultiple.Equal(-1, actualVal)
137-
assertMultiple.ErrorContains(actualErr, "target not found in array")
188+
assertMultiple.Equal(0, actualVal)
189+
assertMultiple.Nil(actualErr)
138190
}
139191

140192
func TestBinaryWithNonNilErrorByUtGoFuzzer3(t *testing.T) {
141-
actualVal, actualErr := Binary([10]int{9223372036854775807, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -1, 0, 0)
193+
actualVal, actualErr := Binary([]int{1, 17592186044417, 257, 1125899906842625}, -9223372036854775808, 1, 2)
142194

143195
assertMultiple := assert.New(t)
144196
assertMultiple.Equal(-1, actualVal)
145197
assertMultiple.ErrorContains(actualErr, "target not found in array")
146198
}
147199

148-
func TestBinaryByUtGoFuzzer4(t *testing.T) {
149-
actualVal, actualErr := Binary([10]int{9223372036854775807, 1, 9223372036854775807, -1, 0, 0, 0, 0, 0, 0}, 9223372036854775807, 0, 1)
200+
func TestBinaryWithNonNilErrorByUtGoFuzzer4(t *testing.T) {
201+
actualVal, actualErr := Binary([]int{-1, -1, -1, -1, 9223372036854775807}, 9223372036854775807, 0, 1)
150202

151203
assertMultiple := assert.New(t)
152-
assertMultiple.Equal(0, actualVal)
153-
assertMultiple.Nil(actualErr)
204+
assertMultiple.Equal(-1, actualVal)
205+
assertMultiple.ErrorContains(actualErr, "target not found in array")
154206
}
155207

156208
func TestBinaryPanicsByUtGoFuzzer(t *testing.T) {
157-
assert.PanicsWithError(t, "runtime error: index out of range [-9223372036854775808]", func() { Binary([10]int{-1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -1, -9223372036854775808, 9223372036854775807) })
209+
assert.PanicsWithError(t, "runtime error: index out of range [-4611686018427387905]", func() { Binary([]int{1}, 2, -9223372036854775808, -1) })
158210
}
159211

160212
func TestStringSearchByUtGoFuzzer1(t *testing.T) {

utbot-go/go-samples/simple/supported_types.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@ func ArrayOfArrayOfStructs(array [5][5]Structure) [5][5]Structure {
162162
return array
163163
}
164164

165+
func ArrayOfSliceOfUint(array [5][]uint) [5][]uint {
166+
return array
167+
}
168+
165169
func returnErrorOrNil(n int) error {
166170
if n > 0 {
167171
return errors.New("error")
@@ -177,3 +181,36 @@ func ExternalStruct(match difflib.Match, structure Structure) Structure {
177181
func ExternalStructWithAlias(match dif.Match) difflib.Match {
178182
return match
179183
}
184+
185+
func SliceOfInt(slice []int) []int {
186+
return slice
187+
}
188+
189+
func SliceOfUintPtr(slice []uintptr) []uintptr {
190+
return slice
191+
}
192+
193+
func SliceOfString(slice []string) []string {
194+
return slice
195+
}
196+
197+
func SliceOfStructs(slice []Structure) []Structure {
198+
return slice
199+
}
200+
201+
func SliceOfStructsWithNan(slice []Structure) []Structure {
202+
slice[0].float64 = math.NaN()
203+
return slice
204+
}
205+
206+
func SliceOfSliceOfByte(slice [][]byte) [][]byte {
207+
return slice
208+
}
209+
210+
func SliceOfSliceOfStructs(slice [][]Structure) [][]Structure {
211+
return slice
212+
}
213+
214+
func SliceOfArrayOfInt(slice [][5]int) [][5]int {
215+
return slice
216+
}

0 commit comments

Comments
 (0)