@@ -69,6 +69,31 @@ public void AcceptsAnAutoRegressiveOrderAboveTheMovingAverageOrder(int arOrder,
6969 Assert . IsTrue ( arima . IsReady ) ;
7070 }
7171
72+ [ TestCase ( 1 , 0 , 1 , 3 ) ]
73+ [ TestCase ( 1 , 1 , 1 , 4 ) ]
74+ [ TestCase ( 2 , 1 , 2 , 6 ) ]
75+ [ TestCase ( 1 , 2 , 0 , 3 ) ]
76+ [ TestCase ( 1 , - 2 , 1 , 3 ) ]
77+ [ TestCase ( 1 , - 3 , 2 , 5 ) ]
78+ public void RejectsAPeriodTooShortForItsOrders ( int arOrder , int diffOrder , int maOrder , int shortest )
79+ {
80+ var exception = Assert . Throws < ArgumentException > ( ( ) =>
81+ new AutoRegressiveIntegratedMovingAverage ( arOrder , diffOrder , maOrder , shortest - 1 , true ) ) ;
82+ Assert . That ( exception . Message , Is . EqualTo (
83+ $ "Period parameter for ARIMA({ arOrder } , { diffOrder } , { maOrder } ) indicator " +
84+ $ "must be at least { shortest } but was { shortest - 1 } ") ) ;
85+
86+ var arima = new AutoRegressiveIntegratedMovingAverage ( arOrder , diffOrder , maOrder , shortest , true ) ;
87+ var reference = new DateTime ( 2020 , 1 , 1 ) ;
88+
89+ for ( var i = 0 ; i < shortest + 1 ; i ++ )
90+ {
91+ arima . Update ( reference . AddDays ( i ) , 100m + ( decimal ) Math . Sin ( i / 3d ) * 5m ) ;
92+ }
93+
94+ Assert . IsTrue ( arima . IsReady ) ;
95+ }
96+
7297 [ Test ]
7398 public void PredictionErrorAgainstExternalData ( )
7499 {
0 commit comments