// now() is fixed to "2010-07-30T18:03:25+02:00" to provide a better testing experience
rule "date math"
when
    now() + years(1) > now() &&
    now() + months(1) > now() &&
    now() + weeks(1) > now() &&
    now() + days(1) > now() &&
    now() + hours(1) > now() &&
    now() + minutes(1) > now() &&
    now() + seconds(1) > now() &&
    now() + millis(1) > now() &&
    now() + period("P1YT1M") > now() &&

    now() - years(1) < now() &&
    now() - months(1) < now() &&
    now() - weeks(1) < now() &&
    now() - days(1) < now() &&
    now() - hours(1) < now() &&
    now() - minutes(1) < now() &&
    now() - seconds(1) < now() &&
    now() - millis(1) < now() &&
    now() - period("P1YT1M") < now() &&

    is_period(years(1)) == true &&
    is_period(months(1)) == true &&
    is_period(weeks(1)) == true &&
    is_period(days(1)) == true &&
    is_period(hours(1)) == true &&
    is_period(minutes(1)) == true &&
    is_period(seconds(1)) == true &&
    is_period(millis(1)) == true &&
    is_period(period("P1YT1M")) == true &&
    is_period("foobar") == false &&
    is_period(1234) == false &&
    is_period(12.34) == false &&
    is_period(true) == false
then
    set_field("interval", now() - (now() - days(1))); // is a duration of 1 day
    set_field("long_time_ago", now() - years(10000));
    set_fields({
      years: years(2),
      months: months(2),
      weeks: weeks(2),
      days: days(2),
      hours: hours(2),
      minutes: minutes(2),
      seconds: seconds(2),
      millis: millis(2),
      period: period("P1YT1M")
    });
    set_field("timestamp", to_date($message.timestamp) + hours(1));

    trigger_test();
end