aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/vcomponent/util-group.scm
blob: b32689ac4a7332032b95e046f212fd9ded9cfd85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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))