
\begin{DoxyItemize}
\item infos = Information about the mathcheck plugin is in keys below
\item infos/author = Thomas Waser \href{mailto:thomas.waser@libelektra.org}{\tt thomas.\+waser@libelektra.\+org}
\item infos/licence = B\+SD
\item infos/provides = check
\item infos/needs =
\item infos/placements = presetstorage
\item infos/status = maintained unittest shelltest nodep discouraged
\item infos/metadata = check/math
\item infos/description = validates a set of keys through a mathematical expression
\end{DoxyItemize}

Compares a key value to a mathematical expression using polish prefix notation defined in the {\ttfamily check/math} metakey. Operations are {\ttfamily + -\/ / $\ast$} . Operants are keys with names relative to the parent key. How the values are compared is specified at the beginning of the metakey using the conditions {\ttfamily $<$, $<$=, ==, !=, =$>$, $>$, \+:=} {\ttfamily \+:=} is used to set key values. All values are interpreted as {\ttfamily double} floating point values.

Keynames are all either relative to to-\/be-\/tested key (starting with {\ttfamily ./} or {\ttfamily ../}), relative to the parentkey (starting with {\ttfamily @/}) or absolute (e.\+g. {\ttfamily system/key}).

{\ttfamily check/math = \char`\"{}== + ../testval1 + ../testval2 ../testval3\char`\"{}} compares the keyvalue to the sum of testval1-\/3 and yields an error if the values are not equal. {\ttfamily check/math = \char`\"{}$<$= -\/ @/testval1 $\ast$ @/testval2 @/testval3\char`\"{}} tests if the keyvalue is less than or equal to {\ttfamily testval1 -\/ (testval2 $\ast$ testval3)} and yields an error if not.

Full example\+:


\begin{DoxyCode}
# Backup-and-Restore:user/tests/mathcheck

sudo kdb mount mathcheck.dump user/tests/mathcheck mathcheck

kdb set user/tests/mathcheck/a 3.1
kdb set user/tests/mathcheck/b 4.5
kdb set user/tests/mathcheck/k 7.6
kdb setmeta user/tests/mathcheck/k check/math "== + ../a ../b"

# should fail
kdb set user/tests/mathcheck/k 7.7
# RET:5
# ERROR:C03200
# Set string to "7.7"
# Sorry, module mathcheck issued the error C03200:
# invalid value: 7.7 != 7.6
\end{DoxyCode}


To calculate values on-\/demand you can use\+:


\begin{DoxyCode}
kdb setmeta user/tests/mathcheck/k check/math ":= + @/a @/b"
kdb set user/tests/mathcheck/a 8.0
kdb set user/tests/mathcheck/b 4.5

kdb get user/tests/mathcheck/k
#> 12.5

kdb set user/tests/mathcheck/a 5.5

kdb get user/tests/mathcheck/k
#> 10
\end{DoxyCode}


It also works with constants\+:


\begin{DoxyCode}
kdb setmeta user/tests/mathcheck/k check/math ":= + ../a '5'"
kdb set user/tests/mathcheck/a 5.5

kdb get user/tests/mathcheck/k
#> 10.5

kdb set user/tests/mathcheck/a 8.0

kdb get user/tests/mathcheck/k
#> 13

#cleanup
kdb rm -r user/tests/mathcheck
sudo kdb umount user/tests/mathcheck
\end{DoxyCode}
 