public void Combined()
        {
            var bytesToProcess = 256;
            var receivedData   = new List <byte>();

            var sim = new RTLSynchronousSimulator <CompositionModule>();

            sim.Trace(PathTools.VCDOutputPath());

            sim.IsRunning = (topLevel) => receivedData.Count < bytesToProcess;

            sim.OnPostStage = (topLevel) =>
            {
                if (topLevel.HasData)
                {
                    receivedData.Add(topLevel.Data);
                }
            };

            sim.Run();

            Assert.AreEqual(bytesToProcess, receivedData.Count);
            var missing = Enumerable
                          .Range(0, bytesToProcess)
                          .Zip(receivedData, (e, a) => new { e, a })
                          .Where(p => p.e != p.a)
                          .Select(p => $"E: {p.e}, A: {p.a}")
                          .ToList();

            Assert.AreEqual(0, missing.Count, missing.ToCSV());
        }
        public void InverterFeedback()
        {
            var sim = new RTLSynchronousSimulator <InverterFeedback>();

            sim.Trace(PathTools.VCDOutputPath());

            Assert.ThrowsException <MaxStageIterationReachedException>(() =>
            {
                sim.Run();
            });
        }