Back

max-of-type (clj)

(source)

protocol

(max-of-type _)
Return the max

Examples

tick
(ns tick.alpha.interval-test
  (:require
   [clojure.spec.alpha :as s]
   [tick.core :as t]
   [tick.protocols :as p]
   [clojure.test
    :refer [deftest is testing run-tests]
    :refer-macros [deftest is testing run-tests]]
   [tick.alpha.interval :as ti]
   #?@(:cljs [[java.time :refer [Instant LocalDateTime LocalTime]]]))
  #?(:clj
     (:import [java.time LocalDateTime Instant LocalTime])))

(deftest complement-test
  (testing "complement through max of type"
    (is (= [(ti/new-interval (t/time "01:00") (t/max-of-type (t/time "00:00")))]
           (ti/complement [(ti/new-interval (t/time "00:00") (t/time "01:00"))]))))
  (testing "complement ordered disjoint intervals"
    (is (= [(ti/new-interval (t/time "00:00") (t/time "01:00"))
            (ti/new-interval (t/time "02:00") (t/time "03:00"))
            (ti/new-interval (t/time "04:00") (t/max-of-type (t/time "00:00")))]
           (ti/complement [(ti/new-interval (t/time "01:00") (t/time "02:00"))
                        (ti/new-interval (t/time "03:00") (t/time "04:00"))]))))
  (testing "complement meeting intervals"
    (is (= [(ti/new-interval (t/time "00:00") (t/time "01:00"))
            (ti/new-interval (t/time "03:00") (t/max-of-type (t/time "00:00")))]
           (ti/complement [(ti/new-interval (t/time "01:00") (t/time "02:00"))
                        (ti/new-interval (t/time "02:00") (t/time "03:00"))]))))
  (testing "complement empty interval round trip"
    (is (= [] (ti/complement (ti/complement []))))))