namespace Nonemm.Session.Tests; public class CallStackTests { [Fact] public void ACallThatIsNotAMultiplierGoesToTheBack() { CallStack stack = new(); stack.Add("DL1ABC", isMultiplier: false); stack.Add("G4ABC", isMultiplier: false); Assert.Equal(["DL1ABC", "G4ABC"], stack.Calls); } [Fact] public void AMultiplierGoesToTheFront() { CallStack stack = new(); stack.Add("DL1ABC", isMultiplier: false); stack.Add("G4ABC", isMultiplier: false); stack.Add("JA1XYZ", isMultiplier: true); Assert.Equal(["JA1XYZ", "DL1ABC", "G4ABC"], stack.Calls); } [Fact] public void ACallAlreadyOnTheStackIsMovedRatherThanRepeated() { CallStack stack = new(); stack.Add("DL1ABC", isMultiplier: false); stack.Add("G4ABC", isMultiplier: false); stack.Add("DL1ABC", isMultiplier: true); Assert.Equal(["DL1ABC", "G4ABC"], stack.Calls); } [Fact] public void ACallTooShortToBeOneIsNotStacked() { CallStack stack = new(); stack.Add("D", isMultiplier: false); Assert.True(stack.IsEmpty); } [Fact] public void TheCallsComeOffTheFront() { CallStack stack = new(); stack.Add("DL1ABC", isMultiplier: false); stack.Add("G4ABC", isMultiplier: false); Assert.Equal("DL1ABC", stack.Next()); Assert.Equal("G4ABC", stack.Next()); Assert.Equal("", stack.Next()); } [Fact] public void MoveToTopBringsACallForward() { CallStack stack = new(); stack.Add("DL1ABC", isMultiplier: false); stack.Add("G4ABC", isMultiplier: false); stack.MoveToTop("G4ABC"); Assert.Equal(["G4ABC", "DL1ABC"], stack.Calls); } [Fact] public void MoveToTopLeavesACallThatIsNotThereAlone() { CallStack stack = new(); stack.Add("DL1ABC", isMultiplier: false); stack.MoveToTop("G4ABC"); Assert.Equal(["DL1ABC"], stack.Calls); } /// The digital window's call stacking modes. [Fact] public void FirstInFirstOutKeepsTheOrderTheyArrivedIn() { CallStack stack = new() { Order = StackOrder.FirstIn }; stack.Add("OM5M", isMultiplier: false); stack.Add("S53M", isMultiplier: true); Assert.Equal(["OM5M", "S53M"], stack.Calls); } [Fact] public void LastInFirstOutTakesTheNewestFirst() { CallStack stack = new() { Order = StackOrder.LastIn }; stack.Add("OM5M", isMultiplier: false); stack.Add("S53M", isMultiplier: false); Assert.Equal(["S53M", "OM5M"], stack.Calls); } [Fact] public void NothingIsStackedWhenStackingIsOff() { CallStack stack = new() { Order = StackOrder.Disabled }; stack.Add("OM5M", isMultiplier: true); Assert.True(stack.IsEmpty); } }