@@ -24,11 +24,17 @@ public void SegmentStartIsConsideredInBoundsCheck()
2424
2525 var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment2 , 50 ) ;
2626
27- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 25 ) ; // segment 1 index 75
28- SequencePosition c2 = buffer . GetPosition ( buffer . Start , 55 ) ; // segment 2 index 5
27+ SequencePosition c1 = buffer . GetPosition ( 25 ) ; // segment 1 index 75
28+ SequencePosition c2 = buffer . GetPosition ( 55 ) ; // segment 2 index 5
2929
3030 ReadOnlySequence < byte > sliced = buffer . Slice ( c1 , c2 ) ;
3131 Assert . Equal ( 30 , sliced . Length ) ;
32+
33+ c1 = buffer . GetPosition ( 25 , buffer . Start ) ; // segment 1 index 75
34+ c2 = buffer . GetPosition ( 55 , buffer . Start ) ; // segment 2 index 5
35+
36+ sliced = buffer . Slice ( c1 , c2 ) ;
37+ Assert . Equal ( 30 , sliced . Length ) ;
3238 }
3339
3440 [ Fact ]
@@ -39,7 +45,12 @@ public void GetPositionPrefersNextSegment()
3945
4046 ReadOnlySequence < byte > buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment2 , 0 ) ;
4147
42- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 50 ) ;
48+ SequencePosition c1 = buffer . GetPosition ( 50 ) ;
49+
50+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
51+ Assert . Equal ( bufferSegment2 , c1 . GetObject ( ) ) ;
52+
53+ c1 = buffer . GetPosition ( 50 , buffer . Start ) ;
4354
4455 Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
4556 Assert . Equal ( bufferSegment2 , c1 . GetObject ( ) ) ;
@@ -54,7 +65,12 @@ public void GetPositionDoesNotCrossOutsideBuffer()
5465
5566 var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment2 , 100 ) ;
5667
57- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 200 ) ;
68+ SequencePosition c1 = buffer . GetPosition ( 200 ) ;
69+
70+ Assert . Equal ( 100 , c1 . GetInteger ( ) ) ;
71+ Assert . Equal ( bufferSegment2 , c1 . GetObject ( ) ) ;
72+
73+ c1 = buffer . GetPosition ( 200 , buffer . Start ) ;
5874
5975 Assert . Equal ( 100 , c1 . GetInteger ( ) ) ;
6076 Assert . Equal ( bufferSegment2 , c1 . GetObject ( ) ) ;
@@ -70,13 +86,21 @@ public void CheckEndReachableDoesNotCrossPastEnd()
7086
7187 var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment4 , 100 ) ;
7288
73- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 200 ) ;
89+ SequencePosition c1 = buffer . GetPosition ( 200 ) ;
7490
7591 Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
7692 Assert . Equal ( bufferSegment3 , c1 . GetObject ( ) ) ;
7793
7894 ReadOnlySequence < byte > seq = buffer . Slice ( 0 , c1 ) ;
7995 Assert . Equal ( 200 , seq . Length ) ;
96+
97+ c1 = buffer . GetPosition ( 200 , buffer . Start ) ;
98+
99+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
100+ Assert . Equal ( bufferSegment3 , c1 . GetObject ( ) ) ;
101+
102+ seq = buffer . Slice ( 0 , c1 ) ;
103+ Assert . Equal ( 200 , seq . Length ) ;
80104 }
81105
82106 [ Fact ]
@@ -89,7 +113,12 @@ public void SeekSkipsEmptySegments()
89113
90114 var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment4 , 100 ) ;
91115
92- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 100 ) ;
116+ SequencePosition c1 = buffer . GetPosition ( 100 ) ;
117+
118+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
119+ Assert . Equal ( bufferSegment4 , c1 . GetObject ( ) ) ;
120+
121+ c1 = buffer . GetPosition ( 100 , buffer . Start ) ;
93122
94123 Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
95124 Assert . Equal ( bufferSegment4 , c1 . GetObject ( ) ) ;
@@ -105,22 +134,54 @@ public void SeekEmptySkipDoesNotCrossPastEnd()
105134
106135 var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment2 , 0 ) ;
107136
108- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 100 ) ;
137+ SequencePosition c1 = buffer . GetPosition ( 100 ) ;
109138
110139 Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
111140 Assert . Equal ( bufferSegment2 , c1 . GetObject ( ) ) ;
141+
142+ c1 = buffer . GetPosition ( 100 , buffer . Start ) ;
143+
144+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
145+ Assert . Equal ( bufferSegment2 , c1 . GetObject ( ) ) ;
146+ }
147+
148+ [ Fact ]
149+ public void TryGetSkipsEmptyForNextUsingGetPositionWithOffset ( )
150+ {
151+ var bufferSegment1 = new BufferSegment < byte > ( new byte [ 100 ] ) ;
152+ BufferSegment < byte > bufferSegment2 = bufferSegment1 . Append ( new byte [ 0 ] ) ;
153+ BufferSegment < byte > bufferSegment3 = bufferSegment2 . Append ( new byte [ 0 ] ) ;
154+ BufferSegment < byte > bufferSegment4 = bufferSegment3 . Append ( new byte [ 100 ] ) ;
155+
156+ var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment4 , 100 ) ;
157+ SequencePosition c1 = buffer . GetPosition ( 0 ) ;
158+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
159+ Assert . Equal ( bufferSegment1 , c1 . GetObject ( ) ) ;
160+
161+ ReadOnlyMemory < byte > data ;
162+ Assert . True ( buffer . TryGet ( ref c1 , out data , advance : true ) ) ;
163+
164+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
165+ Assert . Equal ( bufferSegment4 , c1 . GetObject ( ) ) ;
166+
167+ Assert . True ( buffer . TryGet ( ref c1 , out data , advance : true ) ) ;
168+
169+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
170+ Assert . Equal ( null , c1 . GetObject ( ) ) ;
171+
172+ Assert . False ( buffer . TryGet ( ref c1 , out data , advance : true ) ) ;
112173 }
113174
114175 [ Fact ]
115- public void TryGetSkipsEmptyForNext ( )
176+ public void TryGetSkipsEmptyForNextUsingGetPositionWithOffsetAndOrigin ( )
116177 {
117178 var bufferSegment1 = new BufferSegment < byte > ( new byte [ 100 ] ) ;
118179 BufferSegment < byte > bufferSegment2 = bufferSegment1 . Append ( new byte [ 0 ] ) ;
119180 BufferSegment < byte > bufferSegment3 = bufferSegment2 . Append ( new byte [ 0 ] ) ;
120181 BufferSegment < byte > bufferSegment4 = bufferSegment3 . Append ( new byte [ 100 ] ) ;
121182
122183 var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment4 , 100 ) ;
123- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 0 ) ;
184+ SequencePosition c1 = buffer . GetPosition ( 0 , buffer . Start ) ;
124185 Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
125186 Assert . Equal ( bufferSegment1 , c1 . GetObject ( ) ) ;
126187
@@ -139,15 +200,37 @@ public void TryGetSkipsEmptyForNext()
139200 }
140201
141202 [ Fact ]
142- public void TryGetSkipDoesNotCrossPastEnd ( )
203+ public void TryGetSkipDoesNotCrossPastEndUsingGetPositionWithOffset ( )
204+ {
205+ var bufferSegment1 = new BufferSegment < byte > ( new byte [ 100 ] ) ;
206+ BufferSegment < byte > bufferSegment2 = bufferSegment1 . Append ( new byte [ 0 ] ) ;
207+ BufferSegment < byte > bufferSegment3 = bufferSegment2 . Append ( new byte [ 0 ] ) ;
208+ BufferSegment < byte > bufferSegment4 = bufferSegment3 . Append ( new byte [ 100 ] ) ;
209+
210+ var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment2 , 0 ) ;
211+ SequencePosition c1 = buffer . GetPosition ( 0 ) ;
212+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
213+ Assert . Equal ( bufferSegment1 , c1 . GetObject ( ) ) ;
214+
215+ ReadOnlyMemory < byte > data ;
216+ Assert . True ( buffer . TryGet ( ref c1 , out data , advance : true ) ) ;
217+
218+ Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
219+ Assert . Equal ( null , c1 . GetObject ( ) ) ;
220+
221+ Assert . False ( buffer . TryGet ( ref c1 , out data , advance : true ) ) ;
222+ }
223+
224+ [ Fact ]
225+ public void TryGetSkipDoesNotCrossPastEndUsingGetPositionWithOffsetAndOrigin ( )
143226 {
144227 var bufferSegment1 = new BufferSegment < byte > ( new byte [ 100 ] ) ;
145228 BufferSegment < byte > bufferSegment2 = bufferSegment1 . Append ( new byte [ 0 ] ) ;
146229 BufferSegment < byte > bufferSegment3 = bufferSegment2 . Append ( new byte [ 0 ] ) ;
147230 BufferSegment < byte > bufferSegment4 = bufferSegment3 . Append ( new byte [ 100 ] ) ;
148231
149232 var buffer = new ReadOnlySequence < byte > ( bufferSegment1 , 0 , bufferSegment2 , 0 ) ;
150- SequencePosition c1 = buffer . GetPosition ( buffer . Start , 0 ) ;
233+ SequencePosition c1 = buffer . GetPosition ( 0 , buffer . Start ) ;
151234 Assert . Equal ( 0 , c1 . GetInteger ( ) ) ;
152235 Assert . Equal ( bufferSegment1 , c1 . GetObject ( ) ) ;
153236
0 commit comments