def test_production_unit_with_stocking_area(self): stock_zone = StockingZone() self.loaded_production_unit.output_stocking_zone = stock_zone ProduceOperation(self.loaded_production_unit, worker=self.worker).run() self.assertEquals(stock_zone.count(), 1)
def test_production_unit_with_limited_stocking_area(self): stock_zone = StockingZone(size=3) self.loaded_production_unit.output_stocking_zone = stock_zone LoadOperation(Material("yarn", 10), self.loaded_production_unit, worker=self.worker).run() try: ProduceOperation(self.loaded_production_unit, worker=self.worker).run(during=5) except Event: pass self.assertEquals(stock_zone.count(), 3)
def test_hour_of_production_with_unloading(self): # Load for 1 minute, produce for 1 minute, unload for 1 minute load_op = LoadOperation(Material(type="wood", quantity=1), time_to_perform=1, production_unit=self.machine, worker=self.worker) secondary_area = StockingZone() unload_op = UnloadOperation(quantity=1, zone=secondary_area, time_to_perform=1, production_unit=self.machine, worker=self.worker) product_op = ProduceOperation(production_unit=self.machine) operation_list = [load_op, product_op, unload_op] process = Process(self.machine, operation_list) process.run(180) self.assertEquals(secondary_area.count(), 60)
def create_machine(material_type_input="input", material_type_output="output", stocking_zone_size=40, rate=1): spec = Specification() config = {'rate_by_minute': rate} spec.add( MaterialInputConstraint(Material(type=material_type_input, quantity=1))) spec.add_output_material(Material(type=material_type_output, quantity=1)) stock_zone = StockingZone(size=stocking_zone_size) machine = ProductionUnit(spec, config, output_stocking_zone=stock_zone) return machine, spec, stock_zone
def test_parallel_process(self): load_op = LoadOperation(Material(type="wood", quantity=1), production_unit=self.machine, worker=self.worker) secondary_area = StockingZone() unload_op = UnloadOperation(quantity=10, zone=secondary_area, production_unit=self.machine, worker=self.worker) product_op = ProduceOperation(production_unit=self.machine, worker=self.worker) process_1_operations = [load_op, product_op] process_2_operations = [unload_op] process_1 = Process(self.machine, process_1_operations) process_2 = Process(self.machine, process_2_operations) main_process = ParallelProcess([process_1, process_2]) main_process.run(1) self.assertEquals(secondary_area.count(), 0) main_process.run(3) self.assertEquals(secondary_area.count(), 2) main_process.run(56) self.assertEquals(secondary_area.count(), 30)
def test_count(self): stock_zone = StockingZone() stock_zone.add_to_stock(Material("something", 2)) stock_zone.add_to_stock(Material("something", 1)) stock_zone.add_to_stock(Material("other", 4)) self.assertEquals(stock_zone.count(), 7)