Bit.Bcrdt.Testing 11.0.0-pre-10

This is a prerelease version of Bit.Bcrdt.Testing.
dotnet add package Bit.Bcrdt.Testing --version 11.0.0-pre-10
                    
NuGet\Install-Package Bit.Bcrdt.Testing -Version 11.0.0-pre-10
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Bit.Bcrdt.Testing" Version="11.0.0-pre-10" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Bit.Bcrdt.Testing" Version="11.0.0-pre-10" />
                    
Directory.Packages.props
<PackageReference Include="Bit.Bcrdt.Testing" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Bit.Bcrdt.Testing --version 11.0.0-pre-10
                    
#r "nuget: Bit.Bcrdt.Testing, 11.0.0-pre-10"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Bit.Bcrdt.Testing@11.0.0-pre-10
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Bit.Bcrdt.Testing&version=11.0.0-pre-10&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Bit.Bcrdt.Testing&version=11.0.0-pre-10&prerelease
                    
Install as a Cake Tool

Bit.Bcrdt.Testing

Test support for bit Bcrdt: the tools its own suite uses to try to break convergence. Framework-neutral - it works from MSTest, xUnit or NUnit.

dotnet add package Bit.Bcrdt.Testing

An adversarial network

BcrdtSimulatedNetwork connects replicas through a deterministic, seeded network that loses, duplicates, delays and reorders messages, partitions peers and takes them offline - and runs the real sync protocol over it, so a test of "edit for an hour on a plane, then reconnect" is a test of the production code path.

using var network = new BcrdtSimulatedNetwork(new BcrdtSimulatedNetworkOptions
{
    Seed = seed,
    DropProbability = 0.25,
    DuplicateProbability = 0.25,
    MaxLatencySteps = 5,
});

BcrdtSimulatedPeer[] peers = network.AddPeers(4);
peers[0].GoOffline();
peers[0].Doc.GetText("body").Insert(0, "written offline");
peers[1].Doc.GetText("body").Insert(0, "written online");
peers[0].GoOnline();

network.Flush();
network.SynchronizeAll();
BcrdtConvergenceHarness.AssertConverged(network);

Random operations

BcrdtOperationGenerator applies random transactions - text, arrays, maps, formatting and nested types, as BcrdtOperationGeneratorOptions selects - and returns a description of each, so a failure can say what happened:

var generator = new BcrdtOperationGenerator(seed);
string applied = generator.ApplyRandomTransaction(peers[2].Doc);

BcrdtConvergenceHarness.AssertConverged compares replicas' contents and AssertStructurallyIdentical their block structure, and both describe the divergence when they fail. Print the seed with every failure: a randomized test you cannot replay is an anecdote, not a test.

Fuzzing the wire format

BcrdtUpdateCorrupter turns a valid update into every truncation, single-byte mutations, insertions and plain garbage. A rejected payload must raise BcrdtFormatException and leave the document exactly as it was:

foreach (byte[] corrupted in BcrdtUpdateCorrupter.Truncations(update))
{
    // apply to a fresh replica; assert it is either applied or rejected cleanly, never left half-applied
}

The full guide is in the Bcrdt README.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed.  net11.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
11.0.0-pre-10 34 10/20/2026