Added validation.
This commit is contained in:
parent
8a7202f57d
commit
a377b3a845
4 changed files with 77 additions and 7 deletions
|
|
@ -39,7 +39,6 @@
|
|||
relative-humidity saturation-vapour-pressure temperature
|
||||
temperature-celsius temperature-kelvin volume
|
||||
wet-bulb-temperature-celsius] :as packet}]
|
||||
(println packet)
|
||||
(if temperature (resolve-humidity
|
||||
(assoc (dissoc packet :temperature)
|
||||
:temperature-celsius temperature))
|
||||
|
|
@ -61,7 +60,8 @@
|
|||
(relative-humidity-fn packet))
|
||||
:saturation-vapour-pressure (when-not saturation-vapour-pressure
|
||||
(saturation-vapour-pressure-fn packet))
|
||||
:temperature-celsius (when
|
||||
:temperature-celsius (cond
|
||||
temperature temperature
|
||||
(and temperature-kelvin
|
||||
(not temperature-celsius))
|
||||
(- temperature-kelvin celsius-offset))
|
||||
|
|
@ -81,3 +81,45 @@
|
|||
(let [p' (resolve-humidity p)]
|
||||
(if (= (keys p) (keys p')) p
|
||||
(recur p')))))
|
||||
|
||||
(defn validation-error
|
||||
[key limit a b]
|
||||
(let [m (max a b)
|
||||
error (abs (float (/ (compare a b) (if (zero? m) 0.000001 m) (/ limit 100))))]
|
||||
(if (> error limit)
|
||||
(do
|
||||
(println (format "ERROR: key: %s; a: %s; b %s; errror: %s%%." key a b error))
|
||||
false)
|
||||
true)))
|
||||
|
||||
(def ^:dynamic
|
||||
*validation-limit*
|
||||
"Percentage limit for discrepancies in values during validation."
|
||||
1)
|
||||
|
||||
(defn validate
|
||||
"Validate a packet by recalculating each value. Discrepancies within
|
||||
`*validation-limit*`% will be ignored."
|
||||
[& {:keys [pressure-millibars pressure-pascals temperature-celsius
|
||||
temperature-kelvin] :as packet}]
|
||||
(let [v (?assoc (into (sorted-map) packet)
|
||||
:absolute-humidity (absolute-humidity-fn packet)
|
||||
:actual-vapour-pressure (actual-vapour-pressure-fn packet)
|
||||
:dew-point-celsius (dew-point-celsius-fn packet)
|
||||
:pressure-pascals (if pressure-millibars
|
||||
(* pressure-millibars 100) Pa)
|
||||
:pressure-millibars (if pressure-pascals
|
||||
(float (/ pressure-pascals 100))
|
||||
(float (/ Pa 100)))
|
||||
:relative-humidity (relative-humidity-fn packet)
|
||||
:saturation-vapour-pressure
|
||||
(saturation-vapour-pressure-fn packet)
|
||||
:temperature-celsius (- temperature-kelvin celsius-offset)
|
||||
:temperature-kelvin (+ temperature-celsius celsius-offset)
|
||||
:volume (volume-fn packet)
|
||||
:wet-bulb-temperature-celsius
|
||||
(wet-bulb-temperature-celsius-fn packet))]
|
||||
(empty?
|
||||
(remove true?
|
||||
(map #(validation-error % *validation-limit* (packet %) (v %))
|
||||
(keys packet))))))
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
(ns humidity.core-test
|
||||
(:require
|
||||
[clojure.test :refer [deftest is testing]]
|
||||
[humidity.core :refer [resolution]]))
|
||||
[humidity.core :refer [resolution validate]]))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;
|
||||
|
|
@ -40,3 +40,32 @@
|
|||
packet {:relative-humidity 100 :temperature-celsius 35}
|
||||
actual (resolution packet)]
|
||||
(is (= actual expected))))
|
||||
|
||||
(deftest validation-test
|
||||
(testing "validation"
|
||||
(let [expected true
|
||||
actual (validate {:absolute-humidity 3953.618101887827,
|
||||
:actual-vapour-pressure 4765.10094206357,
|
||||
:dew-point-celsius 35.00000000000001,
|
||||
:pressure-millibars 1013.25,
|
||||
:pressure-pascals 101325,
|
||||
:relative-humidity 100,
|
||||
:saturation-vapour-pressure 5622.488734516426,
|
||||
:temperature-celsius 35,
|
||||
:temperature-kelvin 308.15,
|
||||
:volume 1.1281347245103424,
|
||||
:wet-bulb-temperature-celsius 35.11625928298915})]
|
||||
(is (= actual expected)))
|
||||
(let [expected false
|
||||
actual (validate {:absolute-humidity 3953.618101887827,
|
||||
:actual-vapour-pressure 4765.10094206357,
|
||||
:dew-point-celsius 35.00000000000001,
|
||||
:pressure-millibars 1013.25,
|
||||
:pressure-pascals 101325,
|
||||
:relative-humidity 95, ;; <-- deliberately wrong
|
||||
:saturation-vapour-pressure 5622.488734516426,
|
||||
:temperature-celsius 35,
|
||||
:temperature-kelvin 308.15,
|
||||
:volume 1.1281347245103424,
|
||||
:wet-bulb-temperature-celsius 35.11625928298915})]
|
||||
(is (= actual expected)))))
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
(ns humidity.dew-point-test
|
||||
(:require [clojure.test :refer [deftest is testing]]
|
||||
[humidity.constants :refer [celsius-offset]]
|
||||
[humidity.dew-point-celsius :refer [dew-point-celsius-fn]]))
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
(ns humidity.relative-test
|
||||
(:require [clojure.test :refer [deftest is testing]]
|
||||
[humidity.constants :refer [celsius-offset]]
|
||||
[humidity.relative-humidity :refer [relative-humidity-fn relative-humidity-fn]]))
|
||||
[humidity.relative-humidity :refer [relative-humidity-fn]]))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue