public void ReturnsBasedOnScoringFunction()
        {
            var balancer = new AdaptiveLoadBalancer <Scoreable>(s => (int)(s.PercentMemoryUsec * 100));

            balancer.Resources.Add(new Scoreable
            {
                Uri = new Uri("http://base.one"),
                PercentMemoryUsec = .25
            });
            balancer.Resources.Add(new Scoreable
            {
                Uri = new Uri("http://base.two"),
                PercentMemoryUsec = .75
            });
            balancer.Resources.Add(new Scoreable
            {
                Uri = new Uri("http://base.three"),
                PercentMemoryUsec = .5
            });

            var item = balancer.GetResource();

            item.Uri.Should().Be(new Uri("http://base.one"));
            item.PercentMemoryUsec = .8;

            item = balancer.GetResource();
            item.Uri.Should().Be(new Uri("http://base.three"));

            balancer.GetResource().Should().BeSameAs(item);
        }
        public void OnlyItemReturnedEveryTime()
        {
            var balancer = new AdaptiveLoadBalancer <Scoreable>(s => (int)(s.PercentMemoryUsec * 100));

            balancer.Resources.Add(new Scoreable
            {
                Uri = new Uri("http://only.one"),
                PercentMemoryUsec = .75
            });

            var sameAsFirst = balancer.GetResource();

            sameAsFirst.Should().NotBeNull();

            foreach (var _ in Enumerable.Range(1, 100))
            {
                balancer.GetResource().Should().Be(sameAsFirst);
            }
        }
        public void NothingReturnedWhenNoEntries()
        {
            var balancer = new AdaptiveLoadBalancer <Scoreable>(s => (int)(s.PercentMemoryUsec * 100));

            balancer.GetResource().Should().BeNull();
        }