Project · Load companions
Verify bounded admission and draining
Check twelve deterministic ownership boundaries without pretending to benchmark a server.
All C# source files below are loaded together in the playground. Files written by a run live in its virtual directory.
Program.cs
AdmissionChecks.Run();
Domain/AdmissionModel.cs
public enum Admission { Active, Queued, Rejected }
public sealed class AdmissionModel {
private readonly int workers, capacity;
private readonly Queue<int> waiting = new();
public int Active { get; private set; }
public int Waiting => waiting.Count;
public bool Accepting { get; private set; } = true;
public AdmissionModel(int workers, int capacity) { if (workers < 1 || capacity < 0) throw new ArgumentOutOfRangeException(); this.workers = workers; this.capacity = capacity; }
public Admission Admit(int value) { if (!Accepting) return Admission.Rejected; if (Active < workers) { Active++; return Admission.Active; } if (waiting.Count >= capacity) return Admission.Rejected; waiting.Enqueue(value); return Admission.Queued; }
public void Drain() => Accepting = false;
public void CompleteOne() { if (Active == 0) throw new InvalidOperationException("No owned operation"); Active--; if (waiting.Count > 0) { waiting.Dequeue(); Active++; } }
}
Checks/AdmissionChecks.cs
public static class AdmissionChecks {
public static void Run() {
var model = new AdmissionModel(2, 3); int checks = 0;
void Check(bool condition) { if (!condition) throw new Exception("Independent admission expectation failed"); checks++; }
Check(model.Admit(1) == Admission.Active);
Check(model.Admit(2) == Admission.Active);
Check(model.Admit(3) == Admission.Queued);
Check(model.Admit(4) == Admission.Queued);
Check(model.Admit(5) == Admission.Queued);
Check(model.Admit(6) == Admission.Rejected);
Check(model.Active == 2 && model.Waiting == 3);
model.Drain(); Check(!model.Accepting && model.Admit(7) == Admission.Rejected);
model.CompleteOne(); Check(model.Active == 2 && model.Waiting == 2);
for (int i = 0; i < 4; i++) model.CompleteOne(); Check(model.Active == 0 && model.Waiting == 0);
try { model.CompleteOne(); throw new Exception("Unowned completion accepted"); } catch (InvalidOperationException) { checks++; }
try { _ = new AdmissionModel(0, 1); throw new Exception("Invalid configuration accepted"); } catch (ArgumentOutOfRangeException) { checks++; }
Console.WriteLine("admission checks:" + checks); Console.WriteLine("evidence:deterministic model");
}
}
Admission.csproj
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net9.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable></PropertyGroup></Project>