:- use_module(library(date_time)). term_expansion(Query -> Result, (Head :- Test)) :- format(atom(Head), '~w -> ~w', [Query, Result]), Test = ( call(Query), call(Result), ! ), tap:register_test(Head). :- use_module(library(tap)). % Real tests go here date_compare(date(2002,1,15), X, date(2002,2,24)) -> X = (<). date_compare(date(2002,1,15), =<, date(2002,2,24)) -> true. date_add(date(2002,1,15), [1 months, 2 days], D) -> D = date(2002, 2, 17). date_add(date(2002,1,15), [1 years, 1 months, 15 days], D) -> D = date(2003, 3, 2). date_add(date(2002,1,15), 1 months + 2 days, D) -> D = date(2002, 2, 17). date_add(date(2002,1,15), 1 months - 2 days, D) -> D = date(2002, 2, 13). date_add(date(2002,1,31), 1 months, X) -> X = date(2002, 2, 28). date_add(date(2002,2,28), 1 months, X) -> X = date(2002, 3, 31). date_difference(date(2002,3,2), date(2002,1,15), D) -> D = [0 years, 1 months, 15 days]. date_difference(date(2002,2,28), date(2002,1,31), X) -> X = [0 years, 1 months, 0 days]. date_string(D, F, "24 Feb 1946") -> D = date(1946, 2, 24), F = 'd mon y'. date_string(D, F, "February 24, 1946") -> D = date(1946, 2, 24), F = 'month d, y'. date_string(date(1946,2,24), 'month d, y', X) -> X = "February 24, 1946". date_string(D, 'd/m/y', "24/2/1946") -> D = date(1946, 2, 24). date_string(date(1946,2,24), F, X) -> F = 'y/m/d', X = "1946/2/24". time_string(time(2,33,15), X) -> X = "2:33:15". time_string(T, "2:33:22") -> T = time(2, 33, 22). time_string(time(2,33,15.5), X) -> X = "2:33:15". datetime_string(datetime(2022, 3, 3, 18, 55, 57), F, X) -> F = 'y/m/d', X = "2022/3/3 18:55:57". date_get(today, _). date_get(yesterday, _). date_get(tomorrow, _). date_get(last_week, _). date_get(next_week, _). date_get(last_month, _). date_get(next_month, _). date_get(last_year, _). date_get(next_year, _).