aboutsummaryrefslogtreecommitdiff
(use-modules (srfi srfi-64)
             (ice-9 match)
             (transform sql)
             (transform string-similarity)
             (transform strings)
             (transform special-forms))

(test-begin "sql")

(test-equal "select query"
  "SELECT InfoFiles.GN_AccesionId, InfoFiles.InfoFileTitle AS Name, InfoFiles.Title, InfoFiles.Specifics, DatasetStatus.DatasetStatusName FROM InfoFiles LEFT JOIN DatasetStatus USING (DatasetStatusId) WHERE GN_AccesionId IS NOT NULL"
  (select-query ((InfoFiles GN_AccesionId)
                 (InfoFiles InfoFileTitle Name)
                 (InfoFiles Title)
                 (InfoFiles Specifics)
                 (DatasetStatus DatasetStatusName))
                (InfoFiles
                 (left-join DatasetStatus "USING (DatasetStatusId)"))
                "WHERE GN_AccesionId IS NOT NULL"))

(test-end "sql")

(test-begin "string-similarity")

(test-equal "trigrams of a string"
  (list "coe" "oef" "eff" "ffi" "fic" "ici" "cie" "ien" "ent")
  ((@@ (transform string-similarity) trigrams) "coefficient"))

(test-equal "Jaccard index"
  0.4
  ((@@ (transform string-similarity) jaccard-index)
   (list 0 1 2 5 6 8 9)
   (list 0 2 3 4 5 7 9)))

(test-equal "Jaccard index of equal sets"
  1.0
  ((@@ (transform string-similarity) jaccard-index)
   (iota 10)
   (iota 10)))

(test-equal "Jaccard index of disjoint sets"
  0.0
  ((@@ (transform string-similarity) jaccard-index)
   (iota 10)
   (iota 10 10)))

(test-end "string-similarity")

(test-begin "utils")

(test-equal "map-alist docstring example"
  '((spam . 2)
    (ham . 4)
    (eggs . 6)
    (aal . 3)
    (vel . 0)
    (vel . 1)
    (vel . 2)
    (vel . 3)
    (fubar . 8))
  (map-alist '(("foo" . 1)
               (bar . 2)
               (foobar . 5)
               (fubar . 3))
    (set spam (1+ (key "foo")))
    (set ham (* 2 (key bar)))
    (set eggs (* 3 (key bar)))
    (set aal (+ (key "foo")
                (key bar)))
    (multiset vel (iota (* 2 (key bar))))
    (remove foobar)
    (else=> (match-lambda
              ((key . value)
               (cons key (expt 2 value)))))))

(test-equal "multiple set actions in map-alist should result in multiple keys"
  '((spam . 4)
    (spam . 6))
  (map-alist '((foo . 2))
    (set spam (* 2 (key foo)))
    (set spam (* 3 (key foo)))))

(test-end "utils")