Skip to content

Commit 65b5d5a

Browse files
authored
Merge pull request #124 from greymistcube/optimize/encoder
Optimized `Encoder.Encode()`
2 parents 2335204 + 2a04ca2 commit 65b5d5a

File tree

3 files changed

+131
-113
lines changed

3 files changed

+131
-113
lines changed

Bencodex.Tests/EncoderTest.cs

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,49 +30,56 @@ public void EstimateLength()
3030
public void EncodeNull()
3131
{
3232
var buffer = new byte[10];
33-
long size = Encoder.EncodeNull(buffer, 3L);
34-
Assert.Equal(1L, size);
33+
long offset = 3L;
34+
Encoder.EncodeNull(buffer, ref offset);
35+
Assert.Equal(3L + 1L, offset);
3536
AssertEqual(new byte[] { 0, 0, 0, 0x6e, 0, 0, 0, 0, 0, 0 }, buffer);
3637
}
3738

3839
[Fact]
3940
public void EncodeBoolean()
4041
{
4142
var buffer = new byte[10];
42-
long size = Encoder.EncodeBoolean(new Boolean(true), buffer, 2L);
43-
Assert.Equal(1L, size);
43+
long offset = 2L;
44+
Encoder.EncodeBoolean(new Boolean(true), buffer, ref offset);
45+
Assert.Equal(2L + 1L, offset);
4446
AssertEqual(new byte[] { 0, 0, 0x74, 0, 0, 0, 0, 0, 0, 0 }, buffer);
4547

46-
size = Encoder.EncodeBoolean(new Boolean(false), buffer, 5L);
47-
Assert.Equal(1L, size);
48+
offset = 5L;
49+
Encoder.EncodeBoolean(new Boolean(false), buffer, ref offset);
50+
Assert.Equal(5L + 1L, offset);
4851
AssertEqual(new byte[] { 0, 0, 0x74, 0, 0, 0x66, 0, 0, 0, 0 }, buffer);
4952
}
5053

5154
[Fact]
5255
public void EncodeInteger()
5356
{
5457
var buffer = new byte[10];
55-
long size = Encoder.EncodeInteger(0, buffer, 2L);
56-
Assert.Equal(3L, size);
58+
long offset = 2L;
59+
Encoder.EncodeInteger(0, buffer, ref offset);
60+
Assert.Equal(2L + 3L, offset);
5761
AssertEqual(new byte[] { 0, 0, 0x69, 0x30, 0x65, 0, 0, 0, 0, 0 }, buffer);
5862

5963
Clear(buffer, 0, buffer.Length);
60-
size = Encoder.EncodeInteger(-123, buffer, 1L);
61-
Assert.Equal(6L, size);
64+
offset = 1L;
65+
Encoder.EncodeInteger(-123, buffer, ref offset);
66+
Assert.Equal(1L + 6L, offset);
6267
AssertEqual(new byte[] { 0, 0x69, 0x2d, 0x31, 0x32, 0x33, 0x65, 0, 0, 0 }, buffer);
6368

6469
Clear(buffer, 0, buffer.Length);
65-
size = Encoder.EncodeInteger(456, buffer, 4L);
66-
Assert.Equal(5L, size);
70+
offset = 4L;
71+
Encoder.EncodeInteger(456, buffer, ref offset);
72+
Assert.Equal(4L + 5L, offset);
6773
AssertEqual(new byte[] { 0, 0, 0, 0, 0x69, 0x34, 0x35, 0x36, 0x65, 0 }, buffer);
6874
}
6975

7076
[Fact]
7177
public void EncodeBinary()
7278
{
7379
var buffer = new byte[20];
74-
long size = Encoder.EncodeBinary(new Binary("hello world", Encoding.ASCII), buffer, 2L);
75-
Assert.Equal(14L, size);
80+
long offset = 2L;
81+
Encoder.EncodeBinary(new Binary("hello world", Encoding.ASCII), buffer, ref offset);
82+
Assert.Equal(2L + 14L, offset);
7683
AssertEqual(
7784
new byte[20]
7885
{
@@ -90,8 +97,9 @@ public void EncodeBinary()
9097
public void EncodeText()
9198
{
9299
var buffer = new byte[20];
93-
long size = Encoder.EncodeText("한글", buffer, 5L);
94-
Assert.Equal(9L, size);
100+
long offset = 5L;
101+
Encoder.EncodeText("한글", buffer, ref offset);
102+
Assert.Equal(5L + 9L, offset);
95103
AssertEqual(
96104
new byte[20]
97105
{
@@ -130,28 +138,33 @@ public void CountDecimalDigits()
130138
public void EncodeDigits()
131139
{
132140
var buffer = new byte[10];
133-
long size = Encoder.EncodeDigits(0L, buffer, 2L);
134-
Assert.Equal(1L, size);
141+
long offset = 2L;
142+
Encoder.EncodeDigits(0L, buffer, ref offset);
143+
Assert.Equal(2L + 1L, offset);
135144
AssertEqual(new byte[] { 0, 0, 0x30, 0, 0, 0, 0, 0, 0, 0 }, buffer);
136145

137146
Clear(buffer, 0, buffer.Length);
138-
size = Encoder.EncodeDigits(5L, buffer, 0L);
139-
Assert.Equal(1L, size);
147+
offset = 0L;
148+
Encoder.EncodeDigits(5L, buffer, ref offset);
149+
Assert.Equal(0L + 1L, offset);
140150
AssertEqual(new byte[] { 0x35, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, buffer);
141151

142152
Clear(buffer, 0, buffer.Length);
143-
size = Encoder.EncodeDigits(10L, buffer, 5L);
144-
Assert.Equal(2L, size);
153+
offset = 5L;
154+
Encoder.EncodeDigits(10L, buffer, ref offset);
155+
Assert.Equal(5L + 2L, offset);
145156
AssertEqual(new byte[] { 0, 0, 0, 0, 0, 0x31, 0x30, 0, 0, 0 }, buffer);
146157

147158
Clear(buffer, 0, buffer.Length);
148-
size = Encoder.EncodeDigits(123L, buffer, 6L);
149-
Assert.Equal(3L, size);
159+
offset = 6L;
160+
Encoder.EncodeDigits(123L, buffer, ref offset);
161+
Assert.Equal(6L + 3L, offset);
150162
AssertEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0x31, 0x32, 0x33, 0 }, buffer);
151163

152164
Clear(buffer, 0, buffer.Length);
153-
size = Encoder.EncodeDigits(9876543210L, buffer, 0L);
154-
Assert.Equal(10L, size);
165+
offset = 0L;
166+
Encoder.EncodeDigits(9876543210L, buffer, ref offset);
167+
Assert.Equal(0L + 10L, offset);
155168
AssertEqual(
156169
new byte[] { 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30 },
157170
buffer

0 commit comments

Comments
 (0)