Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Visualization.Test/3.2/LineChartTests.cs @ 1972

Last change on this file since 1972 was 1972, checked in by shofstad, 15 years ago

DataRowSettings updated (#636)

File size: 20.0 KB
Line 
1using System;
2using System.Drawing;
3using System.Threading;
4using NUnit.Framework;
5
6namespace HeuristicLab.Visualization.Test {
7  [TestFixture]
8  public class LineChartTests {
9    private ChartDataRowsModel model;
10
11    [SetUp]
12    public void SetUp() {
13      model = new ChartDataRowsModel();
14    }
15
16    [Test]
17    public void TestLineChart() {
18      LineChartTestForm f = new LineChartTestForm(model);
19
20      IDataRow row1 = new DataRow();
21      IDataRow row2 = new DataRow();
22      IDataRow row3 = new DataRow();
23
24      row1.RowSettings.Color = Color.Red;
25      row2.RowSettings.Color = Color.Green;
26      row3.RowSettings.Color = Color.Blue;
27
28      row1.RowSettings.Thickness = 3;
29      row2.RowSettings.Thickness = 4;
30      row3.RowSettings.Thickness = 5;
31
32      row1.RowSettings.Label = "Simon";
33      row2.RowSettings.Label = "Gertschi";
34      row3.RowSettings.Label = "Maxi";
35
36      row1.RowSettings.Style = DrawingStyle.Solid;
37      row2.RowSettings.Style = DrawingStyle.Solid;
38      row3.RowSettings.Style = DrawingStyle.Dashed;
39
40
41      model.AddDataRow(row1);
42      model.AddDataRow(row2);
43      model.AddDataRow(row3);
44
45      row1.AddValue(10);
46      row1.AddValue(5);
47      row1.AddValue(7);
48      row1.AddValue(3);
49      row1.AddValue(10);
50      row1.AddValue(2);
51
52      row2.AddValue(5);
53      row2.AddValue(6);
54      row2.AddValue(5);
55
56      row3.AddValue(2);
57      row3.AddValue(2);
58      row3.AddValue(2);
59      row3.AddValue(2);
60      row3.AddValue(2);
61
62      Random rand = new Random();
63
64      for (int i = 0; i < 10000; i++) {
65        row1.AddValue(rand.NextDouble() * 10);
66        row2.AddValue(rand.NextDouble() * 10);
67        row3.AddValue(rand.NextDouble() * 10);
68      }
69
70      f.ShowDialog();
71    }
72
73    [Test]
74    public void TestAxes() {
75      LineChartTestForm f = new LineChartTestForm(model);
76
77      IDataRow row1 = new DataRow();
78      IDataRow row2 = new DataRow();
79      IDataRow row3 = new DataRow();
80
81      model.XAxis.Label = "X Axis";
82      model.XAxis.ShowLabel = true;
83      model.XAxis.ShowGrid = true;
84      model.XAxis.GridColor = Color.Blue;
85
86      YAxisDescriptor yaxis1 = model.DefaultYAxis;
87      YAxisDescriptor yaxis2 = new YAxisDescriptor();
88
89      yaxis1.Label = "Y-Axis 1";
90      yaxis1.ShowYAxisLabel = true;
91      yaxis1.Position = AxisPosition.Left;
92      yaxis1.ShowGrid = true;
93      yaxis1.GridColor = Color.Gray;
94
95      yaxis2.Label = "Y-Axis 2";
96      yaxis2.ShowYAxisLabel = true;
97      yaxis2.Position = AxisPosition.Right;
98      yaxis2.ShowGrid = false;
99
100      row1.RowSettings.Color = Color.Red;
101      row1.RowSettings.Thickness = 3;
102      row1.RowSettings.Style = DrawingStyle.Solid;
103      row1.RowSettings.Label = "Die Rote";
104
105      row2.RowSettings.Color = Color.Green;
106      row2.RowSettings.Thickness = 3;
107      row2.RowSettings.Style = DrawingStyle.Solid;
108      row2.RowSettings.Label = "Die Grüne";
109
110      row3.RowSettings.Color = Color.Blue;
111      row3.RowSettings.Thickness = 3;
112      row3.RowSettings.Style = DrawingStyle.Solid;
113      row3.RowSettings.Label = "Die Blaue";
114      row3.YAxis = yaxis2;
115
116      model.AddDataRow(row1);
117      model.AddDataRow(row2);
118      model.AddDataRow(row3);
119
120      Random rand = new Random(42);
121
122      for (int i = 0; i < 10; i++) {
123        row1.AddValue(rand.NextDouble() * 10);
124        row2.AddValue(rand.NextDouble() * 10);
125        row3.AddValue(rand.NextDouble() * 1);
126      }
127
128      f.AddValue += delegate {
129        row1.AddValue(rand.NextDouble() * 10);
130        row2.AddValue(rand.NextDouble() * 10);
131        row3.AddValue(rand.NextDouble() * 1);
132      };
133
134      f.ShowDialog();
135    }
136
137    [Test]
138    public void SimpleTestAggregator() {
139      LineChartTestForm f = new LineChartTestForm(model);
140
141      IDataRow row1 = new DataRow();
142      row1.RowSettings.Label = "row";
143      row1.RowSettings.Color = Color.Red;
144      row1.RowSettings.Thickness = 3;
145      row1.RowSettings.Style = DrawingStyle.Solid;
146
147      model.AddDataRow(row1);
148
149
150      MaxAggregator aggregator = new MaxAggregator();
151      aggregator.RowSettings.Label = "MinAggregator";
152      aggregator.RowSettings.Color = Color.Pink;
153      aggregator.RowSettings.Thickness = 5;
154      aggregator.RowSettings.Style = DrawingStyle.Solid;
155      aggregator.RowSettings.LineType = DataRowType.SingleValue;
156      aggregator.AddWatch(row1);
157
158      model.AddDataRow(aggregator);
159
160      row1.AddValue(10);
161      row1.AddValue(5);
162      row1.AddValue(7);
163      row1.AddValue(3);
164      row1.AddValue(10);
165      row1.AddValue(2);
166
167      f.ShowDialog();
168    }
169
170
171    public class Worker {
172      // This method will be called when the thread is started.
173      private readonly ChartDataRowsModel model;
174
175      public Worker(ChartDataRowsModel model) {
176        this.model = model;
177      }
178
179      public void DoWorkMultiLine() {
180        IDataRow row1 = new DataRow();
181        row1.RowSettings.Color = Color.Red;
182        row1.RowSettings.Thickness = 2;
183        row1.RowSettings.Label = "Sinus";
184        row1.RowSettings.Style = DrawingStyle.Solid;
185        row1.RowSettings.ShowMarkers = false;
186        model.AddDataRow(row1);
187
188        IDataRow row2 = new DataRow();
189        row2.RowSettings.Color = Color.Red;
190        row2.RowSettings.Thickness = 3;
191        row2.RowSettings.Label = "Growing";
192        row2.RowSettings.Style = DrawingStyle.Solid;
193        row2.RowSettings.ShowMarkers = false;
194        model.AddDataRow(row2);
195
196        AvgAggregator multiAvgAggregator = new AvgAggregator();
197        multiAvgAggregator.RowSettings.Label = "MultiAvgAggregator";
198        multiAvgAggregator.RowSettings.Color = Color.DarkOliveGreen;
199        multiAvgAggregator.RowSettings.Thickness = 3;
200        multiAvgAggregator.RowSettings.Style = DrawingStyle.Solid;
201        multiAvgAggregator.RowSettings.LineType = DataRowType.SingleValue;
202        multiAvgAggregator.RowSettings.ShowMarkers = false;
203        multiAvgAggregator.AddWatch(row1);
204        multiAvgAggregator.AddWatch(row2);
205        model.AddDataRow(multiAvgAggregator);
206
207        MaxAggregator multiMaxAggregator = new MaxAggregator();
208        multiMaxAggregator.RowSettings.Label = "MultiMaxAggregator";
209        multiMaxAggregator.RowSettings.Color = Color.DarkKhaki;
210        multiMaxAggregator.RowSettings.Thickness = 3;
211        multiMaxAggregator.RowSettings.Style = DrawingStyle.Solid;
212        multiMaxAggregator.RowSettings.LineType = DataRowType.SingleValue;
213        multiMaxAggregator.RowSettings.ShowMarkers = false;
214        multiMaxAggregator.AddWatch(row1);
215        multiMaxAggregator.AddWatch(row2);
216        model.AddDataRow(multiMaxAggregator);
217
218        MinAggregator multiMinAggregator = new MinAggregator();
219        multiMinAggregator.RowSettings.Label = "MultiMinAggregator";
220        multiMinAggregator.RowSettings.Color = Color.DarkRed;
221        multiMinAggregator.RowSettings.Thickness = 3;
222        multiMinAggregator.RowSettings.Style = DrawingStyle.Solid;
223        multiMinAggregator.RowSettings.LineType = DataRowType.SingleValue;
224        multiMinAggregator.RowSettings.ShowMarkers = false;
225        multiMinAggregator.AddWatch(row1);
226        multiMinAggregator.AddWatch(row2);
227        model.AddDataRow(multiMinAggregator);
228
229        //        AvgLineAggregator multiLineAvgAggregator = new AvgLineAggregator {
230        //                                                                           Label = "MultiLineAvgAggregator",
231        //                                                                           Color = Color.Red,
232        //                                                                           Thickness = 4,
233        //                                                                           Style = DrawingStyle.Solid,
234        //                                                                           LineType = DataRowType.Normal,
235        //                                                                           ShowMarkers = false
236        //                                                                         };
237        //        multiLineAvgAggregator.AddWatch(row1);
238        //        multiLineAvgAggregator.AddWatch(row2);
239        //        multiLineAvgAggregator.AddValue(0);
240        //        model.AddDataRow(multiLineAvgAggregator);
241
242        double i = 0;
243
244
245        while (!_shouldStop && i <= 24) {
246          i += 0.2;
247          double newY = Math.Sin(i);
248          Console.WriteLine("working");
249          //row1.AddValue(rand.NextDouble() * 10);
250          row1.AddValue(newY * 10);
251          row2.AddValue(i * 2 - 15);
252          Thread.Sleep(100);
253        }
254        Console.WriteLine("worker thread: terminating gracefully.");
255      }
256
257      public void DoWorkSingleLine() {
258        IDataRow row1 = new DataRow();
259        row1.RowSettings.Color = Color.Red;
260        row1.RowSettings.Thickness = 2;
261        row1.RowSettings.Label = "Sinus";
262        row1.RowSettings.Style = DrawingStyle.Solid;
263        row1.RowSettings.ShowMarkers = false;
264        model.AddDataRow(row1);
265
266        IDataRow row2 = new DataRow();
267        row2.RowSettings.Color = Color.Red;
268        row2.RowSettings.Thickness = 3;
269        row2.RowSettings.Label = "Growing";
270        row2.RowSettings.Style = DrawingStyle.Solid;
271        row2.RowSettings.ShowMarkers = false;
272        model.AddDataRow(row2);
273
274        MinAggregator aggregator = new MinAggregator();
275        aggregator.RowSettings.Label = "MinAggregator";
276        aggregator.RowSettings.Color = Color.Pink;
277        aggregator.RowSettings.Thickness = 3;
278        aggregator.RowSettings.Style = DrawingStyle.Solid;
279        aggregator.RowSettings.LineType = DataRowType.SingleValue;
280        aggregator.AddWatch(row1);
281        model.AddDataRow(aggregator);
282
283        MaxAggregator maxAggregator = new MaxAggregator();
284        maxAggregator.RowSettings.Label = "MaxAggregator";
285        maxAggregator.RowSettings.Color = Color.DeepSkyBlue;
286        maxAggregator.RowSettings.Thickness = 3;
287        maxAggregator.RowSettings.Style = DrawingStyle.Solid;
288        maxAggregator.RowSettings.LineType = DataRowType.SingleValue;
289        maxAggregator.AddWatch(row1);
290        model.AddDataRow(maxAggregator);
291
292        AvgAggregator avgAggregator = new AvgAggregator();
293        avgAggregator.RowSettings.Label = "AvgAggregator";
294        avgAggregator.RowSettings.Color = Color.Violet;
295        avgAggregator.RowSettings.Thickness = 3;
296        avgAggregator.RowSettings.Style = DrawingStyle.Solid;
297        avgAggregator.RowSettings.LineType = DataRowType.SingleValue;
298        avgAggregator.AddWatch(row1);
299        model.AddDataRow(avgAggregator);
300
301        double i = 0;
302
303
304        while (!_shouldStop && i <= 240) {
305          i += 0.2;
306          double newY = Math.Sin(i);
307          Console.WriteLine("working");
308          //row1.AddValue(rand.NextDouble() * 10);
309          row1.AddValue(newY * 10);
310          row2.AddValue(i * 2 - 15);
311          //System.Threading.Thread.Sleep(100);
312        }
313        Console.WriteLine("worker thread: terminating gracefully.");
314      }
315
316      public void DoWorkAvgLine() {
317        IDataRow row1 = new DataRow();
318        row1.RowSettings.Color = Color.Red;
319        row1.RowSettings.Thickness = 2;
320        row1.RowSettings.Label = "Sinus";
321        row1.RowSettings.Style = DrawingStyle.Solid;
322        row1.RowSettings.ShowMarkers = false;
323        model.AddDataRow(row1);
324
325        IDataRow row2 = new DataRow();
326        row2.RowSettings.Color = Color.Red;
327        row2.RowSettings.Thickness = 3;
328        row2.RowSettings.Label = "Growing";
329        row2.RowSettings.Style = DrawingStyle.Solid;
330        row2.RowSettings.ShowMarkers = false;
331        model.AddDataRow(row2);
332
333        AvgLineAggregator avgLineAggregator = new AvgLineAggregator();
334        avgLineAggregator.RowSettings.Label = "AvgLineAggregator";
335        avgLineAggregator.RowSettings.Color = Color.Violet;
336        avgLineAggregator.RowSettings.Thickness = 3;
337        avgLineAggregator.RowSettings.Style = DrawingStyle.Solid;
338        avgLineAggregator.RowSettings.LineType = DataRowType.Normal;
339        avgLineAggregator.RowSettings.ShowMarkers = false;
340        avgLineAggregator.AddWatch(row1);
341        avgLineAggregator.AddWatch(row2);
342        model.AddDataRow(avgLineAggregator);
343
344        double i = 0;
345
346        while (!_shouldStop && i <= 240) {
347          i += 0.2;
348          double newY = Math.Sin(i);
349          Console.WriteLine("working");
350          //row1.AddValue(rand.NextDouble() * 10);
351          row1.AddValue(newY * 10);
352          row2.AddValue(i * 2 - 15);
353          //Thread.Sleep(100);
354        }
355        Console.WriteLine("worker thread: terminating gracefully.");
356      }
357
358      public void DoWorkFloatingAvg() {
359        IDataRow row1 = new DataRow();
360        row1.RowSettings.Color = Color.Red;
361        row1.RowSettings.Thickness = 2;
362        row1.RowSettings.Label = "SinusHacked";
363        row1.RowSettings.Style = DrawingStyle.Solid;
364        row1.RowSettings.ShowMarkers = false;
365        model.AddDataRow(row1);
366
367        IDataRow row2 = new DataRow();
368        row2.RowSettings.Color = Color.Red;
369        row2.RowSettings.Thickness = 3;
370        row2.RowSettings.Label = "GrowingHacked";
371        row2.RowSettings.Style = DrawingStyle.Solid;
372        row2.RowSettings.ShowMarkers = false;
373        model.AddDataRow(row2);
374
375        FloatingAvgAggregator avgAggregator = new FloatingAvgAggregator();
376        avgAggregator.RowSettings.Thickness = 2;
377        avgAggregator.RowSettings.Label = "floatingAvg";
378        avgAggregator.RowSettings.Color = Color.Peru;
379        avgAggregator.RowSettings.ShowMarkers = false;
380        avgAggregator.RowSettings.Style = DrawingStyle.Solid;
381
382        avgAggregator.AddWatch(row1);
383        model.AddDataRow(avgAggregator);
384
385        FloatingAvgAggregator avgAggregator2 = new FloatingAvgAggregator();
386        avgAggregator2.RowSettings.Thickness = 2;
387        avgAggregator2.RowSettings.Label = "floatingAvg";
388        avgAggregator2.RowSettings.Color = Color.Aqua;
389        avgAggregator2.RowSettings.ShowMarkers = false;
390        avgAggregator2.RowSettings.Style = DrawingStyle.Solid;
391
392        avgAggregator2.AddWatch(row2);
393        model.AddDataRow(avgAggregator2);
394
395       
396        double i = 0;
397        Random rnd = new Random();
398
399        while (!_shouldStop && i <= 100) {
400          i += 0.2;
401          double newY = Math.Sin(i);
402
403          double hack = rnd.NextDouble() * i / 10;
404          row1.AddValue(newY * 10 + hack);
405
406          hack = rnd.NextDouble() * i / 10;
407          row2.AddValue(i * 2 - 15 + hack);
408          //Thread.Sleep(100);
409        }
410        Console.WriteLine("worker thread: terminating gracefully.");
411      }
412
413      public void RequestStop() {
414        _shouldStop = true;
415      }
416
417      // Volatile is used as hint to the compiler that this data
418      // member will be accessed by multiple threads.
419      private volatile bool _shouldStop;
420    }
421
422
423    [Test]
424    public void TestAggregatorMultiLine() {
425      LineChartTestForm f = new LineChartTestForm(model);
426
427      // Create the thread object. This does not start the thread.
428      Worker workerObject = new Worker(model);
429      Thread workerThread = new Thread(workerObject.DoWorkMultiLine);
430
431      // Start the worker thread.
432      workerThread.Start();
433
434      f.ShowDialog();
435      workerObject.RequestStop();
436    }
437
438    [Test]
439    public void TestAggregatorSingleLine() {
440      LineChartTestForm f = new LineChartTestForm(model);
441      model.Title = "SingleLineAggregator Tests";
442
443      // Create the thread object. This does not start the thread.
444      Worker workerObject = new Worker(model);
445      Thread workerThread = new Thread(workerObject.DoWorkSingleLine);
446
447      // Start the worker thread.
448      workerThread.Start();
449
450      f.ShowDialog();
451      workerObject.RequestStop();
452    }
453
454    [Test]
455    public void TestAggregatorAvgLine() {
456      LineChartTestForm f = new LineChartTestForm(model);
457      model.Title = "AvgLineTest";
458
459      // Create the thread object. This does not start the thread.
460      Worker workerObject = new Worker(model);
461      Thread workerThread = new Thread(workerObject.DoWorkAvgLine);
462
463      // Start the worker thread.
464      workerThread.Start();
465
466      f.ShowDialog();
467      workerObject.RequestStop();
468    }
469
470    [Test]
471    public void TestFloatingAvg() {
472      LineChartTestForm f = new LineChartTestForm(model);
473      model.Title = "FloatingAvg Test";
474      model.ViewSettings.LegendPosition = Legend.LegendPosition.Top;
475
476      // Create the thread object. This does not start the thread.
477      Worker workerObject = new Worker(model);
478      Thread workerThread = new Thread(workerObject.DoWorkFloatingAvg);
479
480      // Start the worker thread.
481      workerThread.Start();
482
483      f.ShowDialog();
484      workerObject.RequestStop();
485    }
486
487
488    [Test]
489    public void TestAutoZoomInConstructor() {
490      IDataRow row1 = new DataRow();
491      row1.RowSettings.Color = Color.Red;
492      row1.RowSettings.Thickness = 3;
493      row1.RowSettings.Style = DrawingStyle.Solid;
494
495      model.AddDataRow(row1);
496
497      row1.AddValue(10);
498      row1.AddValue(5);
499      row1.AddValue(7);
500      row1.AddValue(3);
501      row1.AddValue(10);
502      row1.AddValue(2);
503
504      LineChartTestForm f = new LineChartTestForm(model);
505      f.ShowDialog();
506    }
507
508
509    [Test]
510    public void TestSingleValueDataRows() {
511      LineChartTestForm f = new LineChartTestForm(model);
512
513      IDataRow row1 = new DataRow();
514      IDataRow row2 = new DataRow();
515      IDataRow row3 = new DataRow();
516
517      IDataRow row4 = new DataRow();
518      IDataRow row5 = new DataRow();
519      IDataRow row6 = new DataRow();
520
521      row1.RowSettings.Color = Color.Red;
522      row2.RowSettings.Color = Color.Green;
523      row3.RowSettings.Color = Color.Blue;
524
525      row4.RowSettings.Color = Color.DeepPink;
526      row5.RowSettings.Color = Color.Firebrick;
527      row6.RowSettings.Color = Color.DarkSlateGray;
528
529      row1.RowSettings.Thickness = 3;
530      row2.RowSettings.Thickness = 4;
531      row3.RowSettings.Thickness = 5;
532
533      row4.RowSettings.Thickness = 3;
534      row5.RowSettings.Thickness = 4;
535      row6.RowSettings.Thickness = 5;
536
537      row1.RowSettings.Label = "SingleValue";
538      row2.RowSettings.Label = "Gertschi";
539      row3.RowSettings.Label = "Maxi";
540
541      row4.RowSettings.Label = "Simon";
542      row5.RowSettings.Label = "klausmuellerwesternhagenunddierasperies";
543      row6.RowSettings.Label = "anyways";
544
545      row1.RowSettings.Style = DrawingStyle.Solid;
546      row2.RowSettings.Style = DrawingStyle.Solid;
547      row3.RowSettings.Style = DrawingStyle.Dashed;
548
549      row4.RowSettings.Style = DrawingStyle.Solid;
550      row5.RowSettings.Style = DrawingStyle.Solid;
551      row6.RowSettings.Style = DrawingStyle.Dashed;
552
553      row1.RowSettings.LineType = DataRowType.SingleValue;
554      row2.RowSettings.LineType = DataRowType.SingleValue;
555      row1.AddValue(12);
556
557      row2.AddValue(5);
558
559
560      row3.AddValue(2);
561      row3.AddValue(5);
562      row3.AddValue(9);
563      row3.AddValue(1);
564      row3.AddValue(3);
565
566
567      row4.AddValue(10);
568      row5.AddValue(11);
569      row6.AddValue(11);
570
571      model.AddDataRow(row1);
572      model.AddDataRow(row2);
573      model.AddDataRow(row3);
574      model.AddDataRow(row4);
575      model.AddDataRow(row5);
576      model.AddDataRow(row6);
577
578      f.ShowDialog();
579    }
580
581    [Test]
582    public void TestMainForm() {
583      MainForm f = new MainForm();
584      f.ShowDialog();
585    }
586
587
588    [Test]
589    public void TestPointLines() {
590      IDataRow row1 = new DataRow();
591      row1.RowSettings.Color = Color.Red;
592      row1.RowSettings.Thickness = 3;
593      row1.RowSettings.Style = DrawingStyle.Dashed;
594
595      row1.RowSettings.LineType = DataRowType.Points;
596      model.AddDataRow(row1);
597
598      row1.AddValue(10);
599      row1.AddValue(5);
600      row1.AddValue(7);
601      row1.AddValue(3);
602      row1.AddValue(10);
603      row1.AddValue(2);
604
605      LineChartTestForm f = new LineChartTestForm(model);
606      f.ShowDialog();
607    }
608
609
610  }
611}
Note: See TracBrowser for help on using the repository browser.