From 97a0a9b1fe0be67a7b4efc78aa15e3aa227d51e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 14 Nov 2023 16:57:39 +0100 Subject: Add tests for vcomponent grouping utilities. --- tests/unit/vcomponent/util-group.scm | 170 +++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 tests/unit/vcomponent/util-group.scm (limited to 'tests/unit/vcomponent/util-group.scm') diff --git a/tests/unit/vcomponent/util-group.scm b/tests/unit/vcomponent/util-group.scm new file mode 100644 index 00000000..b32689ac --- /dev/null +++ b/tests/unit/vcomponent/util-group.scm @@ -0,0 +1,170 @@ +(define-module (test vcomponent-util-group) + :use-module (srfi srfi-41) + :use-module (srfi srfi-64) + :use-module (srfi srfi-88) + :use-module (datetime) + :use-module ((vcomponent) :select (vcomponent-equal?)) + :use-module (vcomponent create) + :use-module (vcomponent util group)) + +(define (force-groups groups) + (stream-map (lambda (p) (cons (car p) (stream->list (cdr p)))) + groups)) + +(test-equal "group-stream" + (list (list (date year: 2020 month: jan day: 1) + (vevent + dtstart: (datetime year: 2020 month: jan day: 1 hour: 0) + dtend: (datetime year: 2020 month: jan day: 1 hour: 10))) + (list (date year: 2020 month: jan day: 02)) + (list (date year: 2020 month: jan day: 03)) + (list (date year: 2020 month: jan day: 04)) + (list (date year: 2020 month: jan day: 05)) + (list (date year: 2020 month: jan day: 06)) + (list (date year: 2020 month: jan day: 07)) + (list (date year: 2020 month: jan day: 08)) + (list (date year: 2020 month: jan day: 09)) + (list (date year: 2020 month: jan day: 10) + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 10 hour: 10)) + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10))) + (list (date year: 2020 month: jan day: 11) + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10))) + (list (date year: 2020 month: jan day: 12) + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10)) + (vevent + dtstart: (date year: 2020 month: jan day: 12))) + (list (date year: 2020 month: jan day: 13) + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10)) + ) + (list (date year: 2020 month: jan day: 14) + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10)) + ) + (list (date year: 2020 month: jan day: 15) + (vevent + dtstart: (datetime year: 2020 month: jan day: 15 hour: 0) + dtend: (datetime year: 2020 month: jan day: 15 hour: 10))) + (list (date year: 2020 month: jan day: 16))) + + (stream->list + 16 (force-groups + (group-stream + (stream (vevent dtstart: (datetime year: 2020 month: jan day: 1 hour: 0) + dtend: (datetime year: 2020 month: jan day: 1 hour: 10)) + (vevent dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 10 hour: 10)) + (vevent dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10)) + (vevent dtstart: (date year: 2020 month: jan day: 12)) + (vevent dtstart: (datetime year: 2020 month: jan day: 15 hour: 0) + dtend: (datetime year: 2020 month: jan day: 15 hour: 10))))))) + +(define (test-groups expected actual) + (for-each (lambda (group-e group-a) + (test-equal (car group-e) (car group-a)) + (test-equal (length (cdr group-e)) (length (cdr group-a))) + (for-each (lambda (e a) (test-assert (vcomponent-equal? e a))) + (cdr group-e) (cdr group-a))) + expected actual)) + +(test-group "get-groups-between" + (let ((groups + (group-stream + (stream (vevent dtstart: (datetime year: 2020 month: jan day: 1 hour: 0) + dtend: (datetime year: 2020 month: jan day: 1 hour: 10)) + (vevent dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 10 hour: 10)) + (vevent dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10)) + (vevent dtstart: (date year: 2020 month: jan day: 12)) + (vevent dtstart: (datetime year: 2020 month: jan day: 15 hour: 0) + dtend: (datetime year: 2020 month: jan day: 15 hour: 10)))))) + (test-equal "Subset of all events" + (list (list (date year: 2020 month: jan day: 05)) + (list (date year: 2020 month: jan day: 06)) + (list (date year: 2020 month: jan day: 07)) + (list (date year: 2020 month: jan day: 08)) + (list (date year: 2020 month: jan day: 09)) + (list (date year: 2020 month: jan day: 10) + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 10 hour: 10)) + + (vevent + dtstart: (datetime year: 2020 month: jan day: 10 hour: 0) + dtend: (datetime year: 2020 month: jan day: 14 hour: 10)))) + + (stream->list + (force-groups (get-groups-between groups + (date year: 2020 month: jan day: 5) + (date year: 2020 month: jan day: 10))))) + + (test-equal "Subset not containing any events" + (list (list (date year: 2020 month: feb day: 5)) + (list (date year: 2020 month: feb day: 6)) + (list (date year: 2020 month: feb day: 7)) + (list (date year: 2020 month: feb day: 8)) + (list (date year: 2020 month: feb day: 9))) + (stream->list (force-groups + (get-groups-between groups + (date year: 2020 month: feb day: 5) + (date year: 2020 month: feb day: 9))))) + + (test-group "Subset overlapping start of events" + (test-groups + (list (list (date year: 2019 month: dec day: 31)) + (list (date year: 2020 month: jan day: 1) + (vevent dtend: #2020-01-01T10:00:00 dtstart: #2020-01-01T00:00:00)) + (list (date year: 2020 month: jan day: 2)) + (list (date year: 2020 month: jan day: 3)) + (list (date year: 2020 month: jan day: 4)) + (list (date year: 2020 month: jan day: 5))) + + (stream->list (force-groups + (get-groups-between groups + (date year: 2019 month: dec day: 31) + (date year: 2020 month: jan day: 5)))))) + + (test-group "Subset overlapping end of events" + (test-groups + (list (list (date year: 2020 month: jan day: 11) + (vevent dtend: (datetime year: 2020 month: jan day: 14 hour: 10) + dtstart: (datetime year: 2020 month: jan day: 10 hour: 00))) + (list (date year: 2020 month: jan day: 12) + (vevent dtend: (datetime year: 2020 month: jan day: 14 hour: 10) + dtstart: (datetime year: 2020 month: jan day: 10 hour: 00)) + (vevent dtstart: (date year: 2020 month: jan day: 12))) + (list (date year: 2020 month: jan day: 13) + (vevent dtend: (datetime year: 2020 month: jan day: 14 hour: 10) + dtstart: (datetime year: 2020 month: jan day: 10 hour: 00))) + (list (date year: 2020 month: jan day: 14) + (vevent dtend: (datetime year: 2020 month: jan day: 14 hour: 10) + dtstart: (datetime year: 2020 month: jan day: 10 hour: 00))) + (list (date year: 2020 month: jan day: 15) + (vevent dtend: (datetime year: 2020 month: jan day: 15 hour: 10) + dtstart: (datetime year: 2020 month: jan day: 15 hour: 00))) + (list (date year: 2020 month: jan day: 16)) + (list (date year: 2020 month: jan day: 17)) + (list (date year: 2020 month: jan day: 18)) + (list (date year: 2020 month: jan day: 19)) + (list (date year: 2020 month: jan day: 20))) + + (stream->list (force-groups + (get-groups-between groups + (date year: 2020 month: jan day: 11) + (date year: 2020 month: jan day: 20)))))))) + +;;; TODO group->event-list + +'((vcomponent util group)) -- cgit v1.2.3