コード例 #1
0
        public void When_a_Wardrobe_has_less_space_than_the_element_needs_it_should_throw_an_exception()
        {
            var wardrobe = Wardrobe.Create(40);
            var element  = Element.Create(50);

            Assert.Throws <ApplicationException>(() => wardrobe.AddElement(element));
        }
コード例 #2
0
        public void When_a_Wardrobe_has_one_50_Element_its_RemainingSpace_should_be_reduced_by_50()
        {
            var wardrobe = Wardrobe.Create(250);
            var element  = Element.Create(50);

            wardrobe.AddElement(element);
            Assert.Equal(200, wardrobe.RemainingSpace);
        }
コード例 #3
0
        public static Wardrobe Create(int width)
        {
            if (width < 0)
            {
                throw new ApplicationException();
            }

            var wardrobe = new Wardrobe(width);

            return(wardrobe);
        }
コード例 #4
0
        public Wardrobe[] FindMatchingOptions(int wardrobeWidth)
        {
            var wardrobe = Wardrobe.Create(wardrobeWidth);
            var added    = false;

            do
            {
                added = TryAddElement(wardrobe);
            } while (added);

            return(new[] { wardrobe });
        }
コード例 #5
0
        private Element FindNextFittingElement(Wardrobe wardrobe)
        {
            var orderedElements = elements.OrderByDescending(x => x.width);

            foreach (var el in orderedElements)
            {
                if (el.fits(wardrobe.RemainingSpace))
                {
                    return(el);
                }
            }
            return(null);
        }
コード例 #6
0
        private bool TryAddElement(Wardrobe wardrobe)
        {
            var nextElement = FindNextFittingElement(wardrobe);

            if (nextElement != null)
            {
                wardrobe.AddElement(nextElement);
                return(true);
            }
            else
            {
                return(false);
            }
        }
コード例 #7
0
        public void When_using_a_greedy_strategy_then_the_widest_element_should_be_choosen()
        {
            var el50          = Element.Create(50);
            var elements      = new[] { el50, Element.Create(40) };
            var strategy      = new GreedyStrategy(elements);
            var wardrobeWidth = 50;

            Wardrobe[] options = strategy.FindMatchingOptions(wardrobeWidth);

            var wardrobe = Wardrobe.Create(50);

            wardrobe.AddElement(el50);
            var expected = new[] { wardrobe };

            Assert.Equal(new[] { el50 }, options[0].Elements);
        }
コード例 #8
0
        public void When_using_a_greedy_strategy_and_the_widest_element_is_to_big_then_the_secound_smallest_element_should_be_added()
        {
            var el50          = Element.Create(50);
            var el40          = Element.Create(40);
            var elements      = new[] { el50, el40 };
            var strategy      = new GreedyStrategy(elements);
            var wardrobeWidth = 49;

            Wardrobe[] options = strategy.FindMatchingOptions(wardrobeWidth);

            var wardrobe = Wardrobe.Create(wardrobeWidth);

            wardrobe.AddElement(el40);
            var expected = new[] { wardrobe };

            Assert.Equal(new[] { el40 }, options[0].Elements);
        }
コード例 #9
0
        public void When_Creating_a_Wardrobe_a_positive_width_should_be_accepted()
        {
            var wardrobe = Wardrobe.Create(250);

            Assert.Equal(250, wardrobe.width);
        }
コード例 #10
0
        public void wordrobe_should_return_remaining_space()
        {
            var wardrobe = Wardrobe.Create(250);

            Assert.Equal(250, wardrobe.RemainingSpace);
        }
コード例 #11
0
 public void When_Creating_a_Wardrobe_a_negative_width_should_be_rejected()
 {
     Assert.Throws <ApplicationException>(() => Wardrobe.Create(-10));
 }