Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
46c95940
Commit
46c95940
authored
Aug 06, 2015
by
Ethan Buchman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
trie: run codec tests, add benchmarks, faster
parent
7baa5977
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
70 additions
and
24 deletions
+70
-24
encoding.go
trie/encoding.go
+16
-20
encoding_test.go
trie/encoding_test.go
+54
-4
No files found.
trie/encoding.go
View file @
46c95940
...
@@ -16,10 +16,6 @@
...
@@ -16,10 +16,6 @@
package
trie
package
trie
import
(
"bytes"
)
func
CompactEncode
(
hexSlice
[]
byte
)
[]
byte
{
func
CompactEncode
(
hexSlice
[]
byte
)
[]
byte
{
terminator
:=
0
terminator
:=
0
if
hexSlice
[
len
(
hexSlice
)
-
1
]
==
16
{
if
hexSlice
[
len
(
hexSlice
)
-
1
]
==
16
{
...
@@ -38,12 +34,12 @@ func CompactEncode(hexSlice []byte) []byte {
...
@@ -38,12 +34,12 @@ func CompactEncode(hexSlice []byte) []byte {
hexSlice
=
append
([]
byte
{
flags
,
0
},
hexSlice
...
)
hexSlice
=
append
([]
byte
{
flags
,
0
},
hexSlice
...
)
}
}
var
buff
bytes
.
Buffer
l
:=
len
(
hexSlice
)
/
2
for
i
:=
0
;
i
<
len
(
hexSlice
);
i
+=
2
{
var
buf
=
make
([]
byte
,
l
)
buff
.
WriteByte
(
byte
(
16
*
hexSlice
[
i
]
+
hexSlice
[
i
+
1
]))
for
i
:=
0
;
i
<
l
;
i
++
{
buf
[
i
]
=
16
*
hexSlice
[
2
*
i
]
+
hexSlice
[
2
*
i
+
1
]
}
}
return
buf
return
buff
.
Bytes
()
}
}
func
CompactDecode
(
str
[]
byte
)
[]
byte
{
func
CompactDecode
(
str
[]
byte
)
[]
byte
{
...
@@ -62,22 +58,22 @@ func CompactDecode(str []byte) []byte {
...
@@ -62,22 +58,22 @@ func CompactDecode(str []byte) []byte {
}
}
func
CompactHexDecode
(
str
[]
byte
)
[]
byte
{
func
CompactHexDecode
(
str
[]
byte
)
[]
byte
{
var
nibbles
[]
byte
l
:=
len
(
str
)
*
2
+
1
var
nibbles
=
make
([]
byte
,
l
)
for
_
,
b
:=
range
str
{
for
i
,
b
:=
range
str
{
nibbles
=
append
(
nibbles
,
b
/
16
)
nibbles
[
i
*
2
]
=
b
/
16
nibbles
=
append
(
nibbles
,
b
%
16
)
nibbles
[
i
*
2
+
1
]
=
b
%
16
}
}
nibbles
=
append
(
nibbles
,
16
)
nibbles
[
l
-
1
]
=
16
return
nibbles
return
nibbles
}
}
// assumes key is odd length
func
DecodeCompact
(
key
[]
byte
)
[]
byte
{
func
DecodeCompact
(
key
[]
byte
)
[]
byte
{
var
res
[]
byte
l
:=
len
(
key
)
/
2
for
i
:=
0
;
i
<
len
(
key
)
-
1
;
i
+=
2
{
var
res
=
make
([]
byte
,
l
)
v1
,
v0
:=
key
[
i
],
key
[
i
+
1
]
for
i
:=
0
;
i
<
l
;
i
++
{
res
=
append
(
res
,
v1
*
16
+
v0
)
v1
,
v0
:=
key
[
2
*
i
],
key
[
2
*
i
+
1
]
res
[
i
]
=
v1
*
16
+
v0
}
}
return
res
return
res
}
}
trie/encoding_test.go
View file @
46c95940
...
@@ -17,9 +17,14 @@
...
@@ -17,9 +17,14 @@
package
trie
package
trie
import
(
import
(
"encoding/hex"
"testing"
checker
"gopkg.in/check.v1"
checker
"gopkg.in/check.v1"
)
)
func
Test
(
t
*
testing
.
T
)
{
checker
.
TestingT
(
t
)
}
type
TrieEncodingSuite
struct
{}
type
TrieEncodingSuite
struct
{}
var
_
=
checker
.
Suite
(
&
TrieEncodingSuite
{})
var
_
=
checker
.
Suite
(
&
TrieEncodingSuite
{})
...
@@ -28,22 +33,22 @@ func (s *TrieEncodingSuite) TestCompactEncode(c *checker.C) {
...
@@ -28,22 +33,22 @@ func (s *TrieEncodingSuite) TestCompactEncode(c *checker.C) {
// even compact encode
// even compact encode
test1
:=
[]
byte
{
1
,
2
,
3
,
4
,
5
}
test1
:=
[]
byte
{
1
,
2
,
3
,
4
,
5
}
res1
:=
CompactEncode
(
test1
)
res1
:=
CompactEncode
(
test1
)
c
.
Assert
(
res1
,
checker
.
Equals
,
"
\x11\x23\x45
"
)
c
.
Assert
(
res1
,
checker
.
DeepEquals
,
[]
byte
(
"
\x11\x23\x45
"
)
)
// odd compact encode
// odd compact encode
test2
:=
[]
byte
{
0
,
1
,
2
,
3
,
4
,
5
}
test2
:=
[]
byte
{
0
,
1
,
2
,
3
,
4
,
5
}
res2
:=
CompactEncode
(
test2
)
res2
:=
CompactEncode
(
test2
)
c
.
Assert
(
res2
,
checker
.
Equals
,
"
\x00\x01\x23\x45
"
)
c
.
Assert
(
res2
,
checker
.
DeepEquals
,
[]
byte
(
"
\x00\x01\x23\x45
"
)
)
//odd terminated compact encode
//odd terminated compact encode
test3
:=
[]
byte
{
0
,
15
,
1
,
12
,
11
,
8
/*term*/
,
16
}
test3
:=
[]
byte
{
0
,
15
,
1
,
12
,
11
,
8
/*term*/
,
16
}
res3
:=
CompactEncode
(
test3
)
res3
:=
CompactEncode
(
test3
)
c
.
Assert
(
res3
,
checker
.
Equals
,
"
\x20\x0f\x1c\xb8
"
)
c
.
Assert
(
res3
,
checker
.
DeepEquals
,
[]
byte
(
"
\x20\x0f\x1c\xb8
"
)
)
// even terminated compact encode
// even terminated compact encode
test4
:=
[]
byte
{
15
,
1
,
12
,
11
,
8
/*term*/
,
16
}
test4
:=
[]
byte
{
15
,
1
,
12
,
11
,
8
/*term*/
,
16
}
res4
:=
CompactEncode
(
test4
)
res4
:=
CompactEncode
(
test4
)
c
.
Assert
(
res4
,
checker
.
Equals
,
"
\x3f\x1c\xb8
"
)
c
.
Assert
(
res4
,
checker
.
DeepEquals
,
[]
byte
(
"
\x3f\x1c\xb8
"
)
)
}
}
func
(
s
*
TrieEncodingSuite
)
TestCompactHexDecode
(
c
*
checker
.
C
)
{
func
(
s
*
TrieEncodingSuite
)
TestCompactHexDecode
(
c
*
checker
.
C
)
{
...
@@ -73,3 +78,48 @@ func (s *TrieEncodingSuite) TestCompactDecode(c *checker.C) {
...
@@ -73,3 +78,48 @@ func (s *TrieEncodingSuite) TestCompactDecode(c *checker.C) {
res
=
CompactDecode
([]
byte
(
"
\x3f\x1c\xb8
"
))
res
=
CompactDecode
([]
byte
(
"
\x3f\x1c\xb8
"
))
c
.
Assert
(
res
,
checker
.
DeepEquals
,
exp
)
c
.
Assert
(
res
,
checker
.
DeepEquals
,
exp
)
}
}
func
(
s
*
TrieEncodingSuite
)
TestDecodeCompact
(
c
*
checker
.
C
)
{
exp
,
_
:=
hex
.
DecodeString
(
"012345"
)
res
:=
DecodeCompact
([]
byte
{
0
,
1
,
2
,
3
,
4
,
5
})
c
.
Assert
(
res
,
checker
.
DeepEquals
,
exp
)
exp
,
_
=
hex
.
DecodeString
(
"012345"
)
res
=
DecodeCompact
([]
byte
{
0
,
1
,
2
,
3
,
4
,
5
,
16
})
c
.
Assert
(
res
,
checker
.
DeepEquals
,
exp
)
exp
,
_
=
hex
.
DecodeString
(
"abcdef"
)
res
=
DecodeCompact
([]
byte
{
10
,
11
,
12
,
13
,
14
,
15
})
c
.
Assert
(
res
,
checker
.
DeepEquals
,
exp
)
}
func
BenchmarkCompactEncode
(
b
*
testing
.
B
)
{
testBytes
:=
[]
byte
{
0
,
15
,
1
,
12
,
11
,
8
/*term*/
,
16
}
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
CompactEncode
(
testBytes
)
}
}
func
BenchmarkCompactDecode
(
b
*
testing
.
B
)
{
testBytes
:=
[]
byte
{
0
,
15
,
1
,
12
,
11
,
8
/*term*/
,
16
}
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
CompactDecode
(
testBytes
)
}
}
func
BenchmarkCompactHexDecode
(
b
*
testing
.
B
)
{
testBytes
:=
[]
byte
{
7
,
6
,
6
,
5
,
7
,
2
,
6
,
2
,
16
}
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
CompactHexDecode
(
testBytes
)
}
}
func
BenchmarkDecodeCompact
(
b
*
testing
.
B
)
{
testBytes
:=
[]
byte
{
7
,
6
,
6
,
5
,
7
,
2
,
6
,
2
,
16
}
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
DecodeCompact
(
testBytes
)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment