public void ThrowsExceptionWhenPassingLessOrEqualToZeroCapacityParameterToConstructor(int capacity) { Assert.Throws(typeof(ArgumentException), delegate() { SmartWarehouse<int> warehouse = new SmartWarehouse<int>(capacity); }); }
public void AddProducer_ThrowsExceptionWhenPassingNullReference() { SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20); PasswordDistributor distributor = new PasswordDistributor(warehouse); Assert.Throws(typeof(NullReferenceException), delegate() { distributor.AddProducer(null); }); }
public void StopProduction_SuccessfullyStopsProduction() { SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20); PasswordProducer pp = new PasswordProducer(new FormattedText("abc")); Assert.DoesNotThrow(delegate() { pp.StartProduction(warehouse); pp.StopProduction(); }); }
public void StartConsumption_ThrowsExceptionWhenConsumptionAlreadyStarted() { SmartWarehouse<FormattedText> warehoue = new SmartWarehouse<FormattedText>(20); PasswordConsumer consumer = new PasswordConsumer(new FormattedText("abc")); consumer.StartConsumption(warehoue); Assert.Throws(typeof(InvalidOperationException), delegate() { consumer.StartConsumption(warehoue); }); }
private void AddNewWorker(SmartWarehouse<FormattedText> pWarehouse) { Worker newWorker = new Worker { warehouse = pWarehouse, thread = new Thread(Production) }; workers.Add(newWorker); newWorker.thread.Start(workers.Count - 1); }
public void AddProducer_ThrowsExceptionWhenPassingSameProducerMoreThanOnce() { SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20); PasswordDistributor distributor = new PasswordDistributor(warehouse); PasswordProducer producer = new PasswordProducer(new FormattedText("abc")); distributor.AddProducer(producer); Assert.Throws(typeof(ArgumentException), delegate() { distributor.AddProducer(producer); }); }
public void StartProduction(SmartWarehouse<FormattedText> warehouse) { if (warehouse == null) throw new NullReferenceException(); lock (workersLocker) { if (warehouseAlreadyOnList(warehouse)) throw new InvalidOperationException("Production is already in progress."); cancelationFlag = false; AddNewWorker(warehouse); } }
public void StartConsumption(SmartWarehouse<FormattedText> warehouse) { if (warehouse == null) throw new NullReferenceException(); lock (synchronizationObject) { if (IsConsumtionInProgress) throw new InvalidOperationException("Consumption is already in progress."); IsConsumtionInProgress = true; worker = Task.Run(() => { Consumption(warehouse); }); } }
public void StartConsumption_ThrowsExceptionWhenTryingToCallMethodWhenConsumptionIsNotStopped() { SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20); PasswordDistributor distributor = new PasswordDistributor(warehouse); PasswordConsumer consumer = new PasswordConsumer(new FormattedText("cba")); consumer.PasswordTakingMaximumTime = 20; distributor.AddConsumer(consumer); distributor.StartConsumption(); Assert.Throws(typeof(InvalidOperationException), delegate() { distributor.StartConsumption(); }); Thread.Sleep(2); consumer.StopConsumption(); }
static void Main(string[] args) { SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20); PasswordProducer pp = new PasswordProducer(new FormattedText("abc")); PasswordConsumer pc = new PasswordConsumer(new FormattedText("cba")); PasswordDistributor distributor = new PasswordDistributor(warehouse); distributor.AddProducer(pp); distributor.AddConsumer(pc); distributor.StartConsumption(); PasswordConsumer consumer = new PasswordConsumer(new FormattedText("bca")); distributor.AddConsumer(consumer); distributor.StartProduction(); PasswordProducer producer = new PasswordProducer(new FormattedText("abc")); distributor.AddProducer(producer); Console.ReadLine(); Console.WriteLine(warehouse.Count); }
public void ReturnsSmartWarehouseObject() { SmartWarehouse<int> warehouse = new SmartWarehouse<int>(2); Assert.IsNotNull(warehouse); }
private void Consumption(SmartWarehouse<FormattedText> warehouse) { cancelationFlag = false; bool passwordFound = false; while (!cancelationFlag && !passwordFound) { Console.WriteLine("Consumer is trying to take the Password."); FormattedText temporaryPassword; bool passwordWasTaken = warehouse.TryTake(out temporaryPassword, PasswordTakingMaximumTime); if (passwordWasTaken) { Console.WriteLine("Consumer took the Password."); if (temporaryPassword.CompareTo(desiredPassword) == 0) { Console.WriteLine("Consumer found the Password."); passwordFound = true; if (OnDesiredPasswordFound != null) OnDesiredPasswordFound(); } } else Console.WriteLine("Consumer was not able to take the Password due to maximum waiting time."); } IsConsumtionInProgress = false; }
private bool warehouseAlreadyOnList(SmartWarehouse<FormattedText> warehouse) { bool onList = false; foreach (Worker w in workers) { onList = ReferenceEquals(warehouse, w.warehouse); if (onList) break; } return onList; }
public void StartProduction_ThrowsExceptionWhenTryingToCallMethodWhenProductionIsNotStopped() { SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20); PasswordDistributor distributor = new PasswordDistributor(warehouse); PasswordProducer producer = new PasswordProducer(new FormattedText("abc")); producer.PasswordAdditionMaximumTime = 20; distributor.AddProducer(producer); distributor.StartProduction(); Assert.Throws(typeof(InvalidOperationException), delegate() { distributor.StartProduction(); }); producer.StopProduction(); }
public void ReturnsPasswordDistributorObject() { SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20); PasswordDistributor distributor = new PasswordDistributor(warehouse); Assert.IsNotNull(distributor); }
public PasswordDistributor(SmartWarehouse<FormattedText> warehouse) { if (warehouse == null) throw new NullReferenceException(); this.warehouse = warehouse; }