diff --git a/Buckets.Logic/Container.cs b/Buckets.Logic/Container.cs index 8d300b9..8eb1aef 100644 --- a/Buckets.Logic/Container.cs +++ b/Buckets.Logic/Container.cs @@ -4,8 +4,29 @@ { private int content; + public delegate void FullEventHandler(Container container, EventArgs eventArgs); + public delegate void OverflowEventHandler(Container container, OverflowEventArgs eventArgs); + public event FullEventHandler? Full; + public event OverflowEventHandler? Overflowed; + public int Capacity { get; } - public int Content {get => content; set { ArgumentOutOfRangeException.ThrowIfNegative(value, nameof(Content)); ArgumentOutOfRangeException.ThrowIfGreaterThan(value, Capacity, nameof(Content)); content = value; } } + public int Content + { + get => content; + set + { + ArgumentOutOfRangeException.ThrowIfNegative(value, nameof(Content)); + if (value == Capacity) + { + Full?.Invoke(this, new()); + } + else if (value > Capacity) + { + Overflowed?.Invoke(this, new(value - Capacity)); + } + content = Math.Min(value, Capacity); + } + } public Container(int capacity, int content) { diff --git a/Buckets.Logic/OverflowEventArgs.cs b/Buckets.Logic/OverflowEventArgs.cs new file mode 100644 index 0000000..fb4df72 --- /dev/null +++ b/Buckets.Logic/OverflowEventArgs.cs @@ -0,0 +1,7 @@ +namespace Buckets.Logic +{ + public class OverflowEventArgs(int overflowAmount) : EventArgs + { + public int OverflowAmount { get; } = overflowAmount; + } +} diff --git a/Buckets.Test/BucketTest.cs b/Buckets.Test/BucketTest.cs index 6be0d52..0610a20 100644 --- a/Buckets.Test/BucketTest.cs +++ b/Buckets.Test/BucketTest.cs @@ -30,17 +30,6 @@ namespace Buckets.Test }); } - [TestMethod] - public void Fill_BucketOverCapacity_ShouldThrow() - { - Bucket bucket = new(10, 0); - Bucket bucket2 = new(20, 20); - Assert.ThrowsException(() => - { - bucket.Fill(bucket2); - }); - } - [TestMethod] public void Fill_SecondBucket_ShouldEqual0() { diff --git a/Buckets.Test/ContainerTest.cs b/Buckets.Test/ContainerTest.cs index a4651ed..f4881a0 100644 --- a/Buckets.Test/ContainerTest.cs +++ b/Buckets.Test/ContainerTest.cs @@ -23,15 +23,6 @@ namespace Buckets.Test }); } - [TestMethod] - public void Container_ContentLargerThanCapacity_ShouldThrow() - { - Assert.ThrowsException(() => - { - Bucket container = new(0, 1); - }); - } - [TestMethod] public void Container_ValidParameters_ShouldEqual10() { @@ -39,16 +30,6 @@ namespace Buckets.Test Assert.AreEqual(10, container.Content); } - [TestMethod] - public void Fill_ContentLargerThanCapacity_ShouldThrow() - { - Bucket container = new(20, 10); - Assert.ThrowsException(() => - { - container.Fill(20); - }); - } - [TestMethod] public void Fill_ValidParameters_ShouldEqual15() { diff --git a/Buckets.Test/EventTest.cs b/Buckets.Test/EventTest.cs new file mode 100644 index 0000000..6d5573a --- /dev/null +++ b/Buckets.Test/EventTest.cs @@ -0,0 +1,28 @@ +using Buckets.Logic; + +namespace Buckets.Test +{ + [TestClass] + public class EventTest + { + [TestMethod] + public void FullEvent() + { + Bucket bucket = new(200, 100); + bool didRun = false; + bucket.Full += (Container container, EventArgs eventArgs) => didRun = true; + bucket.Fill(100); + Assert.IsTrue(didRun); + } + + [TestMethod] + public void OverflowEvent() + { + Bucket bucket = new(200, 100); + int overflow = 0; + bucket.Overflowed += (Container container, OverflowEventArgs eventArgs) => overflow = eventArgs.OverflowAmount; + bucket.Fill(200); + Assert.AreEqual(100, overflow); + } + } +}