@@ -464,5 +464,203 @@ public void Axis_DesiredSize()
464464 Assert . That ( yaxis . DesiredSize . Width , Is . EqualTo ( 50.0 ) . Within ( 0.5 ) , "y-axis width" ) ;
465465 Assert . That ( yaxis . DesiredSize . Height , Is . EqualTo ( 0.0 ) . Within ( 1e-6 ) , "y-axis height" ) ;
466466 }
467+
468+ /// <summary>
469+ /// Tests the alignment of the series, if minimum range is set
470+ /// </summary>
471+ [ Test ]
472+ public void Axis_VerticalAlignment_MinimumRange ( )
473+ {
474+ var plot = new PlotModel ( ) ;
475+ var yaxis = new LinearAxis ( )
476+ {
477+ Position = AxisPosition . Left ,
478+ MinimumRange = 1 ,
479+ } ;
480+
481+ plot . Axes . Add ( yaxis ) ;
482+
483+ var series = new LineSeries ( ) ;
484+ series . Points . Add ( new DataPoint ( 0 , 10.1 ) ) ;
485+ series . Points . Add ( new DataPoint ( 1 , 10.15 ) ) ;
486+ series . Points . Add ( new DataPoint ( 2 , 10.3 ) ) ;
487+ series . Points . Add ( new DataPoint ( 3 , 10.25 ) ) ;
488+
489+ plot . Series . Add ( series ) ;
490+
491+ ( ( IPlotModel ) plot ) . Update ( true ) ;
492+
493+ double dataMin = 10.1 ;
494+ double dataMax = 10.3 ;
495+ double dataCenter = ( dataMax + dataMin ) / 2 ;
496+
497+ // Center should be the between data min and max
498+ Assert . AreEqual ( dataCenter , ( plot . Axes [ 0 ] . ActualMaximum + plot . Axes [ 0 ] . ActualMinimum ) / 2 , 1e-5 , "center" ) ;
499+ Assert . AreEqual ( dataCenter - 0.5 , plot . Axes [ 0 ] . ActualMinimum , 1e-5 , "minimum" ) ;
500+ Assert . AreEqual ( dataCenter + 0.5 , plot . Axes [ 0 ] . ActualMaximum , 1e-5 , "maximum" ) ;
501+ }
502+
503+ /// <summary>
504+ /// Tests the alignment of the series, if MinimumRange and the AbsoluteMaximum are set
505+ /// </summary>
506+ [ Test ]
507+ public void Axis_VerticalAlignment_MinimumRange_AbsoluteMaximum ( )
508+ {
509+ var plot = new PlotModel ( ) ;
510+ var yaxis = new LinearAxis ( )
511+ {
512+ Position = AxisPosition . Left ,
513+ MinimumRange = 1 ,
514+ AbsoluteMaximum = 10.5 ,
515+ } ;
516+
517+ plot . Axes . Add ( yaxis ) ;
518+
519+ var series = new LineSeries ( ) ;
520+ series . Points . Add ( new DataPoint ( 0 , 10.1 ) ) ;
521+ series . Points . Add ( new DataPoint ( 1 , 10.15 ) ) ;
522+ series . Points . Add ( new DataPoint ( 2 , 10.3 ) ) ;
523+ series . Points . Add ( new DataPoint ( 3 , 10.25 ) ) ;
524+
525+ plot . Series . Add ( series ) ;
526+
527+ ( ( IPlotModel ) plot ) . Update ( true ) ;
528+
529+ // Center should be the between AbsoluteMaximum and the (AboluteMaximum - MinimumRange)
530+ Assert . AreEqual ( yaxis . AbsoluteMaximum , plot . Axes [ 0 ] . ActualMaximum , 0 , "absolute maximum" ) ;
531+ Assert . AreEqual ( yaxis . AbsoluteMaximum - ( yaxis . MinimumRange / 2 ) , ( plot . Axes [ 0 ] . ActualMaximum + plot . Axes [ 0 ] . ActualMinimum ) / 2 , 1e-5 , "center" ) ;
532+ Assert . AreEqual ( yaxis . AbsoluteMaximum - yaxis . MinimumRange , plot . Axes [ 0 ] . ActualMinimum , 1e-5 , "minimum" ) ;
533+ }
534+
535+ /// <summary>
536+ /// Tests the alignment of the series, if MinimumRange and the AbsoluteMaximum are set
537+ /// </summary>
538+ [ Test ]
539+ public void Axis_VerticalAlignment_MinimumRange_AbsoluteMinimum ( )
540+ {
541+ var plot = new PlotModel ( ) ;
542+ var yaxis = new LinearAxis ( )
543+ {
544+ Position = AxisPosition . Left ,
545+ MinimumRange = 1 ,
546+ AbsoluteMinimum = 10 ,
547+ } ;
548+
549+ plot . Axes . Add ( yaxis ) ;
550+
551+ var series = new LineSeries ( ) ;
552+ series . Points . Add ( new DataPoint ( 0 , 10.1 ) ) ;
553+ series . Points . Add ( new DataPoint ( 1 , 10.15 ) ) ;
554+ series . Points . Add ( new DataPoint ( 2 , 10.3 ) ) ;
555+ series . Points . Add ( new DataPoint ( 3 , 10.25 ) ) ;
556+
557+ plot . Series . Add ( series ) ;
558+
559+ ( ( IPlotModel ) plot ) . Update ( true ) ;
560+
561+ // Center should be the between AbsoluteMinimum and the (AboluteMinimum + MinimumRange)
562+ Assert . AreEqual ( yaxis . AbsoluteMinimum , plot . Axes [ 0 ] . ActualMinimum , 0 , "absolute minimum" ) ;
563+ Assert . AreEqual ( yaxis . AbsoluteMinimum + ( yaxis . MinimumRange / 2 ) , ( plot . Axes [ 0 ] . ActualMaximum + plot . Axes [ 0 ] . ActualMinimum ) / 2 , 1e-5 , "center" ) ;
564+ Assert . AreEqual ( yaxis . AbsoluteMinimum + yaxis . MinimumRange , plot . Axes [ 0 ] . ActualMaximum , 1e-5 , "maximum" ) ;
565+ }
566+
567+ /// <summary>
568+ /// Tests the alignment of the series, if maximum range is set.
569+ /// </summary>
570+ [ Test ]
571+ public void Axis_VerticalAlignment_MaximumRange ( )
572+ {
573+ var plot = new PlotModel ( ) ;
574+ var yaxis = new LinearAxis ( )
575+ {
576+ Position = AxisPosition . Left ,
577+ MaximumRange = 0.1 ,
578+ } ;
579+
580+ plot . Axes . Add ( yaxis ) ;
581+
582+ var series = new LineSeries ( ) ;
583+ series . Points . Add ( new DataPoint ( 0 , 10.1 ) ) ;
584+ series . Points . Add ( new DataPoint ( 1 , 10.15 ) ) ;
585+ series . Points . Add ( new DataPoint ( 2 , 10.3 ) ) ;
586+ series . Points . Add ( new DataPoint ( 3 , 10.25 ) ) ;
587+
588+ plot . Series . Add ( series ) ;
589+
590+ ( ( IPlotModel ) plot ) . Update ( true ) ;
591+
592+ double dataMin = 10.1 ;
593+ double dataMax = 10.3 ;
594+ double dataCenter = ( dataMax + dataMin ) / 2 ;
595+
596+ // Center should be the between data min and max
597+ Assert . AreEqual ( dataCenter , ( plot . Axes [ 0 ] . ActualMaximum + plot . Axes [ 0 ] . ActualMinimum ) / 2 , 1e-5 , "center" ) ;
598+ Assert . AreEqual ( dataCenter - 0.05 , plot . Axes [ 0 ] . ActualMinimum , 1e-5 , "minimum" ) ;
599+ Assert . AreEqual ( dataCenter + 0.05 , plot . Axes [ 0 ] . ActualMaximum , 1e-5 , "maximum" ) ;
600+ }
601+
602+ /// <summary>
603+ /// Tests the alignment of the series, if MaximumRange and the AbsoluteMaximum are set.
604+ /// </summary>
605+ [ Test ]
606+ public void Axis_VerticalAlignment_MaximumRange_AbsoluteMaximum ( )
607+ {
608+ var plot = new PlotModel ( ) ;
609+ var yaxis = new LinearAxis ( )
610+ {
611+ Position = AxisPosition . Left ,
612+ MaximumRange = 0.1 ,
613+ AbsoluteMaximum = 10.22 ,
614+ } ;
615+
616+ plot . Axes . Add ( yaxis ) ;
617+
618+ var series = new LineSeries ( ) ;
619+ series . Points . Add ( new DataPoint ( 0 , 10.1 ) ) ;
620+ series . Points . Add ( new DataPoint ( 1 , 10.15 ) ) ;
621+ series . Points . Add ( new DataPoint ( 2 , 10.3 ) ) ;
622+ series . Points . Add ( new DataPoint ( 3 , 10.25 ) ) ;
623+
624+ plot . Series . Add ( series ) ;
625+
626+ ( ( IPlotModel ) plot ) . Update ( true ) ;
627+
628+ // Range is between AbsoluteMaximum and the (AboluteMaximum - MaximumRange)
629+ Assert . AreEqual ( yaxis . AbsoluteMaximum , plot . Axes [ 0 ] . ActualMaximum , 0 , "absolute maximum" ) ;
630+ Assert . AreEqual ( yaxis . AbsoluteMaximum - ( yaxis . MaximumRange / 2 ) , ( plot . Axes [ 0 ] . ActualMaximum + plot . Axes [ 0 ] . ActualMinimum ) / 2 , 1e-6 , "center" ) ;
631+ Assert . AreEqual ( yaxis . AbsoluteMaximum - yaxis . MaximumRange , plot . Axes [ 0 ] . ActualMinimum , 1e-6 , "minimum" ) ;
632+ }
633+
634+ /// <summary>
635+ /// Tests the alignment of the series, if MaximumRange and the AbsoluteMinimum are set.
636+ /// </summary>
637+ [ Test ]
638+ public void Axis_VerticalAlignment_MaximumRange_AbsoluteMinimum ( )
639+ {
640+ var plot = new PlotModel ( ) ;
641+ var yaxis = new LinearAxis ( )
642+ {
643+ Position = AxisPosition . Left ,
644+ MaximumRange = 0.1 ,
645+ AbsoluteMinimum = 10.16 ,
646+ } ;
647+
648+ plot . Axes . Add ( yaxis ) ;
649+
650+ var series = new LineSeries ( ) ;
651+ series . Points . Add ( new DataPoint ( 0 , 10.1 ) ) ;
652+ series . Points . Add ( new DataPoint ( 1 , 10.15 ) ) ;
653+ series . Points . Add ( new DataPoint ( 2 , 10.3 ) ) ;
654+ series . Points . Add ( new DataPoint ( 3 , 10.25 ) ) ;
655+
656+ plot . Series . Add ( series ) ;
657+
658+ ( ( IPlotModel ) plot ) . Update ( true ) ;
659+
660+ // Range is between AbsoluteMinimum and the (AboluteMinimum + MaximumRange)
661+ Assert . AreEqual ( yaxis . AbsoluteMinimum , plot . Axes [ 0 ] . ActualMinimum , 0 , "absolute minimum" ) ;
662+ Assert . AreEqual ( yaxis . AbsoluteMinimum + ( yaxis . MaximumRange / 2 ) , ( plot . Axes [ 0 ] . ActualMaximum + plot . Axes [ 0 ] . ActualMinimum ) / 2 , 1e-6 , "center" ) ;
663+ Assert . AreEqual ( yaxis . AbsoluteMinimum + yaxis . MaximumRange , plot . Axes [ 0 ] . ActualMaximum , 1e-6 , "maximum" ) ;
664+ }
467665 }
468666}
0 commit comments