public void ConstructionWorksAsExpected()
        {
            // --- Act
            var mc = new SpectrumVmController();

            // --- Assert
            mc.VmState.ShouldBe(VmState.None);
            mc.SpectrumVm.ShouldBeNull();
            mc.IsOnMainThread().ShouldBeTrue();
        }
        public async Task SubsequentStopsDoNotSeemFirst()
        {
            // --- Arrange
            var mc = new SpectrumVmController
            {
                StartupConfiguration = new MachineStartupConfiguration
                {
                    DeviceData = new DeviceInfoCollection
                    {
                        new RomDeviceInfo(new ResourceRomProvider(),
                                          new RomConfigurationData
                        {
                            NumberOfRoms       = 1,
                            RomName            = "ZxSpectrum48",
                            Spectrum48RomIndex = 0
                        }, new SpectrumRomDevice()),
                        new MemoryDeviceInfo(
                            new MemoryConfigurationData
                        {
                            SupportsBanking = false,
                            ContentionType  = MemoryContentionType.Ula
                        }, null),

                        new BeeperDeviceInfo(new AudioConfigurationData
                        {
                            AudioSampleRate = 35000,
                            SamplesPerFrame = 699,
                            TactsPerSample  = 100
                        }, null),
                        new ClockDeviceInfo(new ClockProvider()),
                        new ScreenDeviceInfo(SpectrumModels.ZxSpectrum48Pal.Screen)
                    }
                }
            };

            var before = mc.SpectrumVm;

            mc.StartVm(new ExecuteCycleOptions(EmulationMode.UntilFrameEnds));
            await mc.StarterTask;

            mc.StopVm();
            await mc.CompletionTask;

            mc.StartVm(new ExecuteCycleOptions(EmulationMode.UntilFrameEnds));
            await mc.StarterTask;

            // --- Act
            mc.StopVm();
            await mc.CompletionTask;

            // --- Assert
            before.ShouldBeNull();
            mc.SpectrumVm.ShouldNotBeNull();
            mc.IsFirstStart.ShouldBeTrue();
        }