This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
133
unikernel/duniverse/ptime/test/test_date.ml
Normal file
133
unikernel/duniverse/ptime/test/test_date.ml
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
(*---------------------------------------------------------------------------
|
||||
Copyright (c) 2015 The ptime programmers. All rights reserved.
|
||||
SPDX-License-Identifier: ISC
|
||||
---------------------------------------------------------------------------*)
|
||||
|
||||
open B0_testing
|
||||
open Testing_ptime
|
||||
|
||||
let test_bounds () =
|
||||
Test.test "calendar date field bounds" @@ fun () ->
|
||||
let valid_date ?__POS__ d =
|
||||
Test.holds ?__POS__ (Option.is_some (Ptime.of_date ?tz_offset_s:None d))
|
||||
in
|
||||
let wrong_date ?__POS__ d =
|
||||
Test.holds ?__POS__ (Option.is_none (Ptime.of_date ?tz_offset_s:None d))
|
||||
in
|
||||
(* Check year bounds *)
|
||||
wrong_date ~__POS__ (-1, 01, 01);
|
||||
valid_date ~__POS__ (0, 01, 01);
|
||||
valid_date ~__POS__ (1, 01, 01);
|
||||
valid_date ~__POS__ (9999, 01, 01);
|
||||
wrong_date ~__POS__ (10000, 01, 01);
|
||||
wrong_date ~__POS__ (10001, 01, 01);
|
||||
(* Check month bounds *)
|
||||
wrong_date ~__POS__ (0, 00, 01);
|
||||
valid_date ~__POS__ (0, 01, 01);
|
||||
valid_date ~__POS__ (0, 12, 01);
|
||||
wrong_date ~__POS__ (0, 13, 01);
|
||||
(* Check day bounds in 2015 (month lengths) *)
|
||||
(* Jan 2015 *)
|
||||
wrong_date ~__POS__ (2015, 01, -1);
|
||||
valid_date ~__POS__ (2015, 01, 01);
|
||||
valid_date ~__POS__ (2015, 01, 31);
|
||||
wrong_date ~__POS__ (2015, 01, 32);
|
||||
(* Feb 2015, is not leap *)
|
||||
wrong_date ~__POS__ (2015, 02, -1);
|
||||
valid_date ~__POS__ (2015, 02, 01);
|
||||
valid_date ~__POS__ (2015, 02, 28);
|
||||
wrong_date ~__POS__ (2015, 02, 29);
|
||||
(* Mar 2015 *)
|
||||
wrong_date ~__POS__ (2015, 03, -1);
|
||||
valid_date ~__POS__ (2015, 03, 01);
|
||||
valid_date ~__POS__ (2015, 03, 31);
|
||||
wrong_date ~__POS__ (2015, 03, 32);
|
||||
(* Apr 2015 *)
|
||||
wrong_date ~__POS__ (2015, 04, -1);
|
||||
valid_date ~__POS__ (2015, 04, 01);
|
||||
valid_date ~__POS__ (2015, 04, 30);
|
||||
wrong_date ~__POS__ (2015, 04, 31);
|
||||
(* May 2015 *)
|
||||
wrong_date ~__POS__ (2015, 05, -1);
|
||||
valid_date ~__POS__ (2015, 05, 01);
|
||||
valid_date ~__POS__ (2015, 05, 31);
|
||||
wrong_date ~__POS__ (2015, 05, 32);
|
||||
(* June 2015 *)
|
||||
wrong_date ~__POS__ (2015, 06, -1);
|
||||
valid_date ~__POS__ (2015, 06, 01);
|
||||
valid_date ~__POS__ (2015, 06, 30);
|
||||
wrong_date ~__POS__ (2015, 06, 31);
|
||||
(* July 2015 *)
|
||||
wrong_date ~__POS__ (2015, 07, -1);
|
||||
valid_date ~__POS__ (2015, 07, 01);
|
||||
valid_date ~__POS__ (2015, 07, 31);
|
||||
wrong_date ~__POS__ (2015, 07, 32);
|
||||
(* Aug 2015 *)
|
||||
wrong_date ~__POS__ (2015, 08, -1);
|
||||
valid_date ~__POS__ (2015, 08, 01);
|
||||
valid_date ~__POS__ (2015, 08, 31);
|
||||
wrong_date ~__POS__ (2015, 08, 32);
|
||||
(* Sept 2015 *)
|
||||
wrong_date ~__POS__ (2015, 09, -1);
|
||||
valid_date ~__POS__ (2015, 09, 01);
|
||||
valid_date ~__POS__ (2015, 09, 30);
|
||||
wrong_date ~__POS__ (2015, 09, 31);
|
||||
(* Oct 2015 *)
|
||||
wrong_date ~__POS__ (2015, 10, -1);
|
||||
valid_date ~__POS__ (2015, 10, 01);
|
||||
valid_date ~__POS__ (2015, 10, 31);
|
||||
wrong_date ~__POS__ (2015, 10, 32);
|
||||
(* Nov 2015 *)
|
||||
wrong_date ~__POS__ (2015, 11, -1);
|
||||
valid_date ~__POS__ (2015, 11, 01);
|
||||
valid_date ~__POS__ (2015, 11, 30);
|
||||
wrong_date ~__POS__ (2015, 11, 31);
|
||||
(* Dec 2015 *)
|
||||
wrong_date ~__POS__ (2015, 12, -1);
|
||||
valid_date ~__POS__ (2015, 12, 01);
|
||||
valid_date ~__POS__ (2015, 12, 31);
|
||||
wrong_date ~__POS__ (2015, 12, 32);
|
||||
(* 1500 is not leap *)
|
||||
valid_date ~__POS__ (1500, 02, 28);
|
||||
wrong_date ~__POS__ (1500, 02, 29);
|
||||
(* 1700 is not leap *)
|
||||
valid_date ~__POS__ (1700, 02, 28);
|
||||
wrong_date ~__POS__ (1700, 02, 29);
|
||||
(* 1800 is not leap *)
|
||||
valid_date ~__POS__ (1800, 02, 28);
|
||||
wrong_date ~__POS__ (1800, 02, 29);
|
||||
(* 1900 is not leap, Lotus 1-2-3 & Excel bug *)
|
||||
valid_date ~__POS__ (1900, 02, 28);
|
||||
wrong_date ~__POS__ (1900, 02, 29);
|
||||
(* 2000 is leap *)
|
||||
valid_date ~__POS__ (2000, 02, 28);
|
||||
valid_date ~__POS__ (2000, 02, 29);
|
||||
wrong_date ~__POS__ (2000, 02, 30);
|
||||
(* 2010 is not leap *)
|
||||
valid_date ~__POS__ (2010, 02, 28);
|
||||
wrong_date ~__POS__ (2010, 02, 29);
|
||||
(* 2012 is leap *)
|
||||
valid_date ~__POS__ (2012, 02, 29);
|
||||
valid_date ~__POS__ (2012, 02, 29);
|
||||
wrong_date ~__POS__ (2012, 02, 30);
|
||||
(* 2100 is not leap *)
|
||||
valid_date ~__POS__ (2100, 02, 28);
|
||||
wrong_date ~__POS__ (2100, 02, 29);
|
||||
()
|
||||
|
||||
let test_stamp_trips () =
|
||||
Test.test "random valid dates to stamps round trips" @@ fun () ->
|
||||
let of_date ?__POS__ d =
|
||||
Ptime.of_date ?tz_offset_s:None d |> Test.get_some ?__POS__
|
||||
in
|
||||
for i = 1 to Rand.loop_len () do
|
||||
let date = Rand.date () in
|
||||
let trip = Ptime.to_date (of_date date) in
|
||||
T.date ~__POS__ date trip
|
||||
done;
|
||||
()
|
||||
|
||||
let tests () =
|
||||
test_bounds ();
|
||||
test_stamp_trips ();
|
||||
()
|
||||
Loading…
Add table
Add a link
Reference in a new issue