Elektra
0.8.19
|
Compares a key value to a mathematical expression using polish prefix notation defined in the check/math
metakey. Operations are + - / *
. 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 <, <=, ==, !=, =>, >, :=
:=
is used to set key values. All values are interpreted as double
floating point values.
Keynames are all either relative to to-be-tested key (starting with ./
or ../
), relative to the parentkey (starting with @/
) or absolute (e.g. system/key
).
check/math = "== + ../testval1 + ../testval2 ../testval3"
compares the keyvalue to the sum of testval1-3 and yields an error if the values are not equal. check/math = "\<= - \@/testval1 * \@/testval2 \@/testval3"
tests if the keyvalue is less than or equal to testval1 - (testval2 * testval3) and yields an error if not.
Full example: ```
kdb mount mathcheck.dump /examples/mathcheck dump mathcheck kdb set /examples/mathcheck/a 3.1 kdb set /examples/mathcheck/b 4.5 kdb set /examples/mathcheck/k 7.6 kdb setmeta user/examples/mathcheck/k check/math "== + ../a ../b"
kdb set /examples/mathcheck/k 7.7
kdb rm -r /examples/mathcheck kdb umount /examples/mathcheck ``` To calculate values on-demand you can use: ```
kdb mount mathcheck.dump /examples/mathcheck dump mathcheck kdb setmeta user/examples/mathcheck/k check/math ":= + @/a @/b" kdb set /examples/mathcheck/a 8.0 kdb set /examples/mathcheck/b 4.5 kdb get /examples/mathcheck/k 12.5 kdb set /examples/mathcheck/a 5.5 kdb get /examples/mathcheck/k 10 kdb rm -r /examples/mathcheck kdb umount /examples/mathcheck ``` It also works with constants: ```
kdb mount mathcheck.dump /examples/mathcheck dump mathcheck kdb setmeta user/examples/mathcheck/k check/math ":= + ../a '5'" kdb set /examples/mathcheck/a 5.5 kdb get /examples/mathcheck/k 10.5 kdb set /examples/mathcheck/a 8.0 kdb get /examples/mathcheck/k 13 kdb rm -r /examples/mathcheck kdb umount /examples/mathcheck ```