Skip to content

Commit d09b8f6

Browse files
committed
fix integer unit tests
1 parent ab40ca4 commit d09b8f6

4 files changed

Lines changed: 42 additions & 21 deletions

File tree

src/RESPite/Messages/RespAttributeReader.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ protected virtual int ReadKeyValuePairs(ref RespReader reader, ref T value)
2929
byte[] pooledBuffer = [];
3030
Span<byte> localBuffer = stackalloc byte[128];
3131
int count = 0;
32-
while (iterator.MoveNext() && iterator.Value.TryReadNext())
32+
while (iterator.MoveNext())
3333
{
3434
if (iterator.Value.IsScalar)
3535
{
3636
var key = iterator.Value.Buffer(ref pooledBuffer, localBuffer);
3737

38-
if (iterator.MoveNext() && iterator.Value.TryReadNext())
38+
if (iterator.MoveNext())
3939
{
4040
if (ReadKeyValuePair(key, ref iterator.Value, ref value))
4141
{
@@ -49,7 +49,7 @@ protected virtual int ReadKeyValuePairs(ref RespReader reader, ref T value)
4949
}
5050
else
5151
{
52-
if (iterator.MoveNext() && iterator.Value.TryReadNext())
52+
if (iterator.MoveNext())
5353
{
5454
// we won't try to handle aggregate keys; skip the value
5555
}

src/RESPite/Messages/RespReader.AggregateEnumerator.cs

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public AggregateEnumerator(scoped in RespReader reader)
6161
/// </summary>
6262
public bool MoveNext(RespPrefix prefix)
6363
{
64-
bool result = MoveNext();
64+
bool result = MoveNextRaw();
6565
if (result)
6666
{
6767
Value.MoveNext(prefix);
@@ -75,24 +75,46 @@ public bool MoveNext(RespPrefix prefix)
7575
/// <typeparam name="T">The type of data represented by this reader.</typeparam>
7676
public bool MoveNext<T>(RespPrefix prefix, RespAttributeReader<T> respAttributeReader, ref T attributes)
7777
{
78-
bool result = MoveNext(respAttributeReader, ref attributes);
78+
bool result = MoveNextRaw(respAttributeReader, ref attributes);
7979
if (result)
8080
{
8181
Value.MoveNext(prefix);
8282
}
8383
return result;
8484
}
8585

86-
/// <inheritdoc cref="IEnumerator.MoveNext()"/>>
87-
public bool MoveNext()
86+
/// <summary>
87+
/// Move to the next child and leave the reader *ahead of* the first element,
88+
/// allowing us to read attribute data.
89+
/// </summary>
90+
/// <remarks>If you are not consuming attribute data, <see cref="MoveNext()"/> is preferred.</remarks>
91+
public bool MoveNextRaw()
8892
{
8993
object? attributes = null;
9094
return MoveNextCore(null, ref attributes);
9195
}
9296

93-
/// <inheritdoc cref="IEnumerator.MoveNext()"/>>
94-
/// <typeparam name="T">The type of data represented by this reader.</typeparam>
95-
public bool MoveNext<T>(RespAttributeReader<T> respAttributeReader, ref T attributes)
97+
/// <summary>
98+
/// Move to the next child and move into the first element (skipping attributes etc), leaving it ready to consume.
99+
/// </summary>
100+
public bool MoveNext()
101+
{
102+
object? attributes = null;
103+
if (MoveNextCore(null, ref attributes))
104+
{
105+
Value.MoveNext();
106+
return true;
107+
}
108+
return false;
109+
}
110+
111+
/// <summary>
112+
/// Move to the next child (capturing attribute data) and leave the reader *ahead of* the first element,
113+
/// allowing us to also read attribute data of the child.
114+
/// </summary>
115+
/// <typeparam name="T">The type of attribute data represented by this reader.</typeparam>
116+
/// <remarks>If you are not consuming attribute data, <see cref="MoveNext()"/> is preferred.</remarks>
117+
public bool MoveNextRaw<T>(RespAttributeReader<T> respAttributeReader, ref T attributes)
96118
=> MoveNextCore<T>(respAttributeReader, ref attributes);
97119

98120
/// <inheritdoc cref="IEnumerator.MoveNext()"/>>
@@ -146,14 +168,16 @@ private bool MoveNextCore<T>(RespAttributeReader<T>? attributeReader, ref T attr
146168
/// used to update a tree reader, to get to the next data after the aggregate.</param>
147169
public void MovePast(out RespReader reader)
148170
{
149-
while (MoveNext()) { }
171+
while (MoveNextRaw()) { }
150172
reader = _reader;
151173
}
152174

175+
/// <summary>
176+
/// Moves to the next element, and moves into that element (skipping attributes etc), leaving it ready to consume.
177+
/// </summary>
153178
public void DemandNext()
154179
{
155180
if (!MoveNext()) ThrowEof();
156-
Value.MoveNext(); // skip any attributes etc
157181
}
158182

159183
public T ReadOne<T>(Projection<T> projection)
@@ -166,9 +190,7 @@ public void FillAll<T>(scoped Span<T> target, Projection<T> projection)
166190
{
167191
for (int i = 0; i < target.Length; i++)
168192
{
169-
if (!MoveNext()) ThrowEof();
170-
171-
Value.MoveNext(); // skip any attributes etc
193+
DemandNext();
172194
target[i] = projection(ref Value);
173195
}
174196
}
@@ -181,14 +203,12 @@ public void FillAll<TFirst, TSecond, TResult>(
181203
{
182204
for (int i = 0; i < target.Length; i++)
183205
{
184-
if (!MoveNext()) ThrowEof();
206+
DemandNext();
185207

186-
Value.MoveNext(); // skip any attributes etc
187208
var x = first(ref Value);
188209

189-
if (!MoveNext()) ThrowEof();
210+
DemandNext();
190211

191-
Value.MoveNext(); // skip any attributes etc
192212
var y = second(ref Value);
193213
target[i] = combine(x, y);
194214
}

src/RESPite/PublicAPI/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
[SER004]RESPite.Buffers.CycleBuffer.UncommittedAvailable.get -> int
2121
[SER004]RESPite.Buffers.CycleBuffer.Write(in System.Buffers.ReadOnlySequence<byte> value) -> void
2222
[SER004]RESPite.Buffers.CycleBuffer.Write(System.ReadOnlySpan<byte> value) -> void
23+
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.MoveNextRaw() -> bool
24+
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.MoveNextRaw<T>(RESPite.Messages.RespAttributeReader<T>! respAttributeReader, ref T attributes) -> bool
2325
[SER004]static RESPite.Buffers.CycleBuffer.Create(System.Buffers.MemoryPool<byte>? pool = null, int pageSize = 8192) -> RESPite.Buffers.CycleBuffer
2426
[SER004]const RESPite.Messages.RespScanState.MinBytes = 3 -> int
2527
[SER004]override RESPite.Messages.RespScanState.Equals(object? obj) -> bool
@@ -62,7 +64,6 @@
6264
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.GetEnumerator() -> RESPite.Messages.RespReader.AggregateEnumerator
6365
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.MoveNext() -> bool
6466
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.MoveNext(RESPite.Messages.RespPrefix prefix) -> bool
65-
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.MoveNext<T>(RESPite.Messages.RespAttributeReader<T>! respAttributeReader, ref T attributes) -> bool
6667
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.MoveNext<T>(RESPite.Messages.RespPrefix prefix, RESPite.Messages.RespAttributeReader<T>! respAttributeReader, ref T attributes) -> bool
6768
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.MovePast(out RESPite.Messages.RespReader reader) -> void
6869
[SER004]RESPite.Messages.RespReader.AggregateEnumerator.ReadOne<T>(RESPite.Messages.RespReader.Projection<T>! projection) -> T

tests/RESPite.Tests/RespReaderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ public void AttributeInner(RespPayload payload)
729729
Assert.Equal(3, iterator.Value.ReadInt32());
730730
iterator.Value.DemandEnd();
731731

732-
Assert.False(iterator.MoveNext(TestAttributeReader.Instance, ref state));
732+
Assert.False(iterator.MoveNextRaw(TestAttributeReader.Instance, ref state));
733733
Assert.Equal(0, state.Count);
734734
iterator.MovePast(out reader);
735735
reader.DemandEnd();

0 commit comments

Comments
 (0)