-
-
Notifications
You must be signed in to change notification settings - Fork 148
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Split the tree concurrency test codes
- Loading branch information
1 parent
0b80f61
commit 0741b44
Showing
2 changed files
with
278 additions
and
247 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,278 @@ | ||
//go:build integration | ||
|
||
/* | ||
* Copyright 2024 The Yorkie Authors. All rights reserved. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package integration | ||
|
||
import ( | ||
"context" | ||
"testing" | ||
|
||
"github.com/stretchr/testify/assert" | ||
|
||
"github.com/yorkie-team/yorkie/pkg/document" | ||
"github.com/yorkie-team/yorkie/pkg/document/json" | ||
"github.com/yorkie-team/yorkie/pkg/document/presence" | ||
"github.com/yorkie-team/yorkie/test/helper" | ||
) | ||
|
||
type rangeType struct { | ||
from, to int | ||
} | ||
|
||
type rangeWithMiddleType struct { | ||
from, mid, to int | ||
} | ||
|
||
type twoRangesType struct { | ||
ranges [2]rangeWithMiddleType | ||
desc string | ||
} | ||
|
||
type rangeSelector int | ||
|
||
const ( | ||
RangeUnknown rangeSelector = iota | ||
RangeFront | ||
RangeMiddle | ||
RangeBack | ||
RangeAll | ||
) | ||
|
||
func getRange(ranges twoRangesType, selector rangeSelector, user int) rangeType { | ||
if selector == RangeFront { | ||
return rangeType{ranges.ranges[user].from, ranges.ranges[user].from} | ||
} else if selector == RangeMiddle { | ||
return rangeType{ranges.ranges[user].mid, ranges.ranges[user].mid} | ||
} else if selector == RangeBack { | ||
return rangeType{ranges.ranges[user].to, ranges.ranges[user].to} | ||
} else if selector == RangeAll { | ||
return rangeType{ranges.ranges[user].from, ranges.ranges[user].to} | ||
} | ||
return rangeType{-1, -1} | ||
} | ||
|
||
type styleOperationType struct { | ||
selector rangeSelector | ||
op styleOpCode | ||
key, value string | ||
desc string | ||
} | ||
|
||
type editOperationType struct { | ||
selector rangeSelector | ||
op editOpCode | ||
content *json.TreeNode | ||
splitLevel int | ||
desc string | ||
} | ||
|
||
type styleOpCode int | ||
type editOpCode int | ||
|
||
const ( | ||
StyleUndefined styleOpCode = iota | ||
StyleRemove | ||
StyleSet | ||
) | ||
|
||
const ( | ||
EditUndefined editOpCode = iota | ||
EditUpdate | ||
) | ||
|
||
func makeTwoRanges(from1, mid1, to1 int, from2, mid2, to2 int, desc string) twoRangesType { | ||
range0 := rangeWithMiddleType{from1, mid1, to1} | ||
range1 := rangeWithMiddleType{from2, mid2, to2} | ||
return twoRangesType{[2]rangeWithMiddleType{range0, range1}, desc} | ||
} | ||
|
||
var rangesToTestSameTypeOperation = []twoRangesType{ | ||
makeTwoRanges(3, -1, 6, 3, -1, 6, `equal`), // (3, 6) - (3, 6) | ||
makeTwoRanges(0, -1, 9, 3, -1, 6, `contain`), // (0, 9) - (3, 6) | ||
makeTwoRanges(0, -1, 6, 3, -1, 9, `intersect`), // (0, 6) - (3, 9) | ||
makeTwoRanges(0, -1, 3, 3, -1, 6, `side-by-side`), // (0, 3) - (3, 6) | ||
} | ||
|
||
var rangesToTestMixedTypeOperation = []twoRangesType{ | ||
makeTwoRanges(3, 3, 6, 3, -1, 6, `equal`), // (3, 6) - (3, 6) | ||
makeTwoRanges(0, 3, 9, 3, -1, 6, `A contains B`), // (0, 9) - (3, 6) | ||
makeTwoRanges(3, 3, 6, 0, -1, 9, `B contains A`), // (0, 9) - (3, 6) | ||
makeTwoRanges(0, 3, 6, 3, -1, 9, `intersect`), // (0, 6) - (3, 9) | ||
makeTwoRanges(0, 3, 3, 3, -1, 6, `A -> B`), // (0, 3) - (3, 6) | ||
makeTwoRanges(3, 3, 6, 0, -1, 3, `B -> A`), // (0, 3) - (3, 6) | ||
} | ||
|
||
func runStyleOperation(t *testing.T, doc *document.Document, user int, ranges twoRangesType, operation styleOperationType) { | ||
interval := getRange(ranges, operation.selector, user) | ||
from, to := interval.from, interval.to | ||
|
||
assert.NoError(t, doc.Update(func(root *json.Object, p *presence.Presence) error { | ||
if operation.op == StyleRemove { | ||
root.GetTree("t").RemoveStyle(from, to, []string{operation.key}) | ||
} else if operation.op == StyleSet { | ||
root.GetTree("t").Style(from, to, map[string]string{operation.key: operation.value}) | ||
} | ||
return nil | ||
})) | ||
} | ||
|
||
func runEditOperation(t *testing.T, doc *document.Document, user int, ranges twoRangesType, operation editOperationType) { | ||
interval := getRange(ranges, operation.selector, user) | ||
from, to := interval.from, interval.to | ||
|
||
assert.NoError(t, doc.Update(func(root *json.Object, p *presence.Presence) error { | ||
root.GetTree("t").Edit(from, to, operation.content, operation.splitLevel) | ||
return nil | ||
})) | ||
} | ||
|
||
func TestTreeConcurrencyStyle(t *testing.T) { | ||
// 0 1 2 3 4 5 6 7 8 9 | ||
// <root> <p> a </p> <p> b </p> <p> c </p> </root> | ||
// 0,3 : |----------| | ||
// 3,6 : |----------| | ||
// 6,9 : |----------| | ||
|
||
initialState := json.TreeNode{ | ||
Type: "root", | ||
Children: []json.TreeNode{ | ||
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "a"}}}, | ||
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "b"}}}, | ||
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "c"}}}, | ||
}, | ||
} | ||
initialXML := `<root><p>a</p><p>b</p><p>c</p></root>` | ||
|
||
styleOperationsToTest := []styleOperationType{ | ||
{RangeAll, StyleRemove, "bold", "", `remove-bold`}, | ||
{RangeAll, StyleSet, "bold", "aa", `set-bold-aa`}, | ||
{RangeAll, StyleSet, "bold", "bb", `set-bold-bb`}, | ||
{RangeAll, StyleRemove, "italic", "", `remove-italic`}, | ||
{RangeAll, StyleSet, "italic", "aa", `set-italic-aa`}, | ||
{RangeAll, StyleSet, "italic", "bb", `set-italic-bb`}, | ||
} | ||
|
||
runStyleTest := func(ranges twoRangesType, op1, op2 styleOperationType) { | ||
clients := activeClients(t, 2) | ||
c1, c2 := clients[0], clients[1] | ||
defer deactivateAndCloseClients(t, clients) | ||
|
||
ctx := context.Background() | ||
d1 := document.New(helper.TestDocKey(t)) | ||
assert.NoError(t, c1.Attach(ctx, d1)) | ||
d2 := document.New(helper.TestDocKey(t)) | ||
assert.NoError(t, c2.Attach(ctx, d2)) | ||
|
||
assert.NoError(t, d1.Update(func(root *json.Object, p *presence.Presence) error { | ||
root.SetNewTree("t", &initialState) | ||
return nil | ||
})) | ||
assert.NoError(t, c1.Sync(ctx)) | ||
assert.NoError(t, c2.Sync(ctx)) | ||
assert.Equal(t, initialXML, d1.Root().GetTree("t").ToXML()) | ||
assert.Equal(t, initialXML, d2.Root().GetTree("t").ToXML()) | ||
|
||
runStyleOperation(t, d1, 0, ranges, op1) | ||
runStyleOperation(t, d2, 1, ranges, op2) | ||
syncClientsThenAssertEqual(t, []clientAndDocPair{{c1, d1}, {c2, d2}}) | ||
} | ||
|
||
for _, interval := range rangesToTestSameTypeOperation { | ||
for _, op1 := range styleOperationsToTest { | ||
for _, op2 := range styleOperationsToTest { | ||
desc := "concurrently style-style test " + interval.desc + "(" + op1.desc + " " + op2.desc + ")" | ||
t.Run(desc, func(t *testing.T) { | ||
runStyleTest(interval, op1, op2) | ||
}) | ||
} | ||
} | ||
} | ||
} | ||
|
||
func TestTreeConcurrencyEditAndStyle(t *testing.T) { | ||
// 0 1 2 3 4 5 6 7 8 9 | ||
// <root> <p> a </p> <p> b </p> <p> c </p> </root> | ||
// 0,3 : |----------| | ||
// 3,6 : |----------| | ||
// 6,9 : |----------| | ||
|
||
initialState := json.TreeNode{ | ||
Type: "root", | ||
Children: []json.TreeNode{ | ||
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "a"}}}, | ||
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "b"}}}, | ||
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "c"}}}, | ||
}, | ||
} | ||
initialXML := `<root><p>a</p><p>b</p><p>c</p></root>` | ||
|
||
content := &json.TreeNode{Type: "p", Attributes: map[string]string{"italic": "true"}, Children: []json.TreeNode{{Type: "text", Value: `d`}}} | ||
|
||
editOperationsToTest := []editOperationType{ | ||
{RangeFront, EditUpdate, content, 0, `insertFront`}, | ||
{RangeMiddle, EditUpdate, content, 0, `insertMiddle`}, | ||
{RangeBack, EditUpdate, content, 0, `insertBack`}, | ||
{RangeAll, EditUpdate, nil, 0, `erase`}, | ||
{RangeAll, EditUpdate, content, 0, `change`}, | ||
} | ||
|
||
styleOperationsToTest := []styleOperationType{ | ||
{RangeAll, StyleRemove, "bold", "", `remove-bold`}, | ||
{RangeAll, StyleSet, "bold", "aa", `set-bold-aa`}, | ||
} | ||
|
||
runEditStyleTest := func(ranges twoRangesType, op1 editOperationType, op2 styleOperationType) bool { | ||
clients := activeClients(t, 2) | ||
c1, c2 := clients[0], clients[1] | ||
defer deactivateAndCloseClients(t, clients) | ||
|
||
ctx := context.Background() | ||
d1 := document.New(helper.TestDocKey(t)) | ||
assert.NoError(t, c1.Attach(ctx, d1)) | ||
d2 := document.New(helper.TestDocKey(t)) | ||
assert.NoError(t, c2.Attach(ctx, d2)) | ||
|
||
assert.NoError(t, d1.Update(func(root *json.Object, p *presence.Presence) error { | ||
root.SetNewTree("t", &initialState) | ||
return nil | ||
})) | ||
assert.NoError(t, c1.Sync(ctx)) | ||
assert.NoError(t, c2.Sync(ctx)) | ||
assert.Equal(t, initialXML, d1.Root().GetTree("t").ToXML()) | ||
assert.Equal(t, initialXML, d2.Root().GetTree("t").ToXML()) | ||
|
||
runEditOperation(t, d1, 0, ranges, op1) | ||
runStyleOperation(t, d2, 1, ranges, op2) | ||
|
||
return syncClientsThenCheckEqual(t, []clientAndDocPair{{c1, d1}, {c2, d2}}) | ||
} | ||
|
||
for _, interval := range rangesToTestMixedTypeOperation { | ||
for _, op1 := range editOperationsToTest { | ||
for _, op2 := range styleOperationsToTest { | ||
desc := "concurrently edit-style test-" + interval.desc + "(" | ||
desc += op1.desc + "," + op2.desc + ")" | ||
t.Run(desc, func(t *testing.T) { | ||
if !runEditStyleTest(interval, op1, op2) { | ||
t.Skip() | ||
} | ||
}) | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.
0741b44
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Go Benchmark
BenchmarkDocument/constructor_test - ns/op
1416
ns/op1336
ns/op1.06
BenchmarkDocument/constructor_test - B/op
1224
B/op1208
B/op1.01
BenchmarkDocument/constructor_test - allocs/op
21
allocs/op20
allocs/op1.05
BenchmarkDocument/status_test - ns/op
855.1
ns/op785.2
ns/op1.09
BenchmarkDocument/status_test - B/op
1192
B/op1176
B/op1.01
BenchmarkDocument/status_test - allocs/op
19
allocs/op18
allocs/op1.06
BenchmarkDocument/equals_test - ns/op
7498
ns/op7092
ns/op1.06
BenchmarkDocument/equals_test - B/op
6977
B/op6913
B/op1.01
BenchmarkDocument/equals_test - allocs/op
124
allocs/op120
allocs/op1.03
BenchmarkDocument/nested_update_test - ns/op
16806
ns/op16151
ns/op1.04
BenchmarkDocument/nested_update_test - B/op
12059
B/op11963
B/op1.01
BenchmarkDocument/nested_update_test - allocs/op
260
allocs/op254
allocs/op1.02
BenchmarkDocument/delete_test - ns/op
25713
ns/op21933
ns/op1.17
BenchmarkDocument/delete_test - B/op
15284
B/op15188
B/op1.01
BenchmarkDocument/delete_test - allocs/op
339
allocs/op333
allocs/op1.02
BenchmarkDocument/object_test - ns/op
8616
ns/op8361
ns/op1.03
BenchmarkDocument/object_test - B/op
6753
B/op6721
B/op1.00
BenchmarkDocument/object_test - allocs/op
118
allocs/op116
allocs/op1.02
BenchmarkDocument/array_test - ns/op
29515
ns/op32610
ns/op0.91
BenchmarkDocument/array_test - B/op
11883
B/op11819
B/op1.01
BenchmarkDocument/array_test - allocs/op
274
allocs/op270
allocs/op1.01
BenchmarkDocument/text_test - ns/op
31073
ns/op30219
ns/op1.03
BenchmarkDocument/text_test - B/op
14915
B/op14795
B/op1.01
BenchmarkDocument/text_test - allocs/op
470
allocs/op468
allocs/op1.00
BenchmarkDocument/text_composition_test - ns/op
29514
ns/op28748
ns/op1.03
BenchmarkDocument/text_composition_test - B/op
18428
B/op18278
B/op1.01
BenchmarkDocument/text_composition_test - allocs/op
479
allocs/op477
allocs/op1.00
BenchmarkDocument/rich_text_test - ns/op
81780
ns/op79589
ns/op1.03
BenchmarkDocument/rich_text_test - B/op
38676
B/op38540
B/op1.00
BenchmarkDocument/rich_text_test - allocs/op
1149
allocs/op1147
allocs/op1.00
BenchmarkDocument/counter_test - ns/op
17553
ns/op16595
ns/op1.06
BenchmarkDocument/counter_test - B/op
10466
B/op10210
B/op1.03
BenchmarkDocument/counter_test - allocs/op
238
allocs/op236
allocs/op1.01
BenchmarkDocument/text_edit_gc_100 - ns/op
2988843
ns/op2884438
ns/op1.04
BenchmarkDocument/text_edit_gc_100 - B/op
1658610
B/op1655268
B/op1.00
BenchmarkDocument/text_edit_gc_100 - allocs/op
17095
allocs/op17093
allocs/op1.00
BenchmarkDocument/text_edit_gc_1000 - ns/op
232908590
ns/op230271811
ns/op1.01
BenchmarkDocument/text_edit_gc_1000 - B/op
144394620
B/op144376180
B/op1.00
BenchmarkDocument/text_edit_gc_1000 - allocs/op
200985
allocs/op201058
allocs/op1.00
BenchmarkDocument/text_split_gc_100 - ns/op
3472233
ns/op3383745
ns/op1.03
BenchmarkDocument/text_split_gc_100 - B/op
2316771
B/op2314004
B/op1.00
BenchmarkDocument/text_split_gc_100 - allocs/op
16195
allocs/op16197
allocs/op1.00
BenchmarkDocument/text_split_gc_1000 - ns/op
296887427
ns/op288385837
ns/op1.03
BenchmarkDocument/text_split_gc_1000 - B/op
228933972
B/op228887600
B/op1.00
BenchmarkDocument/text_split_gc_1000 - allocs/op
204000
allocs/op203930
allocs/op1.00
BenchmarkDocument/text_delete_all_10000 - ns/op
10839998
ns/op11000897
ns/op0.99
BenchmarkDocument/text_delete_all_10000 - B/op
5810495
B/op5809330
B/op1.00
BenchmarkDocument/text_delete_all_10000 - allocs/op
40673
allocs/op40669
allocs/op1.00
BenchmarkDocument/text_delete_all_100000 - ns/op
203299568
ns/op182534409
ns/op1.11
BenchmarkDocument/text_delete_all_100000 - B/op
81899909
B/op81903677
B/op1.00
BenchmarkDocument/text_delete_all_100000 - allocs/op
411610
allocs/op411647
allocs/op1.00
BenchmarkDocument/text_100 - ns/op
241203
ns/op218449
ns/op1.10
BenchmarkDocument/text_100 - B/op
120138
B/op118483
B/op1.01
BenchmarkDocument/text_100 - allocs/op
5082
allocs/op5080
allocs/op1.00
BenchmarkDocument/text_1000 - ns/op
2561650
ns/op2374004
ns/op1.08
BenchmarkDocument/text_1000 - B/op
1169130
B/op1153070
B/op1.01
BenchmarkDocument/text_1000 - allocs/op
50086
allocs/op50084
allocs/op1.00
BenchmarkDocument/array_1000 - ns/op
1291307
ns/op1196526
ns/op1.08
BenchmarkDocument/array_1000 - B/op
1091411
B/op1091301
B/op1.00
BenchmarkDocument/array_1000 - allocs/op
11830
allocs/op11826
allocs/op1.00
BenchmarkDocument/array_10000 - ns/op
13632662
ns/op13416629
ns/op1.02
BenchmarkDocument/array_10000 - B/op
9800273
B/op9799640
B/op1.00
BenchmarkDocument/array_10000 - allocs/op
120296
allocs/op120291
allocs/op1.00
BenchmarkDocument/array_gc_100 - ns/op
157936
ns/op143463
ns/op1.10
BenchmarkDocument/array_gc_100 - B/op
132680
B/op132481
B/op1.00
BenchmarkDocument/array_gc_100 - allocs/op
1259
allocs/op1248
allocs/op1.01
BenchmarkDocument/array_gc_1000 - ns/op
1463647
ns/op1378307
ns/op1.06
BenchmarkDocument/array_gc_1000 - B/op
1159080
B/op1158986
B/op1.00
BenchmarkDocument/array_gc_1000 - allocs/op
12875
allocs/op12865
allocs/op1.00
BenchmarkDocument/counter_1000 - ns/op
236924
ns/op198075
ns/op1.20
BenchmarkDocument/counter_1000 - B/op
192917
B/op192851
B/op1.00
BenchmarkDocument/counter_1000 - allocs/op
5767
allocs/op5765
allocs/op1.00
BenchmarkDocument/counter_10000 - ns/op
2380218
ns/op2156556
ns/op1.10
BenchmarkDocument/counter_10000 - B/op
2087852
B/op2087769
B/op1.00
BenchmarkDocument/counter_10000 - allocs/op
59774
allocs/op59772
allocs/op1.00
BenchmarkDocument/object_1000 - ns/op
1452013
ns/op1317018
ns/op1.10
BenchmarkDocument/object_1000 - B/op
1428092
B/op1427906
B/op1.00
BenchmarkDocument/object_1000 - allocs/op
9847
allocs/op9845
allocs/op1.00
BenchmarkDocument/object_10000 - ns/op
15319401
ns/op14690867
ns/op1.04
BenchmarkDocument/object_10000 - B/op
12168214
B/op12166752
B/op1.00
BenchmarkDocument/object_10000 - allocs/op
100567
allocs/op100562
allocs/op1.00
BenchmarkDocument/tree_100 - ns/op
1089955
ns/op1009303
ns/op1.08
BenchmarkDocument/tree_100 - B/op
943783
B/op943675
B/op1.00
BenchmarkDocument/tree_100 - allocs/op
6102
allocs/op6099
allocs/op1.00
BenchmarkDocument/tree_1000 - ns/op
77936458
ns/op72072982
ns/op1.08
BenchmarkDocument/tree_1000 - B/op
86481709
B/op86459854
B/op1.00
BenchmarkDocument/tree_1000 - allocs/op
60116
allocs/op60114
allocs/op1.00
BenchmarkDocument/tree_10000 - ns/op
9916790407
ns/op9443141797
ns/op1.05
BenchmarkDocument/tree_10000 - B/op
8580657776
B/op8580991992
B/op1.00
BenchmarkDocument/tree_10000 - allocs/op
600199
allocs/op600248
allocs/op1.00
BenchmarkDocument/tree_delete_all_1000 - ns/op
80974312
ns/op71663719
ns/op1.13
BenchmarkDocument/tree_delete_all_1000 - B/op
86990019
B/op86990239
B/op1.00
BenchmarkDocument/tree_delete_all_1000 - allocs/op
67753
allocs/op67749
allocs/op1.00
BenchmarkDocument/tree_edit_gc_100 - ns/op
3953160
ns/op3632525
ns/op1.09
BenchmarkDocument/tree_edit_gc_100 - B/op
4121106
B/op4121046
B/op1.00
BenchmarkDocument/tree_edit_gc_100 - allocs/op
14359
allocs/op14356
allocs/op1.00
BenchmarkDocument/tree_edit_gc_1000 - ns/op
321778256
ns/op295614209
ns/op1.09
BenchmarkDocument/tree_edit_gc_1000 - B/op
383466982
B/op383467646
B/op1.00
BenchmarkDocument/tree_edit_gc_1000 - allocs/op
145414
allocs/op145413
allocs/op1.00
BenchmarkDocument/tree_split_gc_100 - ns/op
2642082
ns/op2433512
ns/op1.09
BenchmarkDocument/tree_split_gc_100 - B/op
2386979
B/op2386869
B/op1.00
BenchmarkDocument/tree_split_gc_100 - allocs/op
10344
allocs/op10341
allocs/op1.00
BenchmarkDocument/tree_split_gc_1000 - ns/op
195286280
ns/op183611128
ns/op1.06
BenchmarkDocument/tree_split_gc_1000 - B/op
221992025
B/op221991942
B/op1.00
BenchmarkDocument/tree_split_gc_1000 - allocs/op
112268
allocs/op112259
allocs/op1.00
BenchmarkRPC/client_to_server - ns/op
358370229
ns/op355717978
ns/op1.01
BenchmarkRPC/client_to_server - B/op
17793632
B/op17228981
B/op1.03
BenchmarkRPC/client_to_server - allocs/op
166926
allocs/op166831
allocs/op1.00
BenchmarkRPC/client_to_client_via_server - ns/op
606773688
ns/op606482578
ns/op1.00
BenchmarkRPC/client_to_client_via_server - B/op
35337256
B/op32116544
B/op1.10
BenchmarkRPC/client_to_client_via_server - allocs/op
312071
allocs/op312901
allocs/op1.00
BenchmarkRPC/attach_large_document - ns/op
1416748029
ns/op1170164855
ns/op1.21
BenchmarkRPC/attach_large_document - B/op
1879521152
B/op1888403296
B/op1.00
BenchmarkRPC/attach_large_document - allocs/op
7565
allocs/op7527
allocs/op1.01
BenchmarkRPC/adminCli_to_server - ns/op
542278634
ns/op542495623
ns/op1.00
BenchmarkRPC/adminCli_to_server - B/op
35982928
B/op36802124
B/op0.98
BenchmarkRPC/adminCli_to_server - allocs/op
289643
allocs/op289677
allocs/op1.00
BenchmarkLocker - ns/op
66.61
ns/op65.96
ns/op1.01
BenchmarkLocker - B/op
16
B/op16
B/op1
BenchmarkLocker - allocs/op
1
allocs/op1
allocs/op1
BenchmarkLockerParallel - ns/op
45.71
ns/op38.94
ns/op1.17
BenchmarkLockerParallel - B/op
0
B/op0
B/opNaN
BenchmarkLockerParallel - allocs/op
0
allocs/op0
allocs/opNaN
BenchmarkLockerMoreKeys - ns/op
153.3
ns/op141.9
ns/op1.08
BenchmarkLockerMoreKeys - B/op
15
B/op15
B/op1
BenchmarkLockerMoreKeys - allocs/op
0
allocs/op0
allocs/opNaN
BenchmarkChange/Push_10_Changes - ns/op
3788035
ns/op3782260
ns/op1.00
BenchmarkChange/Push_10_Changes - B/op
125999
B/op125995
B/op1.00
BenchmarkChange/Push_10_Changes - allocs/op
1254
allocs/op1253
allocs/op1.00
BenchmarkChange/Push_100_Changes - ns/op
14279468
ns/op14268879
ns/op1.00
BenchmarkChange/Push_100_Changes - B/op
645207
B/op639349
B/op1.01
BenchmarkChange/Push_100_Changes - allocs/op
6537
allocs/op6540
allocs/op1.00
BenchmarkChange/Push_1000_Changes - ns/op
113919497
ns/op114005417
ns/op1.00
BenchmarkChange/Push_1000_Changes - B/op
6133951
B/op6146349
B/op1.00
BenchmarkChange/Push_1000_Changes - allocs/op
62160
allocs/op62158
allocs/op1.00
BenchmarkChange/Pull_10_Changes - ns/op
2852375
ns/op2883610
ns/op0.99
BenchmarkChange/Pull_10_Changes - B/op
100200
B/op100810
B/op0.99
BenchmarkChange/Pull_10_Changes - allocs/op
952
allocs/op952
allocs/op1
BenchmarkChange/Pull_100_Changes - ns/op
4308575
ns/op4323201
ns/op1.00
BenchmarkChange/Pull_100_Changes - B/op
256953
B/op258124
B/op1.00
BenchmarkChange/Pull_100_Changes - allocs/op
3154
allocs/op3153
allocs/op1.00
BenchmarkChange/Pull_1000_Changes - ns/op
8557467
ns/op8208312
ns/op1.04
BenchmarkChange/Pull_1000_Changes - B/op
1393652
B/op1395853
B/op1.00
BenchmarkChange/Pull_1000_Changes - allocs/op
26871
allocs/op26874
allocs/op1.00
BenchmarkSnapshot/Push_3KB_snapshot - ns/op
16632142
ns/op16781594
ns/op0.99
BenchmarkSnapshot/Push_3KB_snapshot - B/op
809855
B/op806918
B/op1.00
BenchmarkSnapshot/Push_3KB_snapshot - allocs/op
6542
allocs/op6543
allocs/op1.00
BenchmarkSnapshot/Push_30KB_snapshot - ns/op
117074822
ns/op117538584
ns/op1.00
BenchmarkSnapshot/Push_30KB_snapshot - B/op
6268760
B/op6293910
B/op1.00
BenchmarkSnapshot/Push_30KB_snapshot - allocs/op
62257
allocs/op62159
allocs/op1.00
BenchmarkSnapshot/Pull_3KB_snapshot - ns/op
6496266
ns/op6555276
ns/op0.99
BenchmarkSnapshot/Pull_3KB_snapshot - B/op
903796
B/op905327
B/op1.00
BenchmarkSnapshot/Pull_3KB_snapshot - allocs/op
14880
allocs/op14879
allocs/op1.00
BenchmarkSnapshot/Pull_30KB_snapshot - ns/op
14697894
ns/op14921599
ns/op0.99
BenchmarkSnapshot/Pull_30KB_snapshot - B/op
6979675
B/op6982547
B/op1.00
BenchmarkSnapshot/Pull_30KB_snapshot - allocs/op
144143
allocs/op144138
allocs/op1.00
BenchmarkSync/memory_sync_10_test - ns/op
6910
ns/op6869
ns/op1.01
BenchmarkSync/memory_sync_10_test - B/op
1286
B/op1286
B/op1
BenchmarkSync/memory_sync_10_test - allocs/op
38
allocs/op38
allocs/op1
BenchmarkSync/memory_sync_100_test - ns/op
51473
ns/op51839
ns/op0.99
BenchmarkSync/memory_sync_100_test - B/op
8656
B/op8646
B/op1.00
BenchmarkSync/memory_sync_100_test - allocs/op
274
allocs/op273
allocs/op1.00
BenchmarkSync/memory_sync_1000_test - ns/op
584647
ns/op597671
ns/op0.98
BenchmarkSync/memory_sync_1000_test - B/op
74563
B/op74301
B/op1.00
BenchmarkSync/memory_sync_1000_test - allocs/op
2120
allocs/op2106
allocs/op1.01
BenchmarkSync/memory_sync_10000_test - ns/op
6932562
ns/op7337210
ns/op0.94
BenchmarkSync/memory_sync_10000_test - B/op
746693
B/op759441
B/op0.98
BenchmarkSync/memory_sync_10000_test - allocs/op
20433
allocs/op20499
allocs/op1.00
BenchmarkTextEditing - ns/op
19079766838
ns/op18812245791
ns/op1.01
BenchmarkTextEditing - B/op
9042654040
B/op9038099880
B/op1.00
BenchmarkTextEditing - allocs/op
19923411
allocs/op19923868
allocs/op1.00
This comment was automatically generated by workflow using github-action-benchmark.