Add ERT with org-lookup-all for GROUP BY and ranking

* testing/lisp/test-org-table.el (test-org-table/org-lookup-all): Add
new test.
This commit is contained in:
Michael Brand 2014-02-22 21:18:28 +01:00
parent d0ae5616a5
commit 89c1668945
1 changed files with 56 additions and 2 deletions

View File

@ -554,8 +554,7 @@ reference (with row). Mode string N."
(ert-deftest test-org-table/copy-field ()
"Experiments on how to copy one field into another field.
See also `test-org-table/remote-reference-access'."
(let ((target
"
(let ((target "
| 0 | replace |
| a b | replace |
| c d | replace |
@ -651,6 +650,61 @@ formatter \"%.1f\"."
"vsum(@-I$2..@+I$2) +.0, string(\"\")); EN f-1 :: "
"@>$3 = string(\"\")")))
(ert-deftest test-org-table/org-lookup-all ()
"Use `org-lookup-all' for several GROUP BY as in SQL and for ranking.
See also http://orgmode.org/worg/org-tutorials/org-lookups.html ."
(let ((data "
#+NAME: data
| Purchase | Product | Shop | Rating |
|----------+---------+------+--------|
| a | p1 | s1 | 1 |
| b | p1 | s2 | 4 |
| c | p2 | s1 | 2 |
| d | p3 | s2 | 8 |
"))
;; Product rating and ranking by average purchase from "#+NAME: data"
(org-test-table-target-expect
(concat data "
| Product | Rating | Ranking |
|---------+---------+---------|
| p1 | replace | replace |
| p2 | replace | replace |
| p3 | replace | replace |
")
(concat data "
| Product | Rating | Ranking |
|---------+--------+---------|
| p1 | 2.5 | 2 |
| p2 | 2.0 | 3 |
| p3 | 8.0 | 1 |
")
2 (concat
"#+TBLFM: $2 = '(let ((all (org-lookup-all '$1 "
"'(remote(data, @I$2..@>$2)) '(remote(data, @I$4..@>$4))))) "
"(/ (apply '+ all) (length all) 1.0)); L :: "
"$3 = '(+ 1 (length (org-lookup-all $2 '(@I$2..@>$2) nil '<))); N"))
;; Shop rating and ranking by average purchase from "#+NAME: data"
(org-test-table-target-expect
(concat data "
| Shop | Rating | Ranking |
|------+---------+---------|
| s1 | replace | replace |
| s2 | replace | replace |
")
(concat data "
| Shop | Rating | Ranking |
|------+--------+---------|
| s1 | 1.5 | 2 |
| s2 | 6.0 | 1 |
")
2 (concat
"#+TBLFM: $2 = '(let ((all (org-lookup-all '$1 "
"'(remote(data, @I$3..@>$3)) '(remote(data, @I$4..@>$4))))) "
"(/ (apply '+ all) (length all) 1.0)); L :: "
"$3 = '(+ 1 (length (org-lookup-all $2 '(@I$2..@>$2) nil '<))); N"))))
(ert-deftest test-org-table/org-table-make-reference/mode-string-EL ()
(fset 'f 'org-table-make-reference)
;; For Lisp formula only