Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 1390 was 1390, checked in by bspisic, 15 years ago

Panning and zooming (#424) Implemented deactivating of YAxis clipping in OptionsDialog

File size: 14.6 KB
RevLine 
[983]1using System;
[869]2using System.Drawing;
[1326]3using System.Threading;
[861]4using NUnit.Framework;
5
6namespace HeuristicLab.Visualization.Test {
7  [TestFixture]
8  public class LineChartTests {
[1038]9    private ChartDataRowsModel model;
10
11    [SetUp]
12    public void SetUp() {
13      model = new ChartDataRowsModel();
14    }
15
[861]16    [Test]
17    public void TestLineChart() {
[1038]18      LineChartTestForm f = new LineChartTestForm(model);
[861]19
[869]20      IDataRow row1 = new DataRow();
21      IDataRow row2 = new DataRow();
22      IDataRow row3 = new DataRow();
[861]23
[869]24      row1.Color = Color.Red;
25      row2.Color = Color.Green;
26      row3.Color = Color.Blue;
[861]27
[869]28      row1.Thickness = 3;
29      row2.Thickness = 4;
30      row3.Thickness = 5;
31
[1049]32      row1.Label = "Simon";
33      row2.Label = "Gertschi";
34      row3.Label = "Maxi";
35
[980]36      row1.Style = DrawingStyle.Solid;
37      row2.Style = DrawingStyle.Solid;
38      row3.Style = DrawingStyle.Dashed;
39     
40
[1038]41      model.AddDataRow(row1);
42      model.AddDataRow(row2);
43      model.AddDataRow(row3);
[869]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
[983]62      Random rand = new Random();
63
[1038]64      for (int i = 0; i < 10000; i++) {
[983]65        row1.AddValue(rand.NextDouble()*10);
66        row2.AddValue(rand.NextDouble()*10);
67        row3.AddValue(rand.NextDouble()*10);
68      }
69
[861]70      f.ShowDialog();
71    }
[983]72
73    [Test]
74    public void TestAxes() {
[1038]75      LineChartTestForm f = new LineChartTestForm(model);
[983]76
77      IDataRow row1 = new DataRow();
[1285]78      IDataRow row2 = new DataRow();
[1350]79      IDataRow row3 = new DataRow();
[983]80
[1387]81      YAxisDescriptor yaxis1 = model.DefaultYAxis;
82      YAxisDescriptor yaxis2 = new YAxisDescriptor();
83
84      yaxis1.Label = "Y-Axis 1";
85      yaxis2.Label = "Y-Axis 2";
86
[983]87      row1.Color = Color.Red;
88      row1.Thickness = 3;
89      row1.Style = DrawingStyle.Solid;
[1343]90      row1.Label = "Die Rote";
[983]91
[1285]92      row2.Color = Color.Green;
93      row2.Thickness = 3;
94      row2.Style = DrawingStyle.Solid;
[1343]95      row2.Label = "Die Grüne";
[1285]96
[1350]97      row3.Color = Color.Blue;
98      row3.Thickness = 3;
99      row3.Style = DrawingStyle.Solid;
100      row3.Label = "Die Blaue";
[1387]101      row3.YAxis = yaxis2;
[1390]102      row3.YAxis.Label = "Die Blaue";
[1350]103
[1038]104      model.AddDataRow(row1);
[1285]105      model.AddDataRow(row2);
[1350]106      model.AddDataRow(row3);
[983]107
[1390]108      row1.YAxis.Label = "Rot und Grün";
109
[1285]110      Random rand = new Random(42);
[1350]111
[1285]112      for (int i = 0; i < 10; i++) {
113        row1.AddValue(rand.NextDouble()*10);
114        row2.AddValue(rand.NextDouble()*10);
[1350]115        row3.AddValue(rand.NextDouble()*1);
[1285]116      }
[983]117
[1350]118      f.AddValue += delegate {
119        row1.AddValue(rand.NextDouble()*10);
120        row2.AddValue(rand.NextDouble()*10);
121        row3.AddValue(rand.NextDouble()*1);
122      };
123
[983]124      f.ShowDialog();
125    }
[1040]126
127    [Test]
[1326]128    public void TestAggregator() {
129      LineChartTestForm f = new LineChartTestForm(model);
130
131      IDataRow row1 = new DataRow();
132      row1.Label = "row";
133      row1.Color = Color.Red;
134      row1.Thickness = 3;
135      row1.Style = DrawingStyle.Solid;
136
137      model.AddDataRow(row1);
138
139
[1350]140      MinAggregator aggregator = new MinAggregator();
[1326]141      aggregator.Label = "MinAggregator";
142      aggregator.Color = Color.Pink;
143      aggregator.Thickness = 5;
144      aggregator.Style = DrawingStyle.Solid;
145      aggregator.AddValue(2);
146      aggregator.LineType = DataRowType.SingleValue;
147
148      IDataRow lineTest = new DataRow("testline");
149      lineTest.Color = Color.DarkSalmon;
150      lineTest.Thickness = 2;
151      lineTest.Style = DrawingStyle.Dashed;
152      lineTest.LineType = DataRowType.SingleValue;
153      model.AddDataRow(lineTest);
154      lineTest.AddValue(9);
155      lineTest.AddValue(2);
156      lineTest.AddValue(3);
157      lineTest.AddValue(4);
158
159      aggregator.AddWatch(row1);
160
161      model.AddDataRow(aggregator);
162
163
164      row1.AddValue(10);
165      row1.AddValue(5);
166      row1.AddValue(7);
167      row1.AddValue(3);
168      row1.AddValue(10);
169      row1.AddValue(2);
170
171      f.ShowDialog();
172    }
173
174
175    public class Worker {
176      // This method will be called when the thread is started.
177      private ChartDataRowsModel model;
178      public Worker(ChartDataRowsModel model) {
179        this.model = model;
180      }
181     
[1386]182      public void DoWorkMultiLine() {
[1326]183
184        IDataRow row1 = new DataRow();
185        row1.Color = Color.Red;
186        row1.Thickness = 2;
[1386]187        row1.Label = "Sinus";
[1326]188        row1.Style = DrawingStyle.Solid;
189        model.AddDataRow(row1);
190
191        IDataRow row2 = new DataRow();
192        row2.Color = Color.Red;
193        row2.Thickness = 3;
[1386]194        row2.Label = "Growing";
[1326]195        row2.Style = DrawingStyle.Solid;
196        model.AddDataRow(row2);
197
[1350]198        AvgAggregator multiAvgAggregator = new AvgAggregator();
[1326]199        multiAvgAggregator.Label = "MultiAvgAggregator";
200        multiAvgAggregator.Color = Color.DarkOliveGreen;
201        multiAvgAggregator.Thickness = 3;
202        multiAvgAggregator.Style = DrawingStyle.Solid;
203        multiAvgAggregator.LineType = DataRowType.SingleValue;
204        multiAvgAggregator.AddWatch(row1);
205        multiAvgAggregator.AddWatch(row2);
206        model.AddDataRow(multiAvgAggregator);
207
[1350]208        MaxAggregator multiMaxAggregator = new MaxAggregator();
[1326]209        multiMaxAggregator.Label = "MultiMaxAggregator";
210        multiMaxAggregator.Color = Color.DarkKhaki;
211        multiMaxAggregator.Thickness = 3;
212        multiMaxAggregator.Style = DrawingStyle.Solid;
213        multiMaxAggregator.LineType = DataRowType.SingleValue;
214        multiMaxAggregator.AddWatch(row1);
215        multiMaxAggregator.AddWatch(row2);
216        model.AddDataRow(multiMaxAggregator);
217
[1350]218        MinAggregator multiMinAggregator = new MinAggregator();
[1326]219        multiMinAggregator.Label = "MultiMinAggregator";
220        multiMinAggregator.Color = Color.DarkRed;
221        multiMinAggregator.Thickness = 3;
222        multiMinAggregator.Style = DrawingStyle.Solid;
223        multiMinAggregator.LineType = DataRowType.SingleValue;
224        multiMinAggregator.AddWatch(row1);
225        multiMinAggregator.AddWatch(row2);
226        model.AddDataRow(multiMinAggregator);
227
[1350]228        AvgLineAggregator multiLineAvgAggregator = new AvgLineAggregator();
[1326]229        multiLineAvgAggregator.Label = "MultiLineAvgAggregator";
230        multiLineAvgAggregator.Color = Color.Red;
231        multiLineAvgAggregator.Thickness = 4;
232        multiLineAvgAggregator.Style = DrawingStyle.Solid;
233        multiLineAvgAggregator.LineType = DataRowType.Normal;
234        multiLineAvgAggregator.AddWatch(row1);
235        multiLineAvgAggregator.AddWatch(row2);
236        multiLineAvgAggregator.AddValue(0);
237        model.AddDataRow(multiLineAvgAggregator);
238
239        double i = 0;
240        double newY;
241
242        Random rand = new Random();
243        while (!_shouldStop && i <= 24) {
244          i += 0.2;
245          newY = Math.Sin(i);
246          System.Console.WriteLine("working");
247          //row1.AddValue(rand.NextDouble() * 10);
248          row1.AddValue(newY * 10);
249          row2.AddValue(i*2-15);
250          System.Threading.Thread.Sleep(100);
251        }
252        Console.WriteLine("worker thread: terminating gracefully.");
253      }
[1386]254      public void DoWorkSingleLine() {
255
256        IDataRow row1 = new DataRow();
257        row1.Color = Color.Red;
258        row1.Thickness = 2;
259        row1.Label = "Sinus";
260        row1.Style = DrawingStyle.Solid;
261        model.AddDataRow(row1);
262
263        IDataRow row2 = new DataRow();
264        row2.Color = Color.Red;
265        row2.Thickness = 3;
266        row2.Label = "Growing";
267        row2.Style = DrawingStyle.Solid;
268        model.AddDataRow(row2);
269
270        MinAggregator aggregator = new MinAggregator();
271        aggregator.Label = "MinAggregator";
272        aggregator.Color = Color.Pink;
273        aggregator.Thickness = 3;
274        aggregator.Style = DrawingStyle.Solid;
275        aggregator.LineType = DataRowType.SingleValue;
276        aggregator.AddWatch(row1);
277        model.AddDataRow(aggregator);
278
279        MaxAggregator maxAggregator = new MaxAggregator();
280        maxAggregator.Label = "MaxAggregator";
281        maxAggregator.Color = Color.DeepSkyBlue;
282        maxAggregator.Thickness = 3;
283        maxAggregator.Style = DrawingStyle.Solid;
284        maxAggregator.LineType = DataRowType.SingleValue;
285        maxAggregator.AddWatch(row1);
286        model.AddDataRow(maxAggregator);
287
288        AvgAggregator avgAggregator = new AvgAggregator();
289        avgAggregator.Label = "AvgAggregator";
290        avgAggregator.Color = Color.Violet;
291        avgAggregator.Thickness = 3;
292        avgAggregator.Style = DrawingStyle.Solid;
293        avgAggregator.LineType = DataRowType.SingleValue;
294        avgAggregator.AddWatch(row1);
295        model.AddDataRow(avgAggregator);
296
297        double i = 0;
298        double newY;
299
300        Random rand = new Random();
301        while (!_shouldStop && i <= 24) {
302          i += 0.2;
303          newY = Math.Sin(i);
304          System.Console.WriteLine("working");
305          //row1.AddValue(rand.NextDouble() * 10);
306          row1.AddValue(newY * 10);
307          row2.AddValue(i * 2 - 15);
308          System.Threading.Thread.Sleep(100);
309        }
310        Console.WriteLine("worker thread: terminating gracefully.");
311      }
312      public void DoWorkAvgLine() {
313
314        IDataRow row1 = new DataRow();
315        row1.Color = Color.Red;
316        row1.Thickness = 2;
317        row1.Label = "Sinus";
318        row1.Style = DrawingStyle.Solid;
319        model.AddDataRow(row1);
320
321        IDataRow row2 = new DataRow();
322        row2.Color = Color.Red;
323        row2.Thickness = 3;
324        row2.Label = "Growing";
325        row2.Style = DrawingStyle.Solid;
326        model.AddDataRow(row2);
327
328        AvgLineAggregator avgLineAggregator = new AvgLineAggregator();
329        avgLineAggregator.Label = "AvgLineAggregator";
330        avgLineAggregator.Color = Color.Violet;
331        avgLineAggregator.Thickness = 3;
332        avgLineAggregator.Style = DrawingStyle.Solid;
333        avgLineAggregator.LineType = DataRowType.Normal;
334        avgLineAggregator.AddWatch(row1);
335        avgLineAggregator.AddWatch(row2);
336        model.AddDataRow(avgLineAggregator);
337
338        double i = 0;
339        double newY;
340
341        Random rand = new Random();
342        while (!_shouldStop && i <= 24) {
343          i += 0.2;
344          newY = Math.Sin(i);
345          System.Console.WriteLine("working");
346          //row1.AddValue(rand.NextDouble() * 10);
347          row1.AddValue(newY * 10);
348          row2.AddValue(i * 2 - 15);
349          System.Threading.Thread.Sleep(100);
350        }
351        Console.WriteLine("worker thread: terminating gracefully.");
352      }
[1326]353      public void RequestStop() {
354        _shouldStop = true;
355      }
356      // Volatile is used as hint to the compiler that this data
357      // member will be accessed by multiple threads.
358      private volatile bool _shouldStop;
359    }
360
361
362    [Test]
[1386]363    public void TestAggregatorMultiLine() {
[1326]364      LineChartTestForm f = new LineChartTestForm(model);
[1386]365
366      // Create the thread object. This does not start the thread.
367      Worker workerObject = new Worker(model);
368      Thread workerThread = new Thread(workerObject.DoWorkMultiLine);
369
370      // Start the worker thread.
371      workerThread.Start();
372
373      f.ShowDialog();
374      workerObject.RequestStop();
375    }
376
377    [Test]
378    public void TestAggregatorSingleLine() {
379      LineChartTestForm f = new LineChartTestForm(model);
[1326]380   
381      // Create the thread object. This does not start the thread.
382      Worker workerObject = new Worker(model);
[1386]383      Thread workerThread = new Thread(workerObject.DoWorkSingleLine);
[1326]384
385      // Start the worker thread.
386      workerThread.Start();
387
388      f.ShowDialog();
389      workerObject.RequestStop();
390    }
[1386]391    [Test]
392    public void TestAggregatorAvgLine() {
393      LineChartTestForm f = new LineChartTestForm(model);
[1326]394
[1386]395      // Create the thread object. This does not start the thread.
396      Worker workerObject = new Worker(model);
397      Thread workerThread = new Thread(workerObject.DoWorkAvgLine);
398
399      // Start the worker thread.
400      workerThread.Start();
401
402      f.ShowDialog();
403      workerObject.RequestStop();
404    }
405
[1326]406   
407
408    [Test]
[1040]409    public void TestAutoZoomInConstructor() {
410      IDataRow row1 = new DataRow();
411
412      row1.Color = Color.Red;
413      row1.Thickness = 3;
414      row1.Style = DrawingStyle.Solid;
415
416      model.AddDataRow(row1);
417
418      row1.AddValue(10);
419      row1.AddValue(5);
420      row1.AddValue(7);
421      row1.AddValue(3);
422      row1.AddValue(10);
423      row1.AddValue(2);
424
425      LineChartTestForm f = new LineChartTestForm(model);
426      f.ShowDialog();
427    }
[1240]428
[1243]429
[1240]430    [Test]
[1243]431    public void TestSingleValueDataRows() {
432      LineChartTestForm f = new LineChartTestForm(model);
433
434      IDataRow row1 = new DataRow();
435      IDataRow row2 = new DataRow();
436      IDataRow row3 = new DataRow();
437
[1342]438      IDataRow row4 = new DataRow();
439      IDataRow row5 = new DataRow();
440      IDataRow row6 = new DataRow();
441
[1243]442      row1.Color = Color.Red;
443      row2.Color = Color.Green;
444      row3.Color = Color.Blue;
445
[1342]446      row4.Color = Color.DeepPink;
447      row5.Color = Color.Firebrick;
448      row6.Color = Color.DarkSlateGray;
449
[1243]450      row1.Thickness = 3;
451      row2.Thickness = 4;
452      row3.Thickness = 5;
453
[1342]454      row4.Thickness = 3;
455      row5.Thickness = 4;
456      row6.Thickness = 5;
457
[1243]458      row1.Label = "SingleValue";
459      row2.Label = "Gertschi";
460      row3.Label = "Maxi";
461
[1342]462      row4.Label = "Simon";
463      row5.Label = "klausmuellerwesternhagenunddierasperies";
464      row6.Label = "anyways";
465
[1243]466      row1.Style = DrawingStyle.Solid;
467      row2.Style = DrawingStyle.Solid;
468      row3.Style = DrawingStyle.Dashed;
469
[1342]470      row4.Style = DrawingStyle.Solid;
471      row5.Style = DrawingStyle.Solid;
472      row6.Style = DrawingStyle.Dashed;
473
[1243]474      row1.LineType = DataRowType.SingleValue;
475      row2.LineType = DataRowType.SingleValue;
476      row1.AddValue(12);
477
478      row2.AddValue(5);
479     
480
481      row3.AddValue(2);
482      row3.AddValue(5);
483      row3.AddValue(9);
484      row3.AddValue(1);
485      row3.AddValue(3);
486
487
[1342]488      row4.AddValue(10);
489      row5.AddValue(11);
490      row6.AddValue(11);
[1243]491
[1342]492      model.AddDataRow(row1);
493      model.AddDataRow(row2);
494      model.AddDataRow(row3);
495      model.AddDataRow(row4);
496      model.AddDataRow(row5);
497      model.AddDataRow(row6);
498
[1243]499      f.ShowDialog();
500    }
501
502
503
504    [Test]
[1240]505    public void TestMainForm() {
506      MainForm f = new MainForm();
507      f.ShowDialog();
508    }
[861]509  }
[1243]510}
Note: See TracBrowser for help on using the repository browser.