Work to add UTC tracking to wall-times
[clsql.git] / tests / utc-time-compare.lisp
diff --git a/tests/utc-time-compare.lisp b/tests/utc-time-compare.lisp
new file mode 100644 (file)
index 0000000..215cae9
--- /dev/null
@@ -0,0 +1,58 @@
+(in-package :clsql-tests)
+
+;;;; This file contains a test ensuring that our utc conversion goes the same
+;;;; though UTC as it would through local-time, the values should match in each pairing
+;;;; This is left as a manual test, because it requires local-time and nothing else does
+;;;;
+
+(ql:quickload :local-time)
+(local-time:reread-timezone-repository)
+
+(defun %localtime-timestamp-offset (time)
+  (when (time-is-utc? time)
+    (return-from %localtime-timestamp-offset 0))
+  (multiple-value-bind (tusec tsec tmin thour tday tmonth tyear)
+      (decode-time time)
+    (multiple-value-bind (_nsec _sec _min _hour _day _month _year
+                          _day-of-week _daylight-saving-time-p
+                          offset)
+        (local-time:decode-timestamp
+         (local-time:encode-timestamp
+          (* 1000 (or tusec 0)) tsec tmin thour tday tmonth tyear))
+      (declare (ignore _nsec _sec _min _hour _day _month _year
+                       _day-of-week _daylight-saving-time-p))
+      offset)))
+
+(list
+ (let* ((clsql-sys::*default-timezone* -1)
+        (clsql-sys::*default-timezone-is-dst?* t)
+        (local-time:*default-timezone*
+          (local-time:find-timezone-by-location-name "Europe/Berlin"))
+        (ts (parse-timestring "2017-07-01T08:10:00")))
+   (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
+         (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
+
+ (let* ((clsql-sys::*default-timezone* -1)
+        (clsql-sys::*default-timezone-is-dst?* nil)
+        (local-time:*default-timezone*
+          (local-time:find-timezone-by-location-name "Europe/Berlin"))
+        (ts (parse-timestring "2017-12-01T08:10:00")))
+   (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
+         (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
+
+ (let* ((clsql-sys::*default-timezone* 5)
+        (clsql-sys::*default-timezone-is-dst?* t)
+        (local-time:*default-timezone*
+          (local-time:find-timezone-by-location-name "America/New_York"))
+        (ts (parse-timestring "2017-07-01T08:10:00")))
+   (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
+         (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
+
+ (let* ((clsql-sys::*default-timezone* 5)
+        (clsql-sys::*default-timezone-is-dst?* nil)
+        (local-time:*default-timezone*
+          (local-time:find-timezone-by-location-name "America/New_York"))
+        (ts (parse-timestring "2017-12-01T08:10:00")))
+   (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
+         (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
+ )