# HG changeset patch # User IBBoard # Date 1275735489 0 # Node ID 57b5d27e95fb5ee85cb54a27d6e86b179a20c7fe # Parent 8a350c00797e74ea23760e41768a6412e80c020e Fixes #45: Create composite limit * Create abstract implementation tests of a composite limit * Create tests for limits based on minimum and maximum of composition diff -r 8a350c00797e -r 57b5d27e95fb Limits/AbstractCompositeLimitTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Limits/AbstractCompositeLimitTest.cs Sat Jun 05 10:58:09 2010 +0000 @@ -0,0 +1,49 @@ +// This file (AbstractCompositeLimitTest.cs) is a part of the IBBoard.Tests project and is copyright 2010 IBBoard +// +// // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. +using System.Collections.Generic; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; + +namespace IBBoard.Limits +{ + public abstract class AbstractCompositeLimitTest + { + [Test()] + public void TestCompositeWithZeroLimits() + { + Assert.That(CreateCompositeLimitWithCollection(new List()).GetLimit(100), Is.EqualTo(0)); + } + + [Test()] + public void TestCompositeWithOneLimitReturnsLimitValue() + { + NumericSizeConstrainedLimit limit = new NumericSizeConstrainedLimit(10); + AbstractCompositeLimit compositeLimit = CreateCompositeLimitWithLimit(limit); + Assert.That(compositeLimit.GetLimit(1), Is.EqualTo(limit.GetLimit(1))); + Assert.That(compositeLimit.GetLimit(10), Is.EqualTo(limit.GetLimit(10))); + Assert.That(compositeLimit.GetLimit(100), Is.EqualTo(limit.GetLimit(100))); + } + + [Test()] + public void TestCompositeWithMultipleLimitsReturnsCorrectValues() + { + List limits = new List(); + int sizeConstrainedLimitNum = 10; + NumericSizeConstrainedLimit limit1 = new NumericSizeConstrainedLimit(sizeConstrainedLimitNum); + limits.Add(limit1); + int absoluteLimitNum = 5; + AbsoluteNumericLimit limit2 = new AbsoluteNumericLimit(absoluteLimitNum); + limits.Add(limit2); + AbstractCompositeLimit compositeLimit = CreateCompositeLimitWithCollection(limits); + Assert.That(compositeLimit.GetLimit(1), Is.EqualTo(GetMultipleLimitValue(1, sizeConstrainedLimitNum, absoluteLimitNum))); + Assert.That(compositeLimit.GetLimit(10), Is.EqualTo(GetMultipleLimitValue(10, sizeConstrainedLimitNum, absoluteLimitNum))); + Assert.That(compositeLimit.GetLimit(100), Is.EqualTo(GetMultipleLimitValue(100, sizeConstrainedLimitNum, absoluteLimitNum))); + } + + protected abstract AbstractCompositeLimit CreateCompositeLimitWithLimit(ILimit limit); + protected abstract AbstractCompositeLimit CreateCompositeLimitWithCollection(List limits); + protected abstract int GetMultipleLimitValue(int numberBeingLimited, int sizeConstrainedLimitNum, int absoluteLimitNum); + } +} + diff -r 8a350c00797e -r 57b5d27e95fb Limits/CompositeMaximumLimitTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Limits/CompositeMaximumLimitTest.cs Sat Jun 05 10:58:09 2010 +0000 @@ -0,0 +1,32 @@ +// This file (CompositeMinimumLimitTest.cs) is a part of the IBBoard.Tests project and is copyright 2010 IBBoard +// +// // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. +using System; +using System.Collections.Generic; +using NUnit.Framework; +namespace IBBoard.Limits +{ + [TestFixture()] + public class CompositeMaximumLimitTest : AbstractCompositeLimitTest + { + protected override AbstractCompositeLimit CreateCompositeLimitWithLimit(ILimit limit) + { + return new CompositeMaximumLimit(limit); + } + + + protected override AbstractCompositeLimit CreateCompositeLimitWithCollection(List limits) + { + return new CompositeMaximumLimit(limits); + } + + + protected override int GetMultipleLimitValue(int numberBeingLimited, int sizeConstrainedLimitNum, int absoluteLimitNum) + { + int limitedNum = Math.Min(sizeConstrainedLimitNum, numberBeingLimited); + limitedNum = Math.Max(limitedNum, absoluteLimitNum); + return limitedNum; + } + } +} + diff -r 8a350c00797e -r 57b5d27e95fb Limits/CompositeMinimumLimitTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Limits/CompositeMinimumLimitTest.cs Sat Jun 05 10:58:09 2010 +0000 @@ -0,0 +1,32 @@ +// This file (CompositeMinimumLimitTest.cs) is a part of the IBBoard.Tests project and is copyright 2010 IBBoard +// +// // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. +using System; +using System.Collections.Generic; +using NUnit.Framework; +namespace IBBoard.Limits +{ + [TestFixture()] + public class CompositeMinimumLimitTest : AbstractCompositeLimitTest + { + protected override AbstractCompositeLimit CreateCompositeLimitWithLimit (ILimit limit) + { + return new CompositeMinimumLimit(limit); + } + + + protected override AbstractCompositeLimit CreateCompositeLimitWithCollection (List limits) + { + return new CompositeMinimumLimit(limits); + } + + + protected override int GetMultipleLimitValue(int numberBeingLimited, int sizeConstrainedLimitNum, int absoluteLimitNum) + { + int limitedNum = Math.Min(sizeConstrainedLimitNum, numberBeingLimited); + limitedNum = Math.Min(limitedNum, absoluteLimitNum); + return limitedNum; + } + } +} +