< Summary

Information
Class: ZeroC.Tests.Common.MemoryBufferWriter
Assembly: ZeroC.Tests.Common
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/tests/ZeroC.Tests.Common/MemoryBufferWriter.cs
Tag: 1986_28452893481
Line coverage
100%
Covered lines: 32
Uncovered lines: 0
Coverable lines: 32
Total lines: 67
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage
100%
Covered methods: 6
Fully covered methods: 6
Total methods: 6
Method coverage: 100%
Full method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_WrittenMemory()100%11100%
.ctor(...)100%22100%
Advance(...)100%44100%
Clear()100%11100%
GetMemory(...)100%22100%
GetSpan(...)100%11100%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/tests/ZeroC.Tests.Common/MemoryBufferWriter.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using System.Buffers;
 4
 5namespace ZeroC.Tests.Common;
 6
 7/// <summary>Implements a buffer writer over a single Memory{byte}.</summary>
 8public class MemoryBufferWriter : IBufferWriter<byte>
 9{
 10    /// <summary>Gets the written portion of the underlying buffer.</summary>
 363311    public Memory<byte> WrittenMemory => _initialBuffer[0.._written];
 12
 13    private Memory<byte> _available;
 14
 15    private readonly Memory<byte> _initialBuffer;
 16
 17    private int _written;
 18
 19    /// <summary>Constructs a new memory buffer writer over a buffer.</summary>
 20    /// <param name="buffer">The underlying buffer.</param>
 49421    public MemoryBufferWriter(Memory<byte> buffer)
 49422    {
 49423        if (buffer.IsEmpty)
 124        {
 125            throw new ArgumentException($"The {nameof(buffer)} cannot be empty.", nameof(buffer));
 26        }
 49327        _initialBuffer = buffer;
 49328        _available = _initialBuffer;
 49329    }
 30
 31    /// <inheritdoc/>
 32    public void Advance(int count)
 3602233    {
 3602234        if (count < 0)
 135        {
 136            throw new ArgumentException($"The {nameof(count)} cannot be negative.", nameof(count));
 37        }
 3602138        if (count > _available.Length)
 139        {
 140            throw new InvalidOperationException("Cannot advance past the end of the underlying buffer.");
 41        }
 3602042        _written += count;
 3602043        _available = _initialBuffer[_written..];
 3602044    }
 45
 46    /// <summary>Clears the data written to the underlying buffer.</summary>
 47    public void Clear()
 248    {
 249        _written = 0;
 250        _available = _initialBuffer;
 251    }
 52
 53    /// <inheritdoc/>
 54    public Memory<byte> GetMemory(int sizeHint = 0)
 3602855    {
 3602856        if (sizeHint > _available.Length)
 157        {
 158            throw new ArgumentException(
 159                $"Requested {sizeHint} bytes from {nameof(MemoryBufferWriter)} but only {_available.Length} bytes are av
 160                nameof(sizeHint));
 61        }
 3602762        return _available;
 3602763    }
 64
 65    /// <inheritdoc/>
 3544066    public Span<byte> GetSpan(int sizeHint = 0) => GetMemory(sizeHint).Span;
 67}