|
1 | 1 | (ns structured-data-test |
2 | | - (:use structured-data |
3 | | - midje.sweet)) |
4 | | - |
5 | | -(facts "do-a-thing" {:exercise 1 |
6 | | - :points 1} |
7 | | - (do-a-thing 3) => 46656.0 |
8 | | - (do-a-thing 1) => 4.0 |
9 | | - (do-a-thing 0) => 1.0) |
10 | | - |
11 | | -(facts "spiff" {:exercise 2 |
12 | | - :points 1} |
13 | | - (spiff [1 2 3]) => 4 |
14 | | - (spiff [1 2 -34 4 5 6]) => -33) |
15 | | - |
16 | | -(facts "cutify" {:exercise 3 |
17 | | - :points 1} |
18 | | - (cutify []) => ["<3"] |
19 | | - (cutify [1 2 3]) => [1 2 3 "<3"] |
20 | | - (cutify ["a" "b"]) => ["a" "b" "<3"]) |
21 | | - |
22 | | -(facts "spiff-destructuring" {:exercise 4 |
23 | | - :points 1} |
24 | | - (spiff-destructuring [1 2 3]) => 4 |
25 | | - (spiff-destructuring [1 2 -34 4 5 6]) => -33) |
26 | | - |
27 | | -(facts {:exercise 5 |
28 | | - :points 1} |
29 | | - (tabular |
30 | | - (facts "width" |
31 | | - (width (rectangle ?bottom-left ?top-right)) => ?width) |
32 | | - ?bottom-left ?top-right ?width |
33 | | - [1 1] [5 1] 4 |
34 | | - [1 1] [1 1] 0 |
35 | | - [3 1] [10 4] 7 |
36 | | - [-1 -1] [0 0] 1 |
37 | | - [-5 2] [0 2] 5) |
38 | | - |
39 | | - (tabular |
40 | | - (facts "height" |
41 | | - (height (rectangle ?bottom-left ?top-right)) => ?height) |
42 | | - ?bottom-left ?top-right ?height |
43 | | - [1 1] [5 1] 0 |
44 | | - [-1 -1] [0 0] 1 |
45 | | - [2 -7] [4 4] 11 |
46 | | - [1 1] [5 5] 4 |
47 | | - [0 0] [2 3] 3)) |
48 | | - |
49 | | -(tabular |
50 | | - (facts "square?" {:exercise 6 |
51 | | - :points 1} |
52 | | - (square? (rectangle ?bottom-left ?top-right)) => ?square?) |
53 | | - ?bottom-left ?top-right ?square? |
54 | | - [1 1] [2 2] true |
55 | | - [1 1] [2 3] false |
56 | | - [1 1] [1 1] true |
57 | | - [3 2] [1 0] true |
58 | | - [3 2] [1 1] false |
59 | | - [-1 -1] [0 0] true |
60 | | - [-2 -4] [0 -2] true |
61 | | - [-2 -3] [1 1] false) |
62 | | - |
63 | | -(tabular |
64 | | - (facts "area" {:exercise 7 |
65 | | - :points 1} |
66 | | - (area (rectangle ?bottom-left ?top-right)) => ?area) |
67 | | - ?bottom-left ?top-right ?area |
68 | | - [1 1] [5 1] 0 |
69 | | - [0 0] [1 1] 1 |
70 | | - [0 0] [4 3] 12 |
71 | | - [-1 -1] [3 7] 32 |
72 | | - [-2 -7] [-1 -2] 5 |
73 | | - [3 1] [10 4] 21) |
74 | | - |
75 | | -(tabular |
76 | | - (facts "contains-point?" {:exercise 8 |
77 | | - :points 1} |
78 | | - (contains-point? (rectangle ?bottom-left ?top-right) |
79 | | - ?point) |
80 | | - => ?contains?) |
81 | | - ?bottom-left ?top-right ?point ?contains? |
82 | | - [0 0] [2 2] [1 1] true |
83 | | - [0 0] [2 2] [2 1] true |
84 | | - [0 0] [2 2] [-3 1] false |
85 | | - [-2 -5] [1 5] [-2 -1] true |
86 | | - [-2 -5] [1 5] [-3 -1] false |
87 | | - [0 0] [2 2] [1 3] false |
88 | | - [1 1] [2 2] [1 1] true |
89 | | - [1 1] [1 1] [1 1] true |
90 | | - |
91 | | - [-1 2] [3 7] [-6 10] false |
92 | | - [-1 2] [3 7] [0 10] false |
93 | | - [-1 2] [3 7] [5 11] false |
94 | | - [-1 2] [3 7] [5 4] false |
95 | | - [-1 2] [3 7] [6 1] false |
96 | | - [-1 2] [3 7] [0 0] false |
97 | | - [-1 2] [3 7] [-2 0] false |
98 | | - [-1 2] [3 7] [-5 5] false) |
99 | | - |
100 | | -(tabular |
101 | | - (facts "contains-rectangle?" {:exercise 9 |
102 | | - :points 1} |
103 | | - (contains-rectangle? (rectangle ?x1 ?y1) |
104 | | - (rectangle ?x2 ?y2)) => ?contains?) |
105 | | - ?x1 ?y1 ?x2 ?y2 ?contains? |
106 | | - [0 0] [3 3] [1 1] [2 2] true |
107 | | - [0 0] [2 2] [1 1] [3 3] false |
108 | | - [0 0] [1 1] [0 0] [1 1] true |
109 | | - [0 0] [1 1] [1 1] [2 2] false |
110 | | - [-2 -2] [2 2] [-1 -1] [1 1] true |
111 | | - [-2 -2] [2 2] [0 0] [3 4] false) |
112 | | - |
113 | | -(def china {:name "China Miéville", :birth-year 1972}) |
114 | | -(def octavia {:name "Octavia E. Butler" |
115 | | - :birth-year 1947 |
116 | | - :death-year 2006}) |
117 | | -(def friedman {:name "Daniel Friedman" :birth-year 1944}) |
118 | | -(def felleisen {:name "Matthias Felleisen"}) |
119 | | - |
120 | | -(def cities {:title "The City and the City" :authors [china]}) |
121 | | -(def wild-seed {:title "Wild Seed", :authors [octavia]}) |
122 | | -(def embassytown {:title "Embassytown", :authors [china]}) |
123 | | -(def little-schemer {:title "The Little Schemer" |
124 | | - :authors [friedman, felleisen]}) |
125 | | - |
126 | | -(def books [cities, wild-seed, embassytown, little-schemer]) |
127 | | - |
128 | | -(let [china {:name "China Miéville", :birth-year 1972} |
129 | | - octavia {:name "Octavia E. Butler" |
130 | | - :birth-year 1947 |
131 | | - :death-year 2006} |
132 | | - friedman {:name "Daniel Friedman" :birth-year 1944} |
133 | | - felleisen {:name "Matthias Felleisen"} |
134 | | - cities {:title "The City and the City" :authors [china]} |
135 | | - wild-seed {:title "Wild Seed", :authors [octavia]} |
136 | | - embassytown {:title "Embassytown", :authors [china]} |
137 | | - little-schemer {:title "The Little Schemer" |
138 | | - :authors [friedman, felleisen]} |
139 | | - books [cities, wild-seed, embassytown, little-schemer]] |
140 | | - |
141 | | - (facts "title-length" {:exercise 10 |
142 | | - :points 1} |
143 | | - (title-length cities) => 21 |
144 | | - (title-length wild-seed) => 9 |
145 | | - (title-length little-schemer) => 18) |
146 | | - |
147 | | - (facts "author-count" {:exercise 11 |
148 | | - :points 1} |
149 | | - (author-count cities) => 1 |
150 | | - (author-count wild-seed) => 1 |
151 | | - (author-count little-schemer) => 2) |
152 | | - |
153 | | - (facts "multiple-authors?" {:exercise 12 |
154 | | - :points 1} |
155 | | - (multiple-authors? cities) => false |
156 | | - (multiple-authors? wild-seed) => false |
157 | | - (multiple-authors? little-schemer) => true) |
158 | | - |
159 | | - (facts "add-author" {:exercise 13 |
160 | | - :points 1} |
161 | | - (add-author little-schemer {:name "Gerald J. Sussman"}) |
162 | | - => {:title "The Little Schemer" |
163 | | - :authors [{:birth-year 1944, :name "Daniel Friedman"} |
164 | | - {:name "Matthias Felleisen"} |
165 | | - {:name "Gerald J. Sussman"}]} |
166 | | - (add-author {:authors [{:name "Juhana"}]} {:name "Jani"}) |
167 | | - => {:authors [{:name "Juhana"} {:name "Jani"}]}) |
168 | | - |
169 | | - (facts "alive?" {:exercise 14 |
170 | | - :points 1} |
171 | | - (alive? china) => true |
172 | | - (alive? octavia) => false) |
173 | | - |
174 | | - (facts "element-lengths" {:exercise 15 |
175 | | - :points 1} |
176 | | - (element-lengths ["foo" "bar" "" "quux"]) => [3 3 0 4] |
177 | | - (element-lengths ["x" [:a :b :c] {:y 42}]) => [1 3 1]) |
178 | | - |
179 | | - (facts "second-elements" {:exercise 16 |
180 | | - :points 1} |
181 | | - (second-elements [[1 2] [2 3] [3 4]]) => [2 3 4] |
182 | | - (second-elements [[1 2 3 4] [1] ["a" "s" "d" "f"]]) => [2 nil "s"]) |
183 | | - |
184 | | - (facts "titles" {:exercise 17 |
185 | | - :points 1} |
186 | | - (titles [cities]) => ["The City and the City"] |
187 | | - (titles books) => (just ["The City and the City" |
188 | | - "Wild Seed" |
189 | | - "Embassytown" |
190 | | - "The Little Schemer"] |
191 | | - :in-any-order))) |
192 | | - |
193 | | -(facts "stars" {:exercise 18 |
194 | | - :points 1} |
195 | | - (stars 1) => "*" |
196 | | - (stars 7) => "*******" |
197 | | - (stars 3) => "***") |
198 | | - |
199 | | -(facts "monotonic?" {:exercise 19 |
200 | | - :points 1} |
201 | | - (monotonic? [1 2 3]) => true |
202 | | - (monotonic? [0 1 10 11]) => true |
203 | | - (monotonic? [3 2 0 -3]) => true |
204 | | - (monotonic? [3 2 2]) => true |
205 | | - (monotonic? [1 2 1 0]) => false) |
206 | | - |
207 | | -(facts "toggle" {:exercise 20 |
208 | | - :points 1} |
209 | | - (toggle #{:a :b :c} :d) => #{:a :b :c :d} |
210 | | - (toggle #{:a :b :c} :a) => #{:b :c}) |
211 | | - |
212 | | -(facts "contains-duplicates?" {:exercise 21 |
213 | | - :points 1} |
214 | | - (contains-duplicates? [1 1 2 3 -40]) => true |
215 | | - (contains-duplicates? [1 2 2 3 -40]) => true |
216 | | - (contains-duplicates? [1 2 3 -40]) => false |
217 | | - (contains-duplicates? [1 2 3 "a" "a"]) => true) |
218 | | - |
219 | | -(facts "old-book->new-book" {:exercise 22 |
220 | | - :points 1} |
221 | | - (old-book->new-book {:title "The Little Schemer" |
222 | | - :authors [friedman, felleisen]}) |
223 | | - => {:title "The Little Schemer" :authors #{friedman, felleisen}} |
224 | | - (old-book->new-book {:title "Wild Seed", :authors [octavia]}) |
225 | | - => {:title "Wild Seed", :authors #{octavia}} |
226 | | - (old-book->new-book |
227 | | - {:awards ["Hugo" "World Fantasy Award" "Arthur C. Clarke Award" |
228 | | - "British Science Fiction Award"] |
229 | | - :title "The City and the City" |
230 | | - :authors [{:birth-year 1972, :name "China Miéville"}]}) |
231 | | - => {:awards ["Hugo" "World Fantasy Award" "Arthur C. Clarke Award" |
232 | | - "British Science Fiction Award"] |
233 | | - :title "The City and the City" |
234 | | - :authors #{{:birth-year 1972, :name "China Miéville"}}}) |
235 | | - |
236 | | - |
237 | | -(let [china {:name "China Miéville", :birth-year 1972} |
238 | | - octavia {:name "Octavia E. Butler" |
239 | | - :birth-year 1947 |
240 | | - :death-year 2006} |
241 | | - friedman {:name "Daniel Friedman" :birth-year 1944} |
242 | | - felleisen {:name "Matthias Felleisen"} |
243 | | - jrrtolkien {:name "J. R. R. Tolkien" :birth-year 1892 :death-year 1973} |
244 | | - christopher {:name "Christopher Tolkien" :birth-year 1924} |
245 | | - kay {:name "Guy Gavriel Kay" :birth-year 1954} |
246 | | - dick {:name "Philip K. Dick", :birth-year 1928, :death-year 1982} |
247 | | - zelazny {:name "Roger Zelazny", :birth-year 1937, :death-year 1995} |
248 | | - |
249 | | - authors-set #{china, felleisen, octavia, friedman} |
250 | | - |
251 | | - cities {:title "The City and the City" :authors #{china}} |
252 | | - wild-seed {:title "Wild Seed", :authors #{octavia}} |
253 | | - embassytown {:title "Embassytown", :authors #{china}} |
254 | | - little-schemer {:title "The Little Schemer" |
255 | | - :authors #{friedman, felleisen}} |
256 | | - silmarillion {:title "Silmarillion" |
257 | | - :authors #{jrrtolkien, christopher, kay}} |
258 | | - deus-irae {:title "Deus Irae", :authors #{dick, zelazny}} |
259 | | - |
260 | | - books [cities, wild-seed, embassytown, little-schemer]] |
261 | | - |
262 | | - (facts "has-author?" {:exercise 23 |
263 | | - :points 1} |
264 | | - (has-author? cities china) => true |
265 | | - (has-author? cities felleisen) => false |
266 | | - (has-author? little-schemer felleisen) => true |
267 | | - (has-author? little-schemer friedman) => true |
268 | | - (has-author? little-schemer octavia) => false) |
269 | | - |
270 | | - (facts "authors" {:exercise 24 |
271 | | - :points 1} |
272 | | - (authors [cities, wild-seed]) => #{china, octavia} |
273 | | - (authors [cities, wild-seed, embassytown]) => #{china, octavia} |
274 | | - (authors [little-schemer, cities]) => #{china, friedman, felleisen}) |
275 | | - |
276 | | - (facts "all-author-names" {:exercise 25 |
277 | | - :points 1} |
278 | | - (all-author-names []) => #{} |
279 | | - (all-author-names [cities, wild-seed]) |
280 | | - => #{"China Miéville" "Octavia E. Butler"} |
281 | | - (all-author-names books) |
282 | | - => #{"Matthias Felleisen" "China Miéville" |
283 | | - "Octavia E. Butler" "Daniel Friedman"}) |
284 | | - |
285 | | - (facts "author->string" {:exercise 26 |
286 | | - :points 1} |
287 | | - (author->string felleisen) => "Matthias Felleisen" |
288 | | - (author->string friedman) => "Daniel Friedman (1944 - )" |
289 | | - (author->string octavia) => "Octavia E. Butler (1947 - 2006)") |
290 | | - |
291 | | - (facts "authors->string" {:exercise 27 |
292 | | - :points 1} |
293 | | - (authors->string (:authors little-schemer)) |
294 | | - => (every-checker (contains "Daniel Friedman (1944 - )") |
295 | | - (contains "Matthias Felleisen") |
296 | | - (contains ", ")) |
297 | | - (authors->string #{octavia}) => "Octavia E. Butler (1947 - 2006)" |
298 | | - (authors->string #{}) => "" |
299 | | - (authors->string #{octavia, friedman}) |
300 | | - => (every-checker (contains "Octavia E. Butler (1947 - 2006)") |
301 | | - (contains "Daniel Friedman (1944 - )") |
302 | | - (contains ", "))) |
303 | | - |
304 | | - (facts "book->string" {:exercise 28 |
305 | | - :points 1} |
306 | | - (book->string wild-seed) |
307 | | - => "Wild Seed, written by Octavia E. Butler (1947 - 2006)" |
308 | | - (book->string little-schemer) |
309 | | - => (every-checker (has-prefix "The Little Schemer, written by ") |
310 | | - (has-suffix #"Daniel Friedman \(1944 - \), Matthias Felleisen|Matthias Felleisen, Daniel Friedman \(1944 - \)"))) |
311 | | - |
312 | | - (facts "books->string" {:exercise 29 |
313 | | - :points 1} |
314 | | - (books->string []) => "No books." |
315 | | - (books->string [cities]) |
316 | | - => "1 book. The City and the City, written by China Miéville (1972 - )." |
317 | | - (books->string [little-schemer, cities, wild-seed]) |
318 | | - => #"3 books. The Little Schemer, written by (Daniel Friedman \(1944 - \), Matthias Felleisen|Matthias Felleisen, Daniel Friedman \(1944 - \)). The City and the City, written by China Miéville \(1972 - \). Wild Seed, written by Octavia E. Butler \(1947 - 2006\).") |
319 | | - |
320 | | - (facts "books-by-author" {:exercise 30 |
321 | | - :points 1} |
322 | | - (books-by-author china books) => (just [cities embassytown]) |
323 | | - (books-by-author octavia books) => (just [wild-seed])) |
324 | | - |
325 | | - (facts "author-by-name" {:exercise 31 |
326 | | - :points 1} |
327 | | - (author-by-name "Octavia E. Butler" authors-set) => octavia |
328 | | - (author-by-name "Octavia E. Butler" #{felleisen, friedman}) => nil |
329 | | - (author-by-name "China Miéville" authors-set) => china |
330 | | - (author-by-name "Goerge R. R. Martin" authors-set) => nil) |
331 | | - |
332 | | - (facts "living-authors" {:exercise 32 |
333 | | - :points 1} |
334 | | - (living-authors authors-set) => (just #{china, felleisen, friedman}) |
335 | | - (living-authors #{octavia}) => (just #{}) |
336 | | - (living-authors #{china, felleisen}) => (just #{china, felleisen})) |
337 | | - |
338 | | - (facts "has-a-living-author?" {:exercise 33 |
339 | | - :points 1} |
340 | | - (has-a-living-author? wild-seed) => false |
341 | | - (has-a-living-author? silmarillion) => true |
342 | | - (has-a-living-author? little-schemer) => true |
343 | | - (has-a-living-author? cities) => true |
344 | | - (has-a-living-author? deus-irae) => false) |
345 | | - |
346 | | - (facts "books-by-living-authors" {:exercise 34 |
347 | | - :points 1} |
348 | | - (books-by-living-authors books) => (just #{little-schemer cities embassytown}) |
349 | | - (books-by-living-authors (concat books [deus-irae, silmarillion])) |
350 | | - => (just #{little-schemer cities embassytown silmarillion}))) |
| 2 | + (:use iloveponies.tests.structured-data)) |
0 commit comments