Skip to content

Commit 7c5ae82

Browse files
Improve coverage for benchmark.go (#35)
1 parent 446138b commit 7c5ae82

File tree

2 files changed

+111
-411
lines changed

2 files changed

+111
-411
lines changed

tests/benchmark_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"fmt"
4343
"testing"
4444

45+
"gorm.io/gorm"
4546
. "github.com/oracle-samples/gorm-oracle/tests/utils"
4647
)
4748

@@ -120,3 +121,113 @@ func BenchmarkDelete(b *testing.B) {
120121
DB.Delete(&user)
121122
}
122123
}
124+
125+
func BenchmarkCreateInBatches(b *testing.B) {
126+
users := make([]User, 100)
127+
for i := 0; i < len(users); i++ {
128+
users[i] = *GetUser(fmt.Sprintf("batch-%d", i), Config{})
129+
}
130+
131+
b.ResetTimer()
132+
for x := 0; x < b.N; x++ {
133+
DB.CreateInBatches(users, 20)
134+
}
135+
}
136+
137+
func BenchmarkFirst(b *testing.B) {
138+
user := *GetUser("first", Config{})
139+
DB.Create(&user)
140+
141+
var u User
142+
b.ResetTimer()
143+
for x := 0; x < b.N; x++ {
144+
DB.First(&u, user.ID)
145+
}
146+
}
147+
148+
func BenchmarkWhere(b *testing.B) {
149+
user := *GetUser("where", Config{})
150+
DB.Create(&user)
151+
152+
var u User
153+
b.ResetTimer()
154+
for x := 0; x < b.N; x++ {
155+
DB.Where("name = ?", user.Name).First(&u)
156+
}
157+
}
158+
159+
func BenchmarkCount(b *testing.B) {
160+
for i := 0; i < 1000; i++ {
161+
user := *GetUser(fmt.Sprintf("count-%d", i), Config{})
162+
DB.Create(&user)
163+
}
164+
165+
var count int64
166+
b.ResetTimer()
167+
for x := 0; x < b.N; x++ {
168+
DB.Model(&User{}).Count(&count)
169+
}
170+
}
171+
172+
func BenchmarkTransaction(b *testing.B) {
173+
for x := 0; x < b.N; x++ {
174+
DB.Transaction(func(tx *gorm.DB) error {
175+
user := *GetUser(fmt.Sprintf("tx-%d", x), Config{})
176+
return tx.Create(&user).Error
177+
})
178+
}
179+
}
180+
181+
func BenchmarkJoin(b *testing.B) {
182+
user := *GetUser("join-user", Config{})
183+
DB.Create(&user)
184+
185+
type Profile struct {
186+
ID uint
187+
UserID uint
188+
Bio string
189+
}
190+
DB.AutoMigrate(&Profile{})
191+
DB.Create(&Profile{UserID: user.ID, Bio: "benchmark profile"})
192+
193+
var result struct {
194+
User
195+
Profile
196+
}
197+
198+
b.ResetTimer()
199+
for x := 0; x < b.N; x++ {
200+
DB.Table("users").
201+
Select("users.id, users.name, profiles.bio").
202+
Joins("left join profiles on profiles.user_id = users.id").
203+
Where("users.id = ?", user.ID).
204+
Scan(&result)
205+
}
206+
}
207+
208+
func BenchmarkPagination(b *testing.B) {
209+
DB.Exec("delete from users")
210+
for i := 0; i < 10000; i++ {
211+
user := *GetUser(fmt.Sprintf("page-%d", i), Config{})
212+
DB.Create(&user)
213+
}
214+
215+
var users []User
216+
b.ResetTimer()
217+
for x := 0; x < b.N; x++ {
218+
DB.Limit(50).Offset(200).Find(&users)
219+
}
220+
}
221+
222+
func BenchmarkBulkDelete(b *testing.B) {
223+
DB.Exec("delete from users")
224+
for i := 0; i < 5000; i++ {
225+
user := *GetUser(fmt.Sprintf("bulk-%d", i), Config{})
226+
DB.Create(&user)
227+
}
228+
229+
b.ResetTimer()
230+
for x := 0; x < b.N; x++ {
231+
DB.Where("id < ?", 2500).Delete(&User{})
232+
}
233+
}

0 commit comments

Comments
 (0)