@@ -117,6 +117,18 @@ func TestEmpty(t *testing.T) {
117
117
}
118
118
119
119
func TestFull (t * testing.T ) {
120
+ fullTest (t , func (db * DB , key []byte ) ([]byte , error ) {
121
+ return db .Get (key )
122
+ })
123
+ var buf []byte
124
+ fullTest (t , func (db * DB , key []byte ) ([]byte , error ) {
125
+ var err error
126
+ buf , err = db .GetAppend (key , buf [:0 ])
127
+ return buf , err
128
+ })
129
+ }
130
+
131
+ func fullTest (t * testing.T , getFunc func (db * DB , key []byte ) ([]byte , error )) {
120
132
opts := & Options {
121
133
BackgroundSyncInterval : - 1 ,
122
134
FileSystem : testFS ,
@@ -165,7 +177,7 @@ func TestFull(t *testing.T) {
165
177
if has , err := db .Has ([]byte {0 , i }); has || err != nil {
166
178
t .Fatal (has , err )
167
179
}
168
- v , err := db . Get ( []byte {i })
180
+ v , err := getFunc ( db , []byte {i })
169
181
if err != nil {
170
182
t .Fatal (err )
171
183
}
@@ -418,10 +430,11 @@ func BenchmarkGet(b *testing.B) {
418
430
db , err := createTestDB (nil )
419
431
assert .Nil (b , err )
420
432
k := []byte {1 }
421
- if err := db .Put (k , k ); err != nil {
433
+ if err := db .Put (k , make ([] byte , 1024 ) ); err != nil {
422
434
b .Fail ()
423
435
}
424
436
b .ResetTimer ()
437
+ b .ReportAllocs ()
425
438
for i := 0 ; i < b .N ; i ++ {
426
439
if _ , err := db .Get (k ); err != nil {
427
440
b .Fatal ()
@@ -430,6 +443,26 @@ func BenchmarkGet(b *testing.B) {
430
443
assert .Nil (b , db .Close ())
431
444
}
432
445
446
+ func BenchmarkGetAppend (b * testing.B ) {
447
+ db , err := createTestDB (nil )
448
+ assert .Nil (b , err )
449
+ k := []byte {1 }
450
+ if err := db .Put (k , make ([]byte , 1024 )); err != nil {
451
+ b .Fail ()
452
+ }
453
+ b .ResetTimer ()
454
+ b .ReportAllocs ()
455
+ buf := make ([]byte , 0 , 1024 )
456
+ for i := 0 ; i < b .N ; i ++ {
457
+ value , err := db .GetAppend (k , buf [:0 ])
458
+ if err != nil {
459
+ b .Fatal ()
460
+ }
461
+ buf = value
462
+ }
463
+ assert .Nil (b , db .Close ())
464
+ }
465
+
433
466
func BenchmarkBucket_UnmarshalBinary (b * testing.B ) {
434
467
testBucket := bucket {
435
468
slots : [slotsPerBucket ]slot {},
0 commit comments