Back
group-by (clj)
(source)protocol
(group-by grouping ivals)
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 group-by-intervals-test
(testing "p and s"
(t/with-clock t/UTC
(is
(=
{(t/year 2017) [(ti/new-interval
(t/date-time "2017-12-20T00:00")
(t/date-time "2018-01-01T00:00"))]
(t/year 2018) [(ti/new-interval
(t/date-time "2018-01-01T00:00")
(t/date-time "2018-01-10T00:00"))]}
(ti/group-by
(ti/divide (ti/bounds (t/year 2016) (t/year 2019)) t/year)
[(ti/new-interval (t/date-time "2017-12-20T00:00")
(t/date-time "2018-01-10T00:00"))])))))
(testing "O"
(is
(=
{(t/year 2015) [(ti/bounds (t/year-month "2015-06") (t/year-month "2015-12"))]
(t/year 2016) [(ti/bounds (t/year 2016))]
(t/year 2017) [(ti/bounds (t/year-month "2017-01") (t/year-month "2017-06"))]}
(ti/group-by
(ti/divide (ti/bounds (t/year 2014) (t/year 2018)) t/year)
[(ti/bounds (t/year-month "2015-06") (t/year-month "2017-06"))]))))
(testing "M and e"
(is
(=
{(t/year 2015) [(t/year 2015)]
(t/year 2016) [(t/year 2016)]}
(ti/group-by
(ti/divide (ti/bounds (t/year 2014) (t/year 2017)) t/year)
(ti/divide (ti/bounds (t/year 2015) (t/year 2016)) t/year)))))
(testing "s"
(is (=
{(t/year 2015) [(ti/bounds (t/year 2015))]
(t/year 2016) [(ti/bounds (t/year 2016))]}
(ti/group-by
(ti/divide (ti/bounds (t/year 2014) (t/year 2017)) t/year)
[(ti/bounds (t/year 2015) (t/year 2016))]))))
(testing "f"
(is
(=
{(t/year 2015) [(ti/bounds (t/year-month "2015-06") (t/year-month "2015-12"))]}
(ti/group-by
[(t/year 2014) (t/year 2015) (t/year 2016)]
[(ti/bounds (t/year-month "2015-06") (t/year-month "2015-12"))]))))
(testing "F"
(is
(=
{(ti/bounds (t/year-month "2015-06") (t/year-month "2015-12"))
[(ti/bounds (t/year-month "2015-06") (t/year-month "2015-12"))]}
(ti/group-by
[(ti/bounds (t/year-month "2015-06") (t/year-month "2015-12"))]
[(t/year 2014) (t/year 2015) (t/year 2016)]))))
(testing "d"
(is
(=
{(t/year 2015) [(ti/bounds (t/year-month "2015-03") (t/year-month "2015-09"))]}
(ti/group-by
[(t/year 2014) (t/year 2015) (t/year 2016)]
[(ti/bounds (t/year-month "2015-03") (t/year-month "2015-09"))]))))
(ti/group-by
[(ti/bounds (t/year-month "2015-03") (t/year-month "2015-09"))]
[(t/year 2014) (t/year 2015) (t/year 2016)]))))
(testing "o"
(is
(=
{(ti/bounds (t/year-month "2015-06") (t/year-month "2017-06"))
[(ti/bounds (t/year-month "2015-06") (t/year-month "2015-12"))
(t/year "2016")
(ti/bounds (t/year-month "2017-01") (t/year-month "2017-06"))]}
(ti/group-by
[(ti/bounds (t/year-month "2015-06") (t/year-month "2017-06"))]
(ti/divide (ti/bounds (t/year 2014) (t/year 2018)) t/year))))))
(deftest group-by-test
(is
(= 31
(count
(ti/group-by
t/date
[(t/date "2015-05-20") (t/year-month "2015-06")])))))
(deftest group-by-empty-test
(is (= {} (ti/group-by t/date []))))