summaryrefslogtreecommitdiffstats
path: root/tests/010
diff options
context:
space:
mode:
Diffstat (limited to 'tests/010')
-rw-r--r--tests/010/align-columns.dat6
-rw-r--r--tests/010/align-columns.expected18
-rw-r--r--tests/010/align-columns.txr30
3 files changed, 54 insertions, 0 deletions
diff --git a/tests/010/align-columns.dat b/tests/010/align-columns.dat
new file mode 100644
index 00000000..3c722207
--- /dev/null
+++ b/tests/010/align-columns.dat
@@ -0,0 +1,6 @@
+Given$a$text$file$of$many$lines,$where$fields$within$a$line$
+are$delineated$by$a$single$'dollar'$character,$write$a$program
+that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$
+column$are$separated$by$at$least$one$space.
+Further,$allow$for$each$word$in$a$column$to$be$either$left$
+justified,$right$justified,$or$center$justified$within$its$column.
diff --git a/tests/010/align-columns.expected b/tests/010/align-columns.expected
new file mode 100644
index 00000000..06e083c7
--- /dev/null
+++ b/tests/010/align-columns.expected
@@ -0,0 +1,18 @@
+Given a text file of many lines, where fields within a line
+are delineated by a single 'dollar' character, write a program
+that aligns each column of fields by ensuring that words in each
+column are separated by at least one space.
+Further, allow for each word in a column to be either left
+justified, right justified, or center justified within its column.
+ Given a text file of many lines, where fields within a line
+ are delineated by a single 'dollar' character, write a program
+ that aligns each column of fields by ensuring that words in each
+ column are separated by at least one space.
+ Further, allow for each word in a column to be either left
+justified, right justified, or center justified within its column.
+ Given a text file of many lines, where fields within a line
+ are delineated by a single 'dollar' character, write a program
+ that aligns each column of fields by ensuring that words in each
+ column are separated by at least one space.
+ Further, allow for each word in a column to be either left
+justified, right justified, or center justified within its column.
diff --git a/tests/010/align-columns.txr b/tests/010/align-columns.txr
new file mode 100644
index 00000000..8ae2b7f5
--- /dev/null
+++ b/tests/010/align-columns.txr
@@ -0,0 +1,30 @@
+@(collect)
+@ (coll)@{item /[^$]+/}@(end)
+@(end)
+@; nc = number of columns
+@; pi = padded items (data with row lengths equalized with empty strings)
+@; cw = vector of max column widths
+@; ce = center padding
+@(bind nc @(apply (fun max) (mapcar (fun length) item)))
+@(bind pi @(mapcar (lambda (row)
+ (append row (repeat '("") (- nc (length row)))))
+ item))
+@(bind cw @(vector-list
+ (mapcar (lambda (column)
+ (apply (fun max) (mapcar (fun length) column)))
+ ;; matrix transpose trick cols become rows:
+ (apply (fun mapcar) (cons (fun list) pi)))))
+@(bind ns "")
+@(output)
+@ (repeat)
+@ (rep :counter i)@{pi @[cw i]} @(end)
+@ (end)
+@ (repeat)
+@ (rep :counter i)@{pi @(- [cw i])} @(end)
+@ (end)
+@ (repeat)
+@ (rep :counter i)@\
+ @{ns @(trunc (- [cw i] (length pi)) 2)}@\
+ @{pi @(- [cw i] (trunc (- [cw i] (length pi)) 2))} @(end)
+@ (end)
+@(end)