@@ -18,6 +18,13 @@ namespace Ethereum.Rlp.Test
1818 [ TestFixture ]
1919 public class RlpTests
2020 {
21+ private sealed class TestRlpStream : Nethermind . Serialization . Rlp . RlpStream
22+ {
23+ public TestRlpStream ( int length ) : base ( length ) { }
24+ public TestRlpStream ( byte [ ] data ) : base ( data ) { }
25+ public void CallWriteZero ( int length ) => base . WriteZero ( length ) ;
26+ }
27+
2128 private class RlpTestJson
2229 {
2330 public object In { get ; set ; }
@@ -120,6 +127,45 @@ public void TestCast()
120127 Assert . That ( Nethermind . Serialization . Rlp . Rlp . Encode ( ( UInt256 ) 1UL , HeaderDecoder . NonceLength ) . Bytes , Is . EqualTo ( expectedNonce ) , "nonce bytes" ) ;
121128 }
122129
130+ [ Test ]
131+ public void WriteZero_ClearsAndAdvances_OnPreFilledBuffer ( )
132+ {
133+ byte [ ] buffer = Enumerable . Repeat ( ( byte ) 0xAB , 32 ) . ToArray ( ) ;
134+ var stream = new TestRlpStream ( buffer ) ;
135+ stream . Position = 5 ;
136+ stream . CallWriteZero ( 7 ) ;
137+
138+ Assert . That ( stream . Position , Is . EqualTo ( 12 ) ) ;
139+ Assert . That ( buffer . AsSpan ( 5 , 7 ) . ToArray ( ) , Is . EqualTo ( new byte [ 7 ] ) ) ;
140+ Assert . That ( buffer . AsSpan ( 0 , 5 ) . ToArray ( ) , Is . EqualTo ( Enumerable . Repeat ( ( byte ) 0xAB , 5 ) . ToArray ( ) ) ) ;
141+ Assert . That ( buffer . AsSpan ( 12 ) . ToArray ( ) , Is . EqualTo ( Enumerable . Repeat ( ( byte ) 0xAB , 20 ) . ToArray ( ) ) ) ;
142+ }
143+
144+ [ Test ]
145+ public void WriteZero_AdvancesByRequestedLength_OnNewBuffer ( )
146+ {
147+ var stream = new TestRlpStream ( 16 ) ;
148+ stream . Position = 3 ;
149+ stream . CallWriteZero ( 4 ) ;
150+ Assert . That ( stream . Position , Is . EqualTo ( 7 ) ) ;
151+ Assert . That ( stream . Data . AsSpan ( 3 , 4 ) . ToArray ( ) , Is . EqualTo ( new byte [ 4 ] ) ) ;
152+ }
153+
154+ [ Test ]
155+ public void EncodeBloom_Empty_Writes256Zeros ( )
156+ {
157+ int total = Nethermind . Serialization . Rlp . Rlp . LengthOf ( Bloom . Empty ) ;
158+ var stream = new TestRlpStream ( total ) ;
159+ stream . Encode ( Bloom . Empty ) ;
160+ var bytes = stream . Data . AsSpan ( ) . ToArray ( ) ;
161+
162+ Assert . That ( bytes . Length , Is . EqualTo ( total ) ) ;
163+ Assert . That ( bytes [ 0 ] , Is . EqualTo ( 185 ) ) ;
164+ Assert . That ( bytes [ 1 ] , Is . EqualTo ( 1 ) ) ;
165+ Assert . That ( bytes [ 2 ] , Is . EqualTo ( 0 ) ) ;
166+ Assert . That ( bytes . AsSpan ( 3 , 256 ) . ToArray ( ) , Is . EqualTo ( new byte [ 256 ] ) ) ;
167+ }
168+
123169 [ Test ]
124170 public void TestNonce ( )
125171 {
0 commit comments