< 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: 1321_24790053727
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>
 359211    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>
 45321    public MemoryBufferWriter(Memory<byte> buffer)
 45322    {
 45323        if (buffer.IsEmpty)
 124        {
 125            throw new ArgumentException($"The {nameof(buffer)} cannot be empty.", nameof(buffer));
 26        }
 45227        _initialBuffer = buffer;
 45228        _available = _initialBuffer;
 45229    }
 30
 31    /// <inheritdoc/>
 32    public void Advance(int count)
 3570333    {
 3570334        if (count < 0)
 135        {
 136            throw new ArgumentException($"The {nameof(count)} cannot be negative.", nameof(count));
 37        }
 3570238        if (count > _available.Length)
 139        {
 140            throw new InvalidOperationException("Cannot advance past the end of the underlying buffer.");
 41        }
 3570142        _written += count;
 3570143        _available = _initialBuffer[_written..];
 3570144    }
 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)
 3570955    {
 3570956        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        }
 3570862        return _available;
 3570863    }
 64
 65    /// <inheritdoc/>
 3512166    public Span<byte> GetSpan(int sizeHint = 0) => GetMemory(sizeHint).Span;
 67}