[InlineData(5000, 0, 5, 1)]  // timeout shouldn't occur; always get it from HTTP
        public async Task Tests_redis_cache_fallback_functionality(int maxTimeoutInMs, int cacheHits, int cacheMisses, int timeoutBetweenExecutions)
        {
            const string url = "http://thecatapi.com/api/images/get?format=html";

            RedisCacheOptions options = new RedisCacheOptions
            {
                Configuration = "localhost",
                InstanceName  = "example-tests" + Guid.NewGuid() // create a new instance name to ensure a unique key naming to have consistent test results
            };

            var handler = new RedisCacheFallbackHandler(new HttpClientHandler(), TimeSpan.FromMilliseconds(maxTimeoutInMs), TimeSpan.FromDays(100), options);

            using (var client = new HttpClient(handler))
            {
                for (int i = 0; i < 5; i++)
                {
                    var sw = Stopwatch.StartNew();
                    Debug.Write($"Getting data from {url}, iteration #{i + 1}...");
                    var result = await client.GetAsync(url);

                    var content = await result.Content.ReadAsStringAsync();

                    Debug.WriteLine($" completed in {sw.ElapsedMilliseconds}ms. Content was {content}.");
                    await Task.Delay(timeoutBetweenExecutions);
                }
            }

            StatsResult stats = handler.StatsProvider.GetStatistics();

            stats.Total.CacheHit.Should().Be(cacheHits, "cache hit mismatch");
            stats.Total.CacheMiss.Should().Be(cacheMisses, "cache miss mismatch");
        }
        private TeamResultPrediction Predict(string teamName, int matchesToAnalyzeCount, TrainingResult trainingResult)
        {
            var lastMatchesStats = _soccerTeamLastStatsDataService.GetTeamLastStats(teamName, matchesToAnalyzeCount);

            var statsResult = new StatsResult
            {
                BallPossession = lastMatchesStats.Sum(s => s.BallPossession),
                AttacksOnGoal  = lastMatchesStats.Sum(s => s.AttacksOnGoal),
                ShotsOnGoal    = lastMatchesStats.Sum(s => s.ShotsOnGoal),
                ShotsOutGoal   = lastMatchesStats.Sum(s => s.ShotsOutGoal),
                Corners        = lastMatchesStats.Sum(s => s.Corners),
                Passes         = lastMatchesStats.Sum(s => s.Passes),
                AccuratePasses = lastMatchesStats.Sum(s => s.AccuratePasses),
                Blocks         = lastMatchesStats.Sum(s => s.Blocks),
                Points         = lastMatchesStats.Sum(s => s.ResultPoints)
            };

            var predictionFunction = trainingResult.Model.CreatePredictionEngine <StatsResult, StatsResultPrediction>(trainingResult.MlContext);

            var prediction = predictionFunction.Predict(statsResult);

            return(new TeamResultPrediction {
                TeamName = teamName, Result = prediction.Result
            });
        }
Beispiel #3
0
        public StatsResult DistributePower(Game game, int power)
        {
            var result = new StatsResult();

            _engine.Invoke("distributePower", game, power, result);
            return(result);
        }
Beispiel #4
0
        public async Task Tests_redis_live_connection()
        {
            const string url = "http://thecatapi.com/api/images/get?format=html";

            RedisCacheOptions options = new RedisCacheOptions
            {
                Configuration = "localhost",
                InstanceName  = "example-tests" + Guid.NewGuid() // create a new instance name to ensure a unique key naming to have consistent test results
            };

            var handler = new RedisCacheHandler(new HttpClientHandler(), CacheExpirationProvider.CreateSimple(TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(5)), options);

            using (var client = new HttpClient(handler))
            {
                for (int i = 0; i < 5; i++)
                {
                    var sw = Stopwatch.StartNew();
                    Debug.Write($"Getting data from {url}, iteration #{i + 1}...");
                    var result = await client.GetAsync(url);

                    var content = await result.Content.ReadAsStringAsync();

                    Debug.WriteLine($" completed in {sw.ElapsedMilliseconds}ms. Content was {content}.");
                }
            }

            StatsResult stats = handler.StatsProvider.GetStatistics();

            stats.Total.CacheHit.Should().Be(4);
            stats.Total.CacheMiss.Should().Be(1);
        }
Beispiel #5
0
        public StatsResult ParseStatsNode(XElement node)
        {
            var typedStatsResult = new TypedStatsResult();
            var r = new StatsResult(typedStatsResult);

            foreach (var statNode in node.Elements())
            {
                var name  = statNode.Attribute("name").Value;
                var value = statNode.Name.LocalName.Equals("null") ? null : statNode.Value;
                switch (name)
                {
                case "min":
                    r.Min = GetDoubleValue(statNode);
                    typedStatsResult.Min = value;
                    break;

                case "max":
                    r.Max = GetDoubleValue(statNode);
                    typedStatsResult.Max = value;
                    break;

                case "sum":
                    r.Sum = GetDoubleValue(statNode);
                    typedStatsResult.Sum = value;
                    break;

                case "sumOfSquares":
                    r.SumOfSquares = GetDoubleValue(statNode);
                    typedStatsResult.SumOfSquares = value;
                    break;

                case "mean":
                    r.Mean = GetDoubleValue(statNode);
                    typedStatsResult.Mean = value;
                    break;

                case "stddev":
                    r.StdDev = GetDoubleValue(statNode);
                    typedStatsResult.StdDev = value;
                    break;

                case "count":
                    r.Count = Convert.ToInt64(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "missing":
                    r.Missing = Convert.ToInt64(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "percentiles":
                    r.Percentiles = ParsePercentilesNode(statNode);
                    break;

                default:
                    r.FacetResults = ParseFacetNode(statNode);
                    break;
                }
            }
            return(r);
        }
        private List <string> CreateFuncs(StatsResult stats)
        {
            List <string> funcsList = new List <string>();

            foreach (var state in StateArray)
            {
                string func    = "";
                string numFunc = "";
                double value   = 0;
                foreach (var tempState in StateArray)
                {
                    foreach (var cond in tempState.JumpConditionArray)
                    {
                        if (cond.JumpState.Index == state.Index)
                        {
                            func    = AttachCondToFunc(func, cond, tempState);
                            numFunc = AttachCondToNumFunc(numFunc, cond, stats.FrequencyList[tempState.Index - 1]);
                            value   = CalcValue(value, cond, stats.FrequencyList[tempState.Index - 1]);
                        }
                    }
                }
                func = $"P{state.Index} = {func} = {numFunc} = {value:0.00000}";
                funcsList.Add(func);
            }
            return(funcsList);
        }
Beispiel #7
0
        public async Task Tests_cache_invalidation()
        {
            const string url = "http://thecatapi.com/api/images/get?format=html";

            var handler = new InMemoryCacheHandler(new HttpClientHandler(), CacheExpirationProvider.CreateSimple(TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(5)));

            using (var client = new HttpClient(handler))
            {
                for (int i = 0; i < 5; i++)
                {
                    var sw = Stopwatch.StartNew();
                    Debug.Write($"Getting data from {url}, iteration #{i + 1}...");
                    var result = await client.GetAsync(url);

                    var content = await result.Content.ReadAsStringAsync();

                    Debug.WriteLine($" completed in {sw.ElapsedMilliseconds}ms. Content was {content}.");
                    if (i % 2 == 0)
                    {
                        Debug.WriteLine($"Iteration {i}. Invalidating cache.");
                        handler.InvalidateCache(new Uri(url));
                    }
                }
            }

            StatsResult stats = handler.StatsProvider.GetStatistics();

            stats.Total.CacheHit.Should().Be(2);
            stats.Total.CacheMiss.Should().Be(3);
        }
Beispiel #8
0
        public StatsResult ParseStatsNode(XElement node)
        {
            var r = new StatsResult();

            foreach (var statNode in node.Elements())
            {
                var    name = statNode.Attribute("name").Value;
                double dnumber;
                long   lnumber;
                switch (name)
                {
                case "min":
                    r.Min = Double.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out dnumber) ? dnumber : (double?)null;
                    break;

                case "max":
                    r.Max = Double.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out dnumber) ? dnumber : (double?)null;
                    break;

                case "sum":
                    r.Sum = Double.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out dnumber) ? dnumber : (double?)null;
                    break;

                case "sumOfSquares":
                    r.SumOfSquares = Double.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out dnumber) ? dnumber : (double?)null;
                    break;

                case "mean":
                    r.Mean = Double.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out dnumber) ? dnumber : (double?)null;
                    break;

                case "stddev":
                    r.StdDev = Double.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out dnumber) ? dnumber : (double?)null;
                    break;

                case "count":
                    r.Count = Int64.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out lnumber) ? lnumber : Int64.MinValue;
                    break;

                case "missing":
                    r.Missing = Int64.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out lnumber) ? lnumber : Int64.MinValue;
                    break;

                case "distinctValues":
                    r.DistinctValues = statNode.Elements().Select(getnode => getnode.Value).ToList();
                    break;

                case "countDistinct":
                    r.CountDistinct = Int64.TryParse(statNode.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out lnumber) ? lnumber : Int64.MinValue;
                    break;

                default:
                    r.FacetResults = ParseFacetNode(statNode);
                    break;
                }
            }
            return(r);
        }
 public void SetUp()
 {
     player = new Player {
         Name = "Gandalf", IsIt = true
     };
     GetMock <IPlayerRepository>().Setup(x => x.GetAllPlayers()).Returns(new List <Player> {
         player
     });
     result = ClassUnderTest.Execute();
 }
        public virtual ImageBox Statistics()
        {
            if (IsDisposed)
            {
                throw new ObjectDisposedException(nameof(ImageBox));
            }

            Stats = new Stats(Image).Count();

            return(this);
        }
Beispiel #11
0
 public void DumpStats(StatsResult s, int tabs)
 {
     print(tabs, "Min: {0}", s.Min);
     print(tabs, "Max: {0}", s.Max);
     print(tabs, "Sum of squares: {0}", s.SumOfSquares);
     foreach (var f in s.FacetResults)
     {
         print(tabs, "Facet: {0}", f.Key);
         foreach (var fv in f.Value)
         {
             print(tabs + 1, "Facet value: {0}", fv.Key);
             DumpStats(fv.Value, tabs + 2);
         }
     }
 }
Beispiel #12
0
        public StatsResult ParseStatsNode(XElement node)
        {
            var r = new StatsResult();

            foreach (var statNode in node.Elements())
            {
                var name = statNode.Attribute("name").Value;
                switch (name)
                {
                case "min":
                    r.Min = Convert.ToDouble(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "max":
                    r.Max = Convert.ToDouble(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "sum":
                    r.Sum = Convert.ToDouble(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "sumOfSquares":
                    r.SumOfSquares = Convert.ToDouble(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "mean":
                    r.Mean = Convert.ToDouble(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "stddev":
                    r.StdDev = Convert.ToDouble(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "count":
                    r.Count = Convert.ToInt64(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                case "missing":
                    r.Missing = Convert.ToInt64(statNode.Value, CultureInfo.InvariantCulture);
                    break;

                default:
                    r.FacetResults = ParseFacetNode(statNode);
                    break;
                }
            }
            return(r);
        }
        public void Calculates_total_correctly()
        {
            var stats = new StatsResult("unit-test");

            long hits = 0;
            long misses = 0;

            for (int i = 0; i < 10; i++)
            {
                stats.PerStatusCode.Add((HttpStatusCode) 400 + i, new StatsValue {CacheHit = 2 * i, CacheMiss = i});
                hits += 2 * i;
                misses += i;
            }
            stats.Total.CacheHit.Should().Be(hits);
            stats.Total.CacheMiss.Should().Be(misses);
        }
            public void SetUp()
            {
                var isItPlayer = new Player {
                    Name = "Gandalf", IsIt = true
                };

                firstNotItPlayer = new Player {
                    Name = "Gimli", IsIt = false
                };
                secondNotItPlayer = new Player {
                    Name = "Frodo", IsIt = false
                };
                GetMock <IPlayerRepository>().Setup(x => x.GetAllPlayers()).Returns(new List <Player> {
                    isItPlayer, firstNotItPlayer, secondNotItPlayer
                });
                result = ClassUnderTest.Execute();
            }
Beispiel #15
0
        public void Calculates_total_correctly()
        {
            var stats = new StatsResult("unit-test");

            long hits   = 0;
            long misses = 0;

            for (int i = 0; i < 10; i++)
            {
                stats.PerStatusCode.Add((HttpStatusCode)400 + i, new StatsValue {
                    CacheHit = 2 * i, CacheMiss = i
                });
                hits   += 2 * i;
                misses += i;
            }
            stats.Total.CacheHit.Should().Be(hits);
            stats.Total.CacheMiss.Should().Be(misses);
        }
        [InlineData(5000, 0, 5, 1)] // timeout shouldn't occur; always get it from HTTP
        public async Task Tests_in_memory_cache_fallback_functionality(int maxTimeoutInMs, int cacheHits, int cacheMisses, int timeoutBetweenExecutions)
        {
            const string url = "http://thecatapi.com/api/images/get?format=html";
            
            var handler = new InMemoryCacheFallbackHandler(new HttpClientHandler(), TimeSpan.FromMilliseconds(maxTimeoutInMs), TimeSpan.FromDays(100));
            using (var client = new HttpClient(handler))
            {
                for (int i = 0; i < 5; i++)
                {
                    var sw = Stopwatch.StartNew();
                    Debug.Write($"Getting data from {url}, iteration #{i + 1}...");
                    var result = await client.GetAsync(url);
                    var content = await result.Content.ReadAsStringAsync();
                    Debug.WriteLine($" completed in {sw.ElapsedMilliseconds}ms. Content was {content}.");
                    await Task.Delay(timeoutBetweenExecutions);
                }
            }

            StatsResult stats = handler.StatsProvider.GetStatistics();
            stats.Total.CacheHit.Should().Be(cacheHits, "cache hit mismatch");
            stats.Total.CacheMiss.Should().Be(cacheMisses, "cache miss mismatch");
        }
Beispiel #17
0
        static void Main(string[] args)
        {
            const string url = "http://worldclockapi.com/api/json/utc/now";

            // HttpClient uses an HttpClientHandler nested into InMemoryCacheHandler in order to handle http get response caching
            var httpClientHandler = new HttpClientHandler();
            var cacheExpirationPerHttpResponseCode = CacheExpirationProvider.CreateSimple(TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(5));
            var handler = new InMemoryCacheHandler(httpClientHandler, cacheExpirationPerHttpResponseCode);

            using (var client = new HttpClient(handler))
            {
                // HttpClient calls the same API endpoint five times:
                // - The first attempt is called against the real API endpoint since no cache is available
                // - Attempts 2 to 5 can be read from cache
                for (var i = 1; i <= 5; i++)
                {
                    Console.Write($"Attempt {i}: HTTP GET {url}...");
                    var stopwatch = Stopwatch.StartNew();
                    var result    = client.GetAsync(url).GetAwaiter().GetResult();

                    // Do something useful with the returned content...
                    var content = result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
                    Console.WriteLine($" completed in {stopwatch.ElapsedMilliseconds}ms");

                    // Artificial wait time...
                    Thread.Sleep(1000);
                }
            }

            Console.WriteLine();

            StatsResult stats = handler.StatsProvider.GetStatistics();

            Console.WriteLine($"TotalRequests: {stats.Total.TotalRequests}");
            Console.WriteLine($"-> CacheHit: {stats.Total.CacheHit}");
            Console.WriteLine($"-> CacheMiss: {stats.Total.CacheMiss}");
            Console.ReadKey();
        }
Beispiel #18
0
 public void DumpStats(StatsResult s, int tabs)
 {
     print(tabs, "Min: {0}", s.Min);
     print(tabs, "Max: {0}", s.Max);
     print(tabs, "Sum of squares: {0}", s.SumOfSquares);
     foreach (var f in s.FacetResults) {
         print(tabs, "Facet: {0}", f.Key);
         foreach (var fv in f.Value) {
             print(tabs+1, "Facet value: {0}", fv.Key);
             DumpStats(fv.Value, tabs+2);
         }
     }
 }
 public void SetUp()
 {
     result = ClassUnderTest.Execute();
 }