fix 2 tests out of 3; TODO: test forecasters
[talweg.git] / pkg / tests / testthat / test.Forecaster.R
index 0986a3d..6387827 100644 (file)
@@ -1,35 +1,90 @@
 context("Check that forecasters behave as expected")
 
-test_that("Average+Zero method behave as expected",
+ts_data = system.file("testdata","ts_test.csv",package="talweg")
+exo_data = system.file("testdata","exo_test.csv",package="talweg")
+data00 <<- getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M",
+       working_tz="GMT", predict_at=0, limit=Inf)
+data13 <<- getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M",
+       working_tz="GMT", predict_at=13, limit=Inf)
+#Forecast at sunday to saturday, for monday to sunday
+indices <<- seq(as.Date("2007-04-01"),as.Date("2007-04-07"),"days")
+
+test_that("Average method behave as expected",
 {
-       ts_data = system.file("testdata","ts",package="talweg")
-       exo_data = system.file("testdata","exo",package="talweg")
+       pred00_z = getForecast(data00, indices, "Average", "Zero",        Inf, 24)
+       pred00_p = getForecast(data00, indices, "Average", "Persistence", Inf, 24)
+       for (i in seq_along(indices))
+       {
+               #zero jump: should predict true values minus 1
+               expect_identical(pred00_z$getSerie(i), rep(i,24))
+               #persistence jump == 1: should predict true values
+               expect_identical(pred00_p$getSerie(i), rep(i%%7+1,24))
+       }
+
+       #NOTE: days become
+       #1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 (14h-->0h then 1h-->13h)
+       #No jump between days, thus zero and persistence are equivalent (and wrong)
+       pred13_z = getForecast(data13, indices, "Average", "Zero",        Inf, 24)
+       pred13_p = getForecast(data13, indices, "Average", "Persistence", Inf, 24)
+       prediction = c(rep(-13/24,11),rep(11/24,13))
+       for (i in seq_along(indices))
+       {
+               expect_equal(pred13_z$getSerie(i), prediction )
+               expect_equal(pred13_p$getSerie(i), prediction )
+       }
 
-       data0 = getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M",
-               working_tz="GMT", predict_at=0, limit=Inf)
-       #TODO: with and without shift at origin (so series values at least forst ones are required)
+       #A few extra checks
+       expect_identical( pred00_sd$getIndexInData(1), dateIndexToInteger("2007-04-01",data00) )
+       expect_identical( pred13_dd$getIndexInData(3), dateIndexToInteger("2007-04-03",data13) )
+       expect_identical( pred00_dd$getIndexInData(5), dateIndexToInteger("2007-04-05",data00) )
+})
+
+test_that("Persistence method behave as expected",
+{
+       #Situation A: +Zero; always wrong
+       pred00_sd = getForecast(data00, indices, "Persistence", "Zero", Inf, 24, same_day=TRUE)
+       pred00_dd = getForecast(data00, indices, "Persistence", "Zero", Inf, 24, same_day=FALSE)
+       for (i in seq_along(indices))
+       {
+               expect_identical(pred00_sd$getSerie(i), rep(i,24))
+               expect_identical(pred00_dd$getSerie(i), rep(i,24))
+       }
 
-       indices = ...
-       pred0 = getForecast(.......)
+       pred13_sd = getForecast(data13, indices, "Persistence", "Zero", Inf, 24, same_day=TRUE)
+       pred13_dd = getForecast(data13, indices, "Persistence", "Zero", Inf, 24, same_day=FALSE)
+       for (i in seq_along(indices))
+       {
+               expect_identical(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) )
+               expect_identical(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) )
+       }
 
+       #Situation B: +Persistence, correct when predict_at==0
+       pred00_sd = getForecast(data00, indices, "Persistence", "Persistence", Inf, 24, same_day=TRUE)
+       pred00_dd = getForecast(data00, indices, "Persistence", "Persistence", Inf, 24, same_day=FALSE)
        for (i in seq_along(indices))
        {
-               expect_identical(....)
+               expect_identical(pred00_sd$getSerie(i), rep(i%%7+1,24))
+               expect_identical(pred00_dd$getSerie(i), rep(i%%7+1,24))
        }
 
-       data13 = getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M",
-               working_tz="GMT", predict_at=13, limit=Inf)
-       #Attention: jours deviennent 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 (14h-->0h puis 1h-->13h)
-}
+       pred13_sd = getForecast(data13, indices, "Persistence", "Persistence", Inf, 24, same_day=TRUE)
+       pred13_dd = getForecast(data13, indices, "Persistence", "Persistence", Inf, 24, same_day=FALSE)
+       for (i in seq_along(indices))
+       {
+               expect_identical(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) )
+               expect_identical(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) )
+       }
 
-test_that("Persistence+Zero method behave as expected",
-{
-}
+       #A few extra checks
+       expect_identical( pred13_sd$getIndexInData(1), dateIndexToInteger("2007-04-01",data12) )
+       expect_identical( pred00_dd$getIndexInData(3), dateIndexToInteger("2007-04-03",data00) )
+       expect_identical( pred13_dd$getIndexInData(5), dateIndexToInteger("2007-04-05",data13) )
+})
 
 test_that("Neighbors+Zero method behave as expected",
 {
-}
+})
 
 test_that("Neighbors+Neighbors method behave as expected",
 {
-}
+})