Skip to content

Instantly share code, notes, and snippets.

@dabd
Last active December 11, 2015 19:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dabd/4646206 to your computer and use it in GitHub Desktop.
Save dabd/4646206 to your computer and use it in GitHub Desktop.
(ns test.core
(:require [clojure.string :as s]))
(defn expand-interval-test
[interval v]
(map (fn [s]
(cond (re-seq #"^\d+\.?\d*$" s)
`(<= ~v ~(Float/parseFloat s))
(re-seq #"^(\d+\.?\d*)-(\d+\.?\d*)$" s)
(let [[_ x y] (first (re-seq #"^(\d+\.?\d*)-(\d+\.?\d*)$" s))]
`(and (>= ~v ~(Float/parseFloat x)) (<= ~v ~(Float/parseFloat y))))
(re-seq #"^(\d+\.?\d*)\+$" s)
(let [[_ x] (first (re-seq #"^(\d+\.?\d*)\+$" s))]
`(>= ~v ~(Float/parseFloat x)))
(= "-" s)
`true
:else (throw (Exception. (str "Don't know how to parse this: " s)))))
(s/split interval #",")))
(defmacro interval-test-fn
[interval]
(let [v (gensym "v")]
`(fn [~v]
(or ~@(expand-interval-test interval v)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment