public void _2nnn_CALL() { var instructions = new byte[] { 0x21, 0xEF }; var expectedAddress = (ushort)(0x21EF & 0x0FFF); var stackModule = new StackModule(); var chip = CHIP8Factory.GetChip8(stack: stackModule); chip.LoadProgram(instructions); chip.Tick += (c, e) => { chip.Stop(); }; chip.Start(); var programCounter = GetProgramCounter(chip); Assert.Equal(expectedAddress, programCounter); var itemOnStack = stackModule.Pop(); // Stack should have the program counter which has only moved up one past the start at 512 Assert.Equal(514, itemOnStack); }
public void ShouldNotGetStackAndLogError() { MockedDatabase <Stack> database; StackModule module; MemoryLogger logger; logger = new MemoryLogger(); database = new MockedDatabase <Stack>(true, 1, (t) => new Stack() { StackID = t }); module = new StackModule(logger, database); Assert.ThrowsException <PIODataException>(() => module.GetStack(1)); Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName))); logger = new MemoryLogger(); database = new MockedDatabase <Stack>(true, 1, (t) => new Stack() { StackID = t }); module = new StackModule(logger, database); Assert.ThrowsException <PIODataException>(() => module.GetStack(1, ResourceTypeIDs.Coal)); Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName))); }
public void _00EE_RET(ushort addr) { // Make sure it's a valid address and doesn't cause an infinite loop Assert.InRange(addr, 514, 4094); var stackModule = new StackModule(); stackModule.Push(addr); var instructions = new byte[] { 0x00, 0xEE }; var chip = CHIP8Factory.GetChip8(stack: stackModule); chip.LoadProgram(instructions); chip.Tick += (c, e) => { chip.Stop(); }; chip.Start(); var programCounter = GetProgramCounter(chip); Assert.Equal(addr, programCounter); }
public void ShouldUpdateStack() { MockedDatabase <Stack> database; StackModule module; database = new MockedDatabase <Stack>(false, 1, (t) => new Stack() { StackID = t, BuildingID = 0, ResourceTypeID = 0, Quantity = 5 }); module = new StackModule(NullLogger.Instance, database); module.UpdateStack(1, 2); Assert.AreEqual(1, database.UpdatedCount); }
public void ShouldFindStack() { MockedDatabase <Stack> database; StackModule module; Stack result; database = new MockedDatabase <Stack>(false, 1, (t) => new Stack() { StackID = t }); module = new StackModule(NullLogger.Instance, database); result = module.FindStack(1, ResourceTypeIDs.Coal); Assert.IsNotNull(result); Assert.AreEqual(0, result.StackID); }
public void ShouldInsertStack() { MockedDatabase <Stack> database; StackModule module; Stack result; DateTime eta; database = new MockedDatabase <Stack>(false, 1, (t) => new Stack() { StackID = t }); module = new StackModule(NullLogger.Instance, database); eta = DateTime.Now; result = module.InsertStack(0, ResourceTypeIDs.Wood, 2); Assert.IsNotNull(result); Assert.AreEqual(0, result.BuildingID); Assert.AreEqual(ResourceTypeIDs.Wood, result.ResourceTypeID); Assert.AreEqual(2, result.Quantity); Assert.AreEqual(1, database.InsertedCount); }
public void ShouldGetStacks() { MockedDatabase <Stack> database; StackModule module; Stack[] results; database = new MockedDatabase <Stack>(false, 3, (t) => new Stack() { StackID = t }); module = new StackModule(NullLogger.Instance, database); results = module.GetStacks(1); Assert.IsNotNull(results); Assert.AreEqual(3, results.Length); for (int t = 0; t < 3; t++) { Assert.IsNotNull(results[t]); Assert.AreEqual(t, results[t].StackID); } }
public void ShouldGetStackQuantity() { MockedDatabase <Stack> database; StackModule module; int result; database = new MockedDatabase <Stack>(false, 1, (t) => new Stack() { StackID = t, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Coal, Quantity = 10 }); module = new StackModule(NullLogger.Instance, database); result = module.GetStackQuantity(1, ResourceTypeIDs.Coal); Assert.AreEqual(10, result); database = new MockedDatabase <Stack>(false, 0, (t) => new Stack() { StackID = t, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Coal, Quantity = 10 }); module = new StackModule(NullLogger.Instance, database); result = module.GetStackQuantity(1, ResourceTypeIDs.Coal); Assert.AreEqual(0, result); }
static void Main(string[] args) { ILogger logger; VersionControlModule versionControlModule; ServiceHostModule pioServiceHostModule; ServiceHostModule taskCallbackServiceHostModule; SchedulerModule schedulerModule; IPIOService pioService; ITaskCallbackService taskCallbackService; IDatabase database; IConnectionFactory connectionFactory; ICommandBuilder commandBuilder; IDatabaseCreator databaseCreator; IPlanetGeneratorModule planetGeneratorModule; IPhraseModule phraseModule; IPlanetModule planetModule; ICellModule cellModule; IBuildingModule buildingModule; IWorkerModule workerModule; IBuilderModule factoryBuilderModule; IStackModule stackModule; IResourceTypeModule resourceTypeModule; IBuildingTypeModule buildingTypeModule; ITaskTypeModule taskTypeModule; IMaterialModule materialModule; IIngredientModule ingredientModule; IProductModule productModule; ITaskModule taskModule; IIdlerModule idlerModule; IResourceCheckerModule resourceCheckerModule; ILocationCheckerModule locationCheckerModule; IProducerModule producerModule; IHarvesterModule harvesterModule; IMoverModule moverModule; ITakerModule takerModule; IStorerModule storerModule; quitEvent = new AutoResetEvent(false); Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress); //logger = new ConsoleLogger(new DefaultLogFormatter()); logger = new UnicastLogger(IPAddress.Loopback, Properties.Settings.Default.UnicastPort); //logger = new FileLogger(new DefaultLogFormatter(), "PIO.ServerHost.Log"); databaseCreator = new SqlDatabaseCreator(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName); connectionFactory = new SqlConnectionFactory(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName); commandBuilder = new SqlCommandBuilder(); database = new Database(connectionFactory, commandBuilder); versionControlModule = new VersionControlModule(logger, databaseCreator, new PIOVersionControl(database)); if (!versionControlModule.InitializeDatabase(Properties.Settings.Default.DropDatabase)) { return; } phraseModule = new PhraseModule(logger, database); planetModule = new PlanetModule(logger, database); cellModule = new CellModule(logger, database); buildingModule = new BuildingModule(logger, database); workerModule = new WorkerModule(logger, database); stackModule = new StackModule(logger, database); resourceTypeModule = new ResourceTypeModule(logger, database); buildingTypeModule = new BuildingTypeModule(logger, database); taskTypeModule = new TaskTypeModule(logger, database); materialModule = new MaterialModule(logger, database); ingredientModule = new IngredientModule(logger, database); productModule = new ProductModule(logger, database); taskModule = new TaskModule(logger, database); factoryBuilderModule = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);; idlerModule = new IdlerModule(logger, taskModule, workerModule); resourceCheckerModule = new ResourceCheckerModule(logger, buildingModule, stackModule, ingredientModule, materialModule); locationCheckerModule = new LocationCheckerModule(logger, workerModule, buildingModule); producerModule = new ProducerModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, ingredientModule, productModule); harvesterModule = new HarvesterModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, productModule); moverModule = new MoverModule(logger, taskModule, workerModule, buildingModule); takerModule = new TakerModule(logger, taskModule, workerModule, buildingModule, stackModule); storerModule = new StorerModule(logger, taskModule, workerModule, buildingModule, stackModule); planetGeneratorModule = new PlanetGeneratorModule(logger, phraseModule, resourceTypeModule, buildingTypeModule, taskTypeModule, materialModule, ingredientModule, productModule, planetModule, cellModule, buildingModule, workerModule); if (!planetGeneratorModule.Generate()) { return; } schedulerModule = new SchedulerModule(logger, taskModule, idlerModule, producerModule, harvesterModule, moverModule, takerModule, storerModule, factoryBuilderModule); schedulerModule.Start(); pioService = new PIOService( logger, phraseModule, planetModule, cellModule, buildingModule, workerModule, stackModule, resourceTypeModule, buildingTypeModule, taskTypeModule, materialModule, ingredientModule, productModule, taskModule, schedulerModule, resourceCheckerModule, locationCheckerModule, idlerModule, producerModule, harvesterModule, moverModule, takerModule, storerModule, factoryBuilderModule); pioServiceHostModule = new ServiceHostModule(logger, pioService); pioServiceHostModule.Start(); taskCallbackService = new TaskCallbackService(logger, schedulerModule); taskCallbackServiceHostModule = new ServiceHostModule(logger, taskCallbackService); taskCallbackServiceHostModule.Start(); WaitHandle.WaitAny(new WaitHandle[] { quitEvent }, -1); taskCallbackServiceHostModule.Stop(); pioServiceHostModule.Stop(); schedulerModule.Stop(); Console.CancelKeyPress -= new ConsoleCancelEventHandler(Console_CancelKeyPress); }