Example #1
0
        public void AsciiTab()
        {
            AsciiChart P = new AsciiChart();

            P.HelpCtx = hcAsciiTable;
            InsertWindow(P);
        }
        public void Should_GraphXY()
        {
            var width     = 20;
            var height    = 18;
            var startTime = DateTime.Now;
            var data      = new Dictionary <DateTime, double>()
            {
                { startTime.Add(TimeSpan.FromSeconds(0)), 0 },
                { startTime.Add(TimeSpan.FromSeconds(1)), 1 },
                { startTime.Add(TimeSpan.FromSeconds(2)), 3 },
                { startTime.Add(TimeSpan.FromSeconds(3)), 13 },
                { startTime.Add(TimeSpan.FromSeconds(4)), 18 },
                { startTime.Add(TimeSpan.FromSeconds(5)), 15 },
                { startTime.Add(TimeSpan.FromSeconds(6)), 15 },
                { startTime.Add(TimeSpan.FromSeconds(7)), 15 },
                { startTime.Add(TimeSpan.FromSeconds(8)), 7 },
                { startTime.Add(TimeSpan.FromSeconds(9)), 2 },

                { startTime.Add(TimeSpan.FromSeconds(10)), 0 },
                { startTime.Add(TimeSpan.FromSeconds(11)), 1 },
                { startTime.Add(TimeSpan.FromSeconds(12)), 3 },
                { startTime.Add(TimeSpan.FromSeconds(13)), 13 },
                { startTime.Add(TimeSpan.FromSeconds(14)), 18 },
                { startTime.Add(TimeSpan.FromSeconds(15)), 15 },
                { startTime.Add(TimeSpan.FromSeconds(16)), 15 },
                { startTime.Add(TimeSpan.FromSeconds(17)), 15 },
                { startTime.Add(TimeSpan.FromSeconds(18)), 7 },
                { startTime.Add(TimeSpan.FromSeconds(19)), 2 },
            };
            var chart  = new AsciiChart(width, height);
            var result = chart.GraphXY(data);

            Assert.NotNull(result);
            Assert.AreEqual(width, result.IndexOf('\n') - 1);
            Assert.AreEqual(height, result.Count(c => c == '\n') - 1);
        }
Example #3
0
        static void Main(string[] args)
        {
            var series = new double[100];

            for (var i = 0; i < series.Length; i++)
            {
                series[i] = 15 * Math.Sin(i * ((Math.PI * 4) / series.Length));
            }

            Console.OutputEncoding = Encoding.UTF8;
            Console.WriteLine(AsciiChart.Plot(series));

            Console.WriteLine();

            Console.WriteLine(AsciiChart.Plot(series, new Options
            {
                AxisLabelLeftMargin  = 3,
                AxisLabelRightMargin = 0,
                Height          = 4,
                Fill            = 'ยท',
                AxisLabelFormat = "0,000.000",
            }));


            var series2 = new double[100];

            for (var i = 0; i < series.Length; i++)
            {
                series2[i] = (200000 * Math.Cos(i * ((Math.PI * 8) / series.Length))) + 1000000;
            }

            Console.WriteLine();
            Console.WriteLine(AsciiChart.Plot(series2, new Options {
                Height = 10
            }));
        }
Example #4
0
        public override ColorTextBuilder Write(object parameters = null)
        {
            var builder         = new ColorTextBuilder();
            var chartWidth      = 30;
            var chartHeight     = 10;
            var chartSpacing    = 3;
            var testConcurrency = new ColorTextBuilder();
            var testData        = _runContext.Runs.SelectMany(x => x.Key.PerformanceLog.GetAll(PerformanceLog.PerformanceType.TestConcurrency));

            if (testData.Sum(x => x.Value) > 0)
            {
                WriteRoundBox(testConcurrency, $"Test Concurrency", 8);
                var testConcurrencyChart = new AsciiChart(chartWidth, chartHeight);
                var testChartData        = testData.ToDictionary(key => key.TimeSlot, value => value.Value);
                testConcurrency.Append(testConcurrencyChart.GraphXY(testChartData, _colorScheme.DarkSuccess, _colorScheme.DarkDefault));
                testConcurrency.AppendLine();
            }

            var testFixtureConcurrency = new ColorTextBuilder();
            var testFixtureData        = _runContext.Runs.SelectMany(x => x.Key.PerformanceLog.GetAll(PerformanceLog.PerformanceType.TestFixtureConcurrency));

            if (testFixtureData.Sum(x => x.Value) > 0)
            {
                WriteRoundBox(testFixtureConcurrency, "Test Fixture Concurrency");
                var testFixtureConcurrencyChart = new AsciiChart(chartWidth, chartHeight);
                var testFixtureChartData        = testFixtureData.ToDictionary(key => key.TimeSlot, value => value.Value);
                testFixtureConcurrency.Append(testFixtureConcurrencyChart.GraphXY(testFixtureChartData, _colorScheme.DarkHighlight, _colorScheme.DarkDefault));
                testFixtureConcurrency.AppendLine();
            }

            var assemblyConcurrency = new ColorTextBuilder();
            var assemblyData        = _runContext.Runs.SelectMany(x => x.Key.PerformanceLog.GetAll(PerformanceLog.PerformanceType.AssemblyConcurrency));

            if (assemblyData.Sum(x => x.Value) > 0)
            {
                WriteRoundBox(assemblyConcurrency, "Assembly Concurrency", 4);
                var assemblyConcurrencyChart = new AsciiChart(chartWidth, chartHeight);
                var assemblyChartData        = assemblyData.ToDictionary(key => key.TimeSlot, value => value.Value);
                assemblyConcurrency.Append(assemblyConcurrencyChart.GraphXY(assemblyChartData, _colorScheme.DarkError, _colorScheme.DarkDefault));
                assemblyConcurrency.AppendLine();
            }

            var cpuUsage     = new ColorTextBuilder();
            var cpuUsageData = _runContext.Runs.SelectMany(x => x.Key.PerformanceLog.GetAll(PerformanceLog.PerformanceType.CpuUsed));

            if (cpuUsageData.Sum(x => x.Value) > 0)
            {
                WriteRoundBox(cpuUsage, "CPU Usage");
                var cpuUsageChart     = new AsciiChart(chartWidth, chartHeight);
                var cpuUsageChartData = cpuUsageData.ToDictionary(key => key.TimeSlot, value => value.Value);
                cpuUsage.Append(cpuUsageChart.GraphXY(cpuUsageChartData, _colorScheme.Default, _colorScheme.DarkDefault));
                cpuUsage.AppendLine();
            }

            // stack the graphs horizontally, until they won't fit on the console
            var chartRows = new List <ColorTextBuilder>();
            var isNewRow  = false;
            var charts    = testConcurrency;

            chartRows.Add(charts);
            chartRows[chartRows.Count - 1] = StackGraph(chartRows.Last(), testFixtureConcurrency, chartSpacing, out isNewRow);
            if (isNewRow)
            {
                chartRows.Add(ColorTextBuilder.Create.Append(testFixtureConcurrency));
            }
            chartRows[chartRows.Count - 1] = StackGraph(chartRows.Last(), assemblyConcurrency, chartSpacing, out isNewRow);
            if (isNewRow)
            {
                chartRows.Add(ColorTextBuilder.Create.Append(assemblyConcurrency));
            }
            chartRows[chartRows.Count - 1] = StackGraph(chartRows.Last(), cpuUsage, chartSpacing, out isNewRow);
            if (isNewRow)
            {
                chartRows.Add(ColorTextBuilder.Create.Append(cpuUsage));
            }

            foreach (var chartRow in chartRows)
            {
                builder.AppendLine(chartRow);
            }
            return(builder);
        }