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
|
relative-humidity saturation-vapour-pressure temperature
|
||||||
temperature-celsius temperature-kelvin volume
|
temperature-celsius temperature-kelvin volume
|
||||||
wet-bulb-temperature-celsius] :as packet}]
|
wet-bulb-temperature-celsius] :as packet}]
|
||||||
(println packet)
|
|
||||||
(if temperature (resolve-humidity
|
(if temperature (resolve-humidity
|
||||||
(assoc (dissoc packet :temperature)
|
(assoc (dissoc packet :temperature)
|
||||||
:temperature-celsius temperature))
|
:temperature-celsius temperature))
|
||||||
|
|
@ -61,7 +60,8 @@
|
||||||
(relative-humidity-fn packet))
|
(relative-humidity-fn packet))
|
||||||
:saturation-vapour-pressure (when-not saturation-vapour-pressure
|
:saturation-vapour-pressure (when-not saturation-vapour-pressure
|
||||||
(saturation-vapour-pressure-fn packet))
|
(saturation-vapour-pressure-fn packet))
|
||||||
:temperature-celsius (when
|
:temperature-celsius (cond
|
||||||
|
temperature temperature
|
||||||
(and temperature-kelvin
|
(and temperature-kelvin
|
||||||
(not temperature-celsius))
|
(not temperature-celsius))
|
||||||
(- temperature-kelvin celsius-offset))
|
(- temperature-kelvin celsius-offset))
|
||||||
|
|
@ -81,3 +81,45 @@
|
||||||
(let [p' (resolve-humidity p)]
|
(let [p' (resolve-humidity p)]
|
||||||
(if (= (keys p) (keys p')) p
|
(if (= (keys p) (keys p')) p
|
||||||
(recur 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
|
(ns humidity.core-test
|
||||||
(:require
|
(:require
|
||||||
[clojure.test :refer [deftest is testing]]
|
[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}
|
packet {:relative-humidity 100 :temperature-celsius 35}
|
||||||
actual (resolution packet)]
|
actual (resolution packet)]
|
||||||
(is (= actual expected))))
|
(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
|
(ns humidity.dew-point-test
|
||||||
(:require [clojure.test :refer [deftest is testing]]
|
(:require [clojure.test :refer [deftest is testing]]
|
||||||
[humidity.constants :refer [celsius-offset]]
|
|
||||||
[humidity.dew-point-celsius :refer [dew-point-celsius-fn]]))
|
[humidity.dew-point-celsius :refer [dew-point-celsius-fn]]))
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;
|
;;;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
(ns humidity.relative-test
|
(ns humidity.relative-test
|
||||||
(:require [clojure.test :refer [deftest is testing]]
|
(:require [clojure.test :refer [deftest is testing]]
|
||||||
[humidity.constants :refer [celsius-offset]]
|
[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