[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 }); }
public StatsResult DistributePower(Game game, int power) { var result = new StatsResult(); _engine.Invoke("distributePower", game, power, result); return(result); }
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); }
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); }
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); }
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); }
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 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(); }
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"); }
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(); }
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(); }