C++ Mathematical Expression Library (ExprTk) https://www.partow.net/programming/exprtk/index.html
This commit is contained in:
parent
93a9f44f99
commit
772884eb09
|
@ -6,6 +6,7 @@ jobs:
|
|||
- image: gcc:6
|
||||
steps:
|
||||
- checkout
|
||||
- run: c++ --version
|
||||
- run: make all -j 2
|
||||
- run: ./exprtk_test
|
||||
|
||||
|
@ -14,6 +15,7 @@ jobs:
|
|||
- image: gcc:7
|
||||
steps:
|
||||
- checkout
|
||||
- run: c++ --version
|
||||
- run: make all -j 2
|
||||
- run: ./exprtk_test
|
||||
|
||||
|
@ -22,6 +24,7 @@ jobs:
|
|||
- image: gcc:latest
|
||||
steps:
|
||||
- checkout
|
||||
- run: c++ --version
|
||||
- run: make all -j 2
|
||||
- run: ./exprtk_test
|
||||
|
||||
|
|
2
Makefile
2
Makefile
|
@ -2,7 +2,7 @@
|
|||
# **************************************************************
|
||||
# * C++ Mathematical Expression Toolkit Library *
|
||||
# * *
|
||||
# * Author: Arash Partow (1999-2020) *
|
||||
# * Author: Arash Partow (1999-2021) *
|
||||
# * URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
# * *
|
||||
# * Copyright notice: *
|
||||
|
|
2571
exprtk.hpp
2571
exprtk.hpp
File diff suppressed because it is too large
Load Diff
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* ExprTk vs Native Benchmarks *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -8094,3 +8094,213 @@ equal(~{var xx[10^5] := [-3]; var yy[10^5] := [-4]; xx := abs((xx + 1) + (yy + 1
|
|||
equal(~{var xx[10^5] := [-3]; var yy[10^5] := [-4]; xx := abs((1 + xx) + (1 + yy)) * 2; sum(xx) == 10^6},true)
|
||||
equal(~{var xx[10^5] := [-3]; var yy[10^5] := [-4]; xx := abs((xx + 1) + (1 + yy)) * 2; sum(xx) == 10^6},true)
|
||||
equal(~{var xx[10^5] := [-3]; var yy[10^5] := [-4]; xx := abs((1 + xx) + (yy + 1)) * 2; sum(xx) == 10^6},true)
|
||||
equal('abcd' like 'abcd*' ,true )
|
||||
equal('abcd' like 'abc*' ,true )
|
||||
equal('abcd' like 'ab*' ,true )
|
||||
equal('abcd' like 'a*' ,true )
|
||||
equal('abcd' like 'abcd?' ,true )
|
||||
equal('abcd' like 'abc?' ,true )
|
||||
equal('abcd' like 'abc??' ,true )
|
||||
equal('abcd' like 'ab???' ,true )
|
||||
equal('abcd' like 'a????' ,true )
|
||||
equal('abcd' like '?????' ,true )
|
||||
equal('a' like 'a*' ,true )
|
||||
equal('ab' like 'a*' ,true )
|
||||
equal('abcd' like 'abcd*' ,true )
|
||||
equal('' like '' ,true )
|
||||
equal('abcd' like 'abcd' ,true )
|
||||
equal('abcd' like 'abc*' ,true )
|
||||
equal('abcd' like '*bcd' ,true )
|
||||
equal('abcd' like 'abc?' ,true )
|
||||
equal('abcd' like '?bcd' ,true )
|
||||
equal('abcd' like 'ab?d' ,true )
|
||||
equal('abcd' like 'ab*d' ,true )
|
||||
equal('abcd' like 'a?cd' ,true )
|
||||
equal('abcd' like 'a*cd' ,true )
|
||||
equal('abcd' like 'a??d' ,true )
|
||||
equal('abcd' like 'a*?d' ,true )
|
||||
equal('abcd' like '*bc*' ,true )
|
||||
equal('abcd' like '?bc?' ,true )
|
||||
equal('abcd' like '????' ,true )
|
||||
equal('abcd' like 'a???' ,true )
|
||||
equal('abcd' like 'ab??' ,true )
|
||||
equal('abcd' like 'abc?' ,true )
|
||||
equal('abcd' like '???d' ,true )
|
||||
equal('abcd' like '??cd' ,true )
|
||||
equal('abcd' like '?bcd' ,true )
|
||||
equal('abcd' like '?b?d' ,true )
|
||||
equal('abcd' like 'a?c?' ,true )
|
||||
equal('abcd' like 'a??d' ,true )
|
||||
equal('abcd' like '?bc?' ,true )
|
||||
equal('abcd' like 'ab**' ,true )
|
||||
equal('abcd' like 'ab*?' ,true )
|
||||
equal('abcd' like 'a***' ,true )
|
||||
equal('abcd' like '**cd' ,true )
|
||||
equal('abcd' like '*?cd' ,true )
|
||||
equal('abcd' like '***d' ,true )
|
||||
equal('abcd' like '?*?d' ,true )
|
||||
equal('abcd' like '?*?d' ,true )
|
||||
equal('abcd' like '*bc*' ,true )
|
||||
equal('abcd' like '*bc?' ,true )
|
||||
equal('abcd' like '*b??' ,true )
|
||||
equal('abcd' like '?bc*' ,true )
|
||||
equal('abcd' like '??c*' ,true )
|
||||
equal('abcd' like '*b?*' ,true )
|
||||
equal('abcd' like '*b*d' ,true )
|
||||
equal('abcd' like 'a*c*' ,true )
|
||||
equal('abcd' like '?*cd' ,true )
|
||||
equal('abcd' like 'ab?*' ,true )
|
||||
equal('abcd' like 'ab*?' ,true )
|
||||
equal('abcd' like 'a?*d' ,true )
|
||||
equal('ab' like 'a*' ,true )
|
||||
equal('ab' like 'a?' ,true )
|
||||
equal('a' like 'a*' ,true )
|
||||
equal('a' like 'a?' ,true )
|
||||
equal('xalabcd' like '*abcd*' ,true )
|
||||
equal('xablabcd' like '*abcd*' ,true )
|
||||
equal('xabclabcd' like '*abcd*' ,true )
|
||||
equal('aaaaa' like '*aa?' ,true )
|
||||
equal('abcd' like 'xyzw' ,false)
|
||||
equal('abcd' like 'xyz' ,false)
|
||||
equal('abc' like 'xyzw' ,false)
|
||||
equal('abcd' like 'ab?' ,false)
|
||||
equal('abcd' like 'a?' ,false)
|
||||
equal('abcd' ilike 'abcd*' ,true )
|
||||
equal('abcd' ilike 'abc*' ,true )
|
||||
equal('abcd' ilike 'ab*' ,true )
|
||||
equal('abcd' ilike 'a*' ,true )
|
||||
equal('abcd' ilike 'abcd?' ,true )
|
||||
equal('abcd' ilike 'abc?' ,true )
|
||||
equal('abcd' ilike 'abc??' ,true )
|
||||
equal('abcd' ilike 'ab???' ,true )
|
||||
equal('abcd' ilike 'a????' ,true )
|
||||
equal('abcd' ilike '?????' ,true )
|
||||
equal('a' ilike 'a*' ,true )
|
||||
equal('ab' ilike 'a*' ,true )
|
||||
equal('abcd' ilike 'abcd*' ,true )
|
||||
equal('' ilike '' ,true )
|
||||
equal('abcd' ilike 'abcd' ,true )
|
||||
equal('abcd' ilike 'abc*' ,true )
|
||||
equal('abcd' ilike '*bcd' ,true )
|
||||
equal('abcd' ilike 'abc?' ,true )
|
||||
equal('abcd' ilike '?bcd' ,true )
|
||||
equal('abcd' ilike 'ab?d' ,true )
|
||||
equal('abcd' ilike 'ab*d' ,true )
|
||||
equal('abcd' ilike 'a?cd' ,true )
|
||||
equal('abcd' ilike 'a*cd' ,true )
|
||||
equal('abcd' ilike 'a??d' ,true )
|
||||
equal('abcd' ilike 'a*?d' ,true )
|
||||
equal('abcd' ilike '*bc*' ,true )
|
||||
equal('abcd' ilike '?bc?' ,true )
|
||||
equal('abcd' ilike '????' ,true )
|
||||
equal('abcd' ilike 'a???' ,true )
|
||||
equal('abcd' ilike 'ab??' ,true )
|
||||
equal('abcd' ilike 'abc?' ,true )
|
||||
equal('abcd' ilike '???d' ,true )
|
||||
equal('abcd' ilike '??cd' ,true )
|
||||
equal('abcd' ilike '?bcd' ,true )
|
||||
equal('abcd' ilike '?b?d' ,true )
|
||||
equal('abcd' ilike 'a?c?' ,true )
|
||||
equal('abcd' ilike 'a??d' ,true )
|
||||
equal('abcd' ilike '?bc?' ,true )
|
||||
equal('abcd' ilike 'ab**' ,true )
|
||||
equal('abcd' ilike 'ab*?' ,true )
|
||||
equal('abcd' ilike 'a***' ,true )
|
||||
equal('abcd' ilike '**cd' ,true )
|
||||
equal('abcd' ilike '*?cd' ,true )
|
||||
equal('abcd' ilike '***d' ,true )
|
||||
equal('abcd' ilike '?*?d' ,true )
|
||||
equal('abcd' ilike '?*?d' ,true )
|
||||
equal('abcd' ilike '*bc*' ,true )
|
||||
equal('abcd' ilike '*bc?' ,true )
|
||||
equal('abcd' ilike '*b??' ,true )
|
||||
equal('abcd' ilike '?bc*' ,true )
|
||||
equal('abcd' ilike '??c*' ,true )
|
||||
equal('abcd' ilike '*b?*' ,true )
|
||||
equal('abcd' ilike '*b*d' ,true )
|
||||
equal('abcd' ilike 'a*c*' ,true )
|
||||
equal('abcd' ilike '?*cd' ,true )
|
||||
equal('abcd' ilike 'ab?*' ,true )
|
||||
equal('abcd' ilike 'ab*?' ,true )
|
||||
equal('abcd' ilike 'a?*d' ,true )
|
||||
equal('ab' ilike 'a*' ,true )
|
||||
equal('ab' ilike 'a?' ,true )
|
||||
equal('a' ilike 'a*' ,true )
|
||||
equal('a' ilike 'a?' ,true )
|
||||
equal('xalabcd' ilike '*abcd*',true )
|
||||
equal('xablabcd' ilike '*abcd*',true )
|
||||
equal('xabclabcd' ilike '*abcd*',true )
|
||||
equal('aaaaa' ilike '*aa?' ,true )
|
||||
equal('abcd' ilike 'xyzw' ,false)
|
||||
equal('abcd' ilike 'xyz' ,false)
|
||||
equal('abc' ilike 'xyzw' ,false)
|
||||
equal('abcd' ilike 'ab?' ,false)
|
||||
equal('abcd' ilike 'a?' ,false)
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; if (n < m) 'n < m'; else 'n >= m'; }; (s == 'n < m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; if (n > m) 'n <= m'; else 'n > m'; }; (s == 'n > m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; if (n < m) 'n < m'; else 'n >' + '= m'; }; (s == 'n < m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; if (n < m) 'n ' + '< m'; else 'n >= m'; }; (s == 'n < m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; if (n > m) 'n <= m'; else 'n ' + '> m'; }; (s == 'n > m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; if (n > m) 'n <' + '= m'; else 'n > m'; }; (s == 'n > m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; var r0 := 'n < m'; var r1 := 'n >= m'; if (n < m) r0; else r1; }; (s == 'n < m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; var r0 := 'n < m'; var r1 := 'n >= m'; if (n < m) r0 + ''; else r1 + ''; }; (s == 'n < m')})
|
||||
equal(true, ~{var s := ~{var n := 1; var m := 2; var r0 := 'n < m'; var r1 := 'n >= m'; if (n < m) '' + r0; else '' + r1; }; (s == 'n < m')})
|
||||
equal(111,~{var n:=1; switch { case n > 0: 111; default: 222; }})
|
||||
equal(222,~{var n:=0; switch { case n > 0: 111; default: 222; }})
|
||||
equal(111,~{var n:=0; switch { case true : 111; default: 222; }})
|
||||
equal(222,~{var n:=0; switch { case false: 111; default: 222; }})
|
||||
equal(111,~{var n:=1; switch { default: 222; case n > 0: 111; }})
|
||||
equal(222,~{var n:=0; switch { default: 222; case n > 0: 111; }})
|
||||
equal(111,~{var n:=0; switch { default: 222; case true : 111; }})
|
||||
equal(222,~{var n:=0; switch { default: 222; case false: 111; }})
|
||||
equal(111,~{var n:=1; switch { case n == 1: 111; case n == 2: 222; default: 333; }})
|
||||
equal(111,~{var n:=1; switch { case n == 1: 111; default: 333; case n == 2: 222; }})
|
||||
equal(111,~{var n:=1; switch { default: 333; case n == 1: 111; case n == 2: 222; }})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0, v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0, v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; if (x_ < y_, v0, v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; if (x_ > y_, v0, v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; if (x_ < y_, v0 - v1, v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; if (x_ > y_, v0 - v1, v1 - v0) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0, v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0, v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; if (x_ < y_, v0, v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; if (x_ > y_, v0, v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; if (x_ < y_, v0 - v1, v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; if (x_ > y_, v0 - v1, v1 - v0) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0; else v1;) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0; else v1;) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; (if (x_ < y_) v0; else v1;) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; (if (x_ > y_) v0; else v1;) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; (if (x_ < y_) v0 - v1; else v1 - v0;) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; (if (x_ > y_) v0 - v1; else v1 - v0;) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0; else v1;) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0; else v1;) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; (if (x_ < y_) v0; else v1;) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; (if (x_ > y_) v0; else v1;) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; (if (x_ < y_) v0 - v1; else v1 - v0;) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; (if (x_ > y_) v0 - v1; else v1 - v0;) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; ((1 < 2) ? v0 : v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; ((1 > 2) ? v0 : v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; ((1 < 2) ? v0 - v1 : v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; ((1 > 2) ? v0 - v1 : v1 - v0) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; ((x_ < y_) ? v0 : v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; ((x_ > y_) ? v0 : v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; ((x_ < y_) ? v0 - v1 : v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x_ := 1; var y_ := 2; ((x_ > y_) ? v0 - v1 : v1 - v0) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; ((1 < 2) ? v0 : v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; ((1 > 2) ? v0 : v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; ((1 < 2) ? v0 - v1 : v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; ((1 > 2) ? v0 - v1 : v1 - v0) == (v1 - v0)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; ((x_ < y_) ? v0 : v1) == v0})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; ((x_ > y_) ? v0 : v1) == v1})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; ((x_ < y_) ? v0 - v1 : v1 - v0) == (v0 - v1)})
|
||||
equal(true,~{var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x_ := 1; var y_ := 2; ((x_ > y_) ? v0 - v1 : v1 - v0) == (v1 - v0)})
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 1 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 2 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 3 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 4 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 5 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 6 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 7 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 8 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
@ -28,7 +28,7 @@ void composite()
|
|||
typedef exprtk::symbol_table<T> symbol_table_t;
|
||||
typedef exprtk::expression<T> expression_t;
|
||||
typedef exprtk::parser<T> parser_t;
|
||||
typedef exprtk::parser_error::type err_t;
|
||||
typedef exprtk::parser_error::type error_t;
|
||||
typedef exprtk::function_compositor<T> compositor_t;
|
||||
typedef typename compositor_t::function function_t;
|
||||
|
||||
|
@ -65,7 +65,7 @@ void composite()
|
|||
|
||||
for (std::size_t i = 0; i < parser.error_count(); ++i)
|
||||
{
|
||||
const err_t error = parser.get_error(i);
|
||||
const error_t error = parser.get_error(i);
|
||||
|
||||
printf("Error: %02d Position: %02d Type: [%14s] Msg: %s\tExpression: %s\n",
|
||||
static_cast<unsigned int>(i),
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 9 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 10 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 11 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 12 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 13 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
@ -69,7 +69,7 @@ void savitzky_golay_filter()
|
|||
// Generate a signal with noise.
|
||||
for (T t = T(-5); t <= T(+5); t += T(10.0 / n))
|
||||
{
|
||||
T noise = T(0.5 * (rand() / (RAND_MAX + 1.0) - 0.5));
|
||||
const T noise = T(0.5 * (rand() / (RAND_MAX + 1.0) - 0.5));
|
||||
v_in.push_back(sin(2.0 * pi * t) + noise);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 14 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 15 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
@ -67,7 +67,7 @@ void black_scholes_merton_model()
|
|||
{
|
||||
callput_flag = "call";
|
||||
|
||||
T bsm = expression.value();
|
||||
const T bsm = expression.value();
|
||||
|
||||
printf("BSM(%s,%5.3f,%5.3f,%5.3f,%5.3f,%5.3f) = %10.6f\n",
|
||||
callput_flag.c_str(),
|
||||
|
@ -78,7 +78,7 @@ void black_scholes_merton_model()
|
|||
{
|
||||
callput_flag = "put";
|
||||
|
||||
T bsm = expression.value();
|
||||
const T bsm = expression.value();
|
||||
|
||||
printf("BSM(%s,%5.3f,%5.3f,%5.3f,%5.3f,%5.3f) = %10.6f\n",
|
||||
callput_flag.c_str(),
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 16 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 17 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 18 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Simple Example 19 *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
|
479
exprtk_test.cpp
479
exprtk_test.cpp
|
@ -3,7 +3,7 @@
|
|||
* C++ Mathematical Expression Toolkit Library *
|
||||
* *
|
||||
* Examples and Unit-Tests *
|
||||
* Author: Arash Partow (1999-2020) *
|
||||
* Author: Arash Partow (1999-2021) *
|
||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||
* *
|
||||
* Copyright notice: *
|
||||
|
@ -358,6 +358,42 @@ static const test_t global_test_list[] =
|
|||
test_t("( 7 - 2 )",+5.0),
|
||||
test_t("( 8 - 1 )",+7.0),
|
||||
test_t("( 9 - 0 )",+9.0),
|
||||
test_t("1 - -1" , 2.0),
|
||||
test_t("1 --1" , 2.0),
|
||||
test_t("1-- 1" , 2.0),
|
||||
test_t("1--1" , 2.0),
|
||||
test_t("1 -- -1", 0.0),
|
||||
test_t("1 + -1" , 0.0),
|
||||
test_t("1 +-1" , 0.0),
|
||||
test_t("1+- 1" , 0.0),
|
||||
test_t("1+-1" , 0.0),
|
||||
test_t("1 +- -1", 2.0),
|
||||
test_t("1 + +1" , 2.0),
|
||||
test_t("1 ++1" , 2.0),
|
||||
test_t("1 - -1 + 1" , 3.0),
|
||||
test_t("1 --1 + 1" , 3.0),
|
||||
test_t("1-- 1 + 1" , 3.0),
|
||||
test_t("1--1 + 1" , 3.0),
|
||||
test_t("1 -- -1 + 1", 1.0),
|
||||
test_t("1 + -1 + 1" , 1.0),
|
||||
test_t("1 +-1 + 1" , 1.0),
|
||||
test_t("1+- 1 + 1" , 1.0),
|
||||
test_t("1+-1 + 1" , 1.0),
|
||||
test_t("1 +- -1 + 1", 3.0),
|
||||
test_t("1 + +1 + 1" , 3.0),
|
||||
test_t("1 ++1 + 1" , 3.0),
|
||||
test_t("1 - -1 - 1" , 1.0),
|
||||
test_t("1 --1 - 1" , 1.0),
|
||||
test_t("1-- 1 - 1" , 1.0),
|
||||
test_t("1--1 - 1" , 1.0),
|
||||
test_t("1 -- -1 - 1", -1.0),
|
||||
test_t("1 + -1 - 1" , -1.0),
|
||||
test_t("1 +-1 - 1" , -1.0),
|
||||
test_t("1+- 1 - 1" , -1.0),
|
||||
test_t("1+-1 - 1" , -1.0),
|
||||
test_t("1 +- -1 - 1", 1.0),
|
||||
test_t("1 + +1 - 1" , 1.0),
|
||||
test_t("1 ++1 - 1" , 1.0),
|
||||
test_t("-(1+2)",-3.0),
|
||||
test_t("+(1+2)",+3.0),
|
||||
test_t("+(1-2)",-1.0),
|
||||
|
@ -1162,14 +1198,14 @@ inline bool test_expression(const std::string& expression_string, const T& expec
|
|||
return false;
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (not_equal(result,expected_result))
|
||||
{
|
||||
printf("test_expression() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
expression_string.c_str(),
|
||||
(double)expected_result,
|
||||
(double)result);
|
||||
static_cast<double>(expected_result),
|
||||
static_cast<double>(result));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -1177,6 +1213,43 @@ inline bool test_expression(const std::string& expression_string, const T& expec
|
|||
return true;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
struct edge_cases {};
|
||||
|
||||
template <>
|
||||
struct edge_cases<float>
|
||||
{
|
||||
static inline std::vector<test_t> test_cases()
|
||||
{
|
||||
std::vector<test_t> cases;
|
||||
cases.push_back(test_t(" 1.175494350822287508e-38", 1.175494350822287508e-38));
|
||||
cases.push_back(test_t(" 3.402823466385288598e+38", 3.402823466385288598e+38));
|
||||
cases.push_back(test_t("+1.175494350822287508e-38", +1.175494350822287508e-38));
|
||||
cases.push_back(test_t("+3.402823466385288598e+38", +3.402823466385288598e+38));
|
||||
cases.push_back(test_t("-1.175494350822287508e-38", -1.175494350822287508e-38));
|
||||
cases.push_back(test_t("-3.402823466385288598e+38", -3.402823466385288598e+38));
|
||||
|
||||
return cases;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct edge_cases<double>
|
||||
{
|
||||
static inline std::vector<test_t> test_cases()
|
||||
{
|
||||
std::vector<test_t> cases;
|
||||
cases.push_back(test_t(" 2.2250738585072013831e-308", 2.2250738585072013831e-308));
|
||||
cases.push_back(test_t(" 1.7976931348623157081e+308", 1.7976931348623157081e+308));
|
||||
cases.push_back(test_t("+2.2250738585072013831e-308", +2.2250738585072013831e-308));
|
||||
cases.push_back(test_t("+1.7976931348623157081e+308", +1.7976931348623157081e+308));
|
||||
cases.push_back(test_t("-2.2250738585072013831e-308", -2.2250738585072013831e-308));
|
||||
cases.push_back(test_t("-1.7976931348623157081e+308", -1.7976931348623157081e+308));
|
||||
|
||||
return cases;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
inline bool run_test00()
|
||||
{
|
||||
|
@ -1198,6 +1271,25 @@ inline bool run_test00()
|
|||
}
|
||||
}
|
||||
|
||||
{
|
||||
const std::vector<test_t> tests = edge_cases<T>::test_cases();
|
||||
|
||||
bool result = true;
|
||||
|
||||
for (std::size_t i = 0; i < tests.size(); ++i)
|
||||
{
|
||||
if (!test_expression<T>(tests[i].first,T(tests[i].second)))
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!result)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1260,6 +1352,78 @@ inline bool run_test01()
|
|||
test_xy<T>("x * 2" ,T(2.2),T(0.0),T(4.4)),
|
||||
test_xy<T>("1.1 + x" ,T(2.2),T(0.0),T(3.3)),
|
||||
test_xy<T>("x + 1.1" ,T(2.2),T(0.0),T(3.3)),
|
||||
test_xy<T>("x - -1 " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("x --1 " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("x-- 1 " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("x--1 " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("x -- -1" ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("x + -1 " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("x +-1 " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("x+- 1 " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("x+-1 " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("x +- -1" ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("x + +1 " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("x ++1 " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("1 - -x " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("1 --x " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("1-- x " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("1--x " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("1 -- -x" ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("1 + -x " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("1 +-x " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("1+- x " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("1+-x " ,T(1.0),T(0.0),T(0)),
|
||||
test_xy<T>("1 +- -x" ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("1 + +x " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("1 ++x " ,T(1.0),T(0.0),T(2)),
|
||||
test_xy<T>("(x - -1 + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(x --1 + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(x-- 1 + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(x--1 + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(x -- -1 + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x + -1 + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x +-1 + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x+- 1 + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x+-1 + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x +- -1 + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(x + +1 + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(x ++1 + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(1 - -x + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(1 --x + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(1-- x + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(1--x + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(1 -- -x + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 + -x + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 +-x + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1+- x + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1+-x + 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 +- -x + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(1 + +x + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(1 ++x + 1)" ,T(1.0),T(0.0),T(3)),
|
||||
test_xy<T>("(x - -1 - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x --1 - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x-- 1 - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x--1 - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x -- -1 - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(x + -1 - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(x +-1 - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(x+- 1 - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(x+-1 - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(x +- -1 - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x + +1 - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(x ++1 - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 - -x - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 --x - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1-- x - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1--x - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 -- -x - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(1 + -x - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(1 +-x - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(1+- x - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(1+-x - 1)" ,T(1.0),T(0.0),T(-1)),
|
||||
test_xy<T>("(1 +- -x - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 + +x - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("(1 ++x - 1)" ,T(1.0),T(0.0),T(1)),
|
||||
test_xy<T>("x * 1 == x" ,T(2.0),T(3.0),T(1.0)),
|
||||
test_xy<T>("1 * x == x" ,T(2.0),T(3.0),T(1.0)),
|
||||
test_xy<T>("y * 1 == y" ,T(2.0),T(3.0),T(1.0)),
|
||||
|
@ -1646,14 +1810,14 @@ inline bool run_test01()
|
|||
}
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (not_equal(result,test.result))
|
||||
{
|
||||
printf("run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
test.expr.c_str(),
|
||||
(double)test.result,
|
||||
(double)result);
|
||||
static_cast<double>(test.result),
|
||||
static_cast<double>(result));
|
||||
|
||||
loop_result = false;
|
||||
}
|
||||
|
@ -1758,14 +1922,14 @@ inline bool run_test01()
|
|||
}
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (not_equal(result,test.result))
|
||||
{
|
||||
printf("run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
test.expr.c_str(),
|
||||
(double)test.result,
|
||||
(double)result);
|
||||
static_cast<double>(test.result),
|
||||
static_cast<double>(result));
|
||||
|
||||
loop_result = false;
|
||||
}
|
||||
|
@ -1841,14 +2005,14 @@ inline bool run_test01()
|
|||
}
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (not_equal(result,T(1)))
|
||||
{
|
||||
printf("run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
expr_list[i].c_str(),
|
||||
(double)1.0,
|
||||
(double)result);
|
||||
static_cast<double>(1.0),
|
||||
static_cast<double>(result));
|
||||
|
||||
loop_result = false;
|
||||
}
|
||||
|
@ -1901,14 +2065,14 @@ inline bool run_test01()
|
|||
}
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (not_equal(result,T(1)))
|
||||
{
|
||||
printf("run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
expr_list[i].c_str(),
|
||||
(double)1.0,
|
||||
(double)result);
|
||||
static_cast<double>(1.0),
|
||||
static_cast<double>(result));
|
||||
loop_result = false;
|
||||
}
|
||||
}
|
||||
|
@ -2422,6 +2586,17 @@ inline bool run_test02()
|
|||
test_ab<T>("var i := 0; a[0:i+3] <=> b[:]; (a == '0123X') and (b == 'XXXX4567890')", "XXXXX","01234567890",T(1.0)),
|
||||
test_ab<T>("var i := 0; a[0:i+4] <=> b[:]; (a == '01234') and (b == 'XXXXX567890')", "XXXXX","01234567890",T(1.0)),
|
||||
|
||||
test_ab<T>("var y:= 2; '01234567890'[y:] == a ", "234567890","" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '01234567890'[y:][y:] == a ", "4567890" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '01234567890'[y:][y:][y:] == a ", "67890" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '01234567890'[y:][y:][y:][y:] == a ", "890" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '01234567890'[y:][y:][y:][y:][y:] == a", "0" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '0123456789'[y:] == a ", "23456789" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '0123456789'[y:][y:] == a ", "456789" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '0123456789'[y:][y:][y:] == a ", "6789" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '0123456789'[y:][y:][y:][y:] == a ", "89" ,"" ,T(1.0)),
|
||||
test_ab<T>("var y:= 2; '0123456789'[y:][y:][y:][y:][y:] == a ", "" ,"" ,T(1.0)),
|
||||
|
||||
test_ab<T>("var x := 'XXXXX'; var y := '01234567890'; x[0:0] := y[:]; x == '0XXXX'", "","",T(1.0)),
|
||||
test_ab<T>("var x := 'XXXXX'; var y := '01234567890'; x[0:1] := y[:]; x == '01XXX'", "","",T(1.0)),
|
||||
test_ab<T>("var x := 'XXXXX'; var y := '01234567890'; x[0:2] := y[:]; x == '012XX'", "","",T(1.0)),
|
||||
|
@ -2598,8 +2773,8 @@ inline bool run_test02()
|
|||
printf("run_test02() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\t"
|
||||
"a='%s'\tb='%s'\tc='%s'\n",
|
||||
test.expr.c_str(),
|
||||
(double)test.result,
|
||||
(double)expr_result,
|
||||
static_cast<double>(test.result),
|
||||
static_cast<double>(expr_result),
|
||||
str_a.c_str(),
|
||||
str_b.c_str(),
|
||||
str_c.c_str());
|
||||
|
@ -3013,10 +3188,10 @@ inline bool run_test04()
|
|||
{
|
||||
printf("run_test04() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f x:%19.15f\ty:%19.15f\n",
|
||||
expression_string.c_str(),
|
||||
(double)result1,
|
||||
(double)result2,
|
||||
(double)x,
|
||||
(double)y);
|
||||
static_cast<double>(result1),
|
||||
static_cast<double>(result2),
|
||||
static_cast<double>(x),
|
||||
static_cast<double>(y));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -3083,10 +3258,10 @@ inline bool run_test05()
|
|||
{
|
||||
printf("run_test05() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f x:%19.15f\ty:%19.15f\tIndex:%d\n",
|
||||
expression_string.c_str(),
|
||||
(double)real_result,
|
||||
(double)result,
|
||||
(double)x,
|
||||
(double)y,
|
||||
static_cast<double>(real_result),
|
||||
static_cast<double>(result),
|
||||
static_cast<double>(x),
|
||||
static_cast<double>(y),
|
||||
static_cast<unsigned int>(i));
|
||||
|
||||
return false;
|
||||
|
@ -3140,8 +3315,8 @@ inline bool run_test06()
|
|||
if (not_equal(total_area1,T(pi) / T(2),T(0.000001)))
|
||||
{
|
||||
printf("run_test06() - Integration Error: Expected: %19.15f\tResult: %19.15f\n",
|
||||
(double)(pi / T(2)),
|
||||
(double)total_area1);
|
||||
static_cast<double>(pi / T(2)),
|
||||
static_cast<double>(total_area1));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -3192,9 +3367,9 @@ inline bool run_test07()
|
|||
if (not_equal(deriv1_result1,deriv1_real_result,T(0.00001)))
|
||||
{
|
||||
printf("run_test07() - 1st Derivative Error: x: %19.15f\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
(double)x,
|
||||
(double)deriv1_real_result,
|
||||
(double)deriv1_result1);
|
||||
static_cast<double>(x),
|
||||
static_cast<double>(deriv1_real_result),
|
||||
static_cast<double>(deriv1_result1));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -3214,9 +3389,9 @@ inline bool run_test07()
|
|||
if (not_equal(deriv2_result1,deriv2_real_result,T(0.01)))
|
||||
{
|
||||
printf("run_test07() - 2nd Derivative Error: x: %19.15f\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
(double)x,
|
||||
(double)deriv2_real_result,
|
||||
(double)deriv2_result1);
|
||||
static_cast<double>(x),
|
||||
static_cast<double>(deriv2_real_result),
|
||||
static_cast<double>(deriv2_result1));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -3236,9 +3411,9 @@ inline bool run_test07()
|
|||
if (not_equal(deriv3_result1,deriv3_real_result,T(0.01)))
|
||||
{
|
||||
printf("run_test07() - 3rd Derivative Error: x: %19.15f\tExpected: %19.15f\tResult: %19.15f\n",
|
||||
(double)x,
|
||||
(double)deriv3_real_result,
|
||||
(double)deriv3_result1);
|
||||
static_cast<double>(x),
|
||||
static_cast<double>(deriv3_real_result),
|
||||
static_cast<double>(deriv3_result1));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -3526,9 +3701,9 @@ inline bool run_test09()
|
|||
|
||||
const T pi = T(3.141592653589793238462643383279502);
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
T expected = T(4) *
|
||||
const T expected = T(4) *
|
||||
(
|
||||
mf(sin(x*pi),y / T(2)) +
|
||||
mf(sin(x*pi),y / T(2)) +
|
||||
|
@ -3545,8 +3720,8 @@ inline bool run_test09()
|
|||
if (not_equal(result,expected,T(0.0000001)))
|
||||
{
|
||||
printf("run_test09() - Error Expected: %19.15f\tResult: %19.15f\n",
|
||||
(double)expected,
|
||||
(double)result);
|
||||
static_cast<double>(expected),
|
||||
static_cast<double>(result));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -4311,6 +4486,78 @@ inline bool run_test10()
|
|||
{
|
||||
"var x; 1",
|
||||
"var x := 1; x",
|
||||
"var x:= 1; x - -1 == 2",
|
||||
"var x:= 1; x --1 == 2",
|
||||
"var x:= 1; x-- 1 == 2",
|
||||
"var x:= 1; x--1 == 2",
|
||||
"var x:= 1; x -- -1== 0",
|
||||
"var x:= 1; x + -1 == 0",
|
||||
"var x:= 1; x +-1 == 0",
|
||||
"var x:= 1; x+- 1 == 0",
|
||||
"var x:= 1; x+-1 == 0",
|
||||
"var x:= 1; x +- -1== 2",
|
||||
"var x:= 1; x + +1 == 2",
|
||||
"var x:= 1; x ++1 == 2",
|
||||
"var x:= 1; 1 - -x == 2",
|
||||
"var x:= 1; 1 --x == 2",
|
||||
"var x:= 1; 1-- x == 2",
|
||||
"var x:= 1; 1--x == 2",
|
||||
"var x:= 1; 1 -- -x== 0",
|
||||
"var x:= 1; 1 + -x == 0",
|
||||
"var x:= 1; 1 +-x == 0",
|
||||
"var x:= 1; 1+- x == 0",
|
||||
"var x:= 1; 1+-x == 0",
|
||||
"var x:= 1; 1 +- -x== 2",
|
||||
"var x:= 1; 1 + +x == 2",
|
||||
"var x:= 1; 1 ++x == 2",
|
||||
"var x:= 1; (x - -1 + 1) == 3",
|
||||
"var x:= 1; (x --1 + 1) == 3",
|
||||
"var x:= 1; (x-- 1 + 1) == 3",
|
||||
"var x:= 1; (x--1 + 1) == 3",
|
||||
"var x:= 1; (x -- -1 + 1) == 1",
|
||||
"var x:= 1; (x + -1 + 1) == 1",
|
||||
"var x:= 1; (x +-1 + 1) == 1",
|
||||
"var x:= 1; (x+- 1 + 1) == 1",
|
||||
"var x:= 1; (x+-1 + 1) == 1",
|
||||
"var x:= 1; (x +- -1 + 1) == 3",
|
||||
"var x:= 1; (x + +1 + 1) == 3",
|
||||
"var x:= 1; (x ++1 + 1) == 3",
|
||||
"var x:= 1; (1 - -x + 1) == 3",
|
||||
"var x:= 1; (1 --x + 1) == 3",
|
||||
"var x:= 1; (1-- x + 1) == 3",
|
||||
"var x:= 1; (1--x + 1) == 3",
|
||||
"var x:= 1; (1 -- -x + 1) == 1",
|
||||
"var x:= 1; (1 + -x + 1) == 1",
|
||||
"var x:= 1; (1 +-x + 1) == 1",
|
||||
"var x:= 1; (1+- x + 1) == 1",
|
||||
"var x:= 1; (1+-x + 1) == 1",
|
||||
"var x:= 1; (1 +- -x + 1) == 3",
|
||||
"var x:= 1; (1 + +x + 1) == 3",
|
||||
"var x:= 1; (1 ++x + 1) == 3",
|
||||
"var x:= 1; (x - -1 - 1) == 1",
|
||||
"var x:= 1; (x --1 - 1) == 1",
|
||||
"var x:= 1; (x-- 1 - 1) == 1",
|
||||
"var x:= 1; (x--1 - 1) == 1",
|
||||
"var x:= 1; (x -- -1 - 1) == -1",
|
||||
"var x:= 1; (x + -1 - 1) == -1",
|
||||
"var x:= 1; (x +-1 - 1) == -1",
|
||||
"var x:= 1; (x+- 1 - 1) == -1",
|
||||
"var x:= 1; (x+-1 - 1) == -1",
|
||||
"var x:= 1; (x +- -1 - 1) == 1",
|
||||
"var x:= 1; (x + +1 - 1) == 1",
|
||||
"var x:= 1; (x ++1 - 1) == 1",
|
||||
"var x:= 1; (1 - -x - 1) == 1",
|
||||
"var x:= 1; (1 --x - 1) == 1",
|
||||
"var x:= 1; (1-- x - 1) == 1",
|
||||
"var x:= 1; (1--x - 1) == 1",
|
||||
"var x:= 1; (1 -- -x - 1) == -1",
|
||||
"var x:= 1; (1 + -x - 1) == -1",
|
||||
"var x:= 1; (1 +-x - 1) == -1",
|
||||
"var x:= 1; (1+- x - 1) == -1",
|
||||
"var x:= 1; (1+-x - 1) == -1",
|
||||
"var x:= 1; (1 +- -x - 1) == 1",
|
||||
"var x:= 1; (1 + +x - 1) == 1",
|
||||
"var x:= 1; (1 ++x - 1) == 1",
|
||||
"var x := 1; var y := 2; 1",
|
||||
"var x := 1; var y := 2; x",
|
||||
"var x:=6; var y:=4; x + -3 == 3",
|
||||
|
@ -4623,7 +4870,43 @@ inline bool run_test10()
|
|||
"var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s ",
|
||||
"var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s ",
|
||||
|
||||
"var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6"
|
||||
"var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6",
|
||||
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0, v1) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0, v1) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0 - v1, v1 - v0) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x > y, v0 - v1, v1 - v0) == (v1 - v0)",
|
||||
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0, v1) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0, v1) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x < y, v0 - v1, v1 - v0) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x > y, v0 - v1, v1 - v0) == (v1 - v0)",
|
||||
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0; else v1;) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0; else v1;) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x < y) v0; else v1;) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x > y) v0; else v1;) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x < y) v0 - v1; else v1 - v0;) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x > y) v0 - v1; else v1 - v0;) == (v1 - v0)",
|
||||
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0; else v1;) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0; else v1;) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x < y) v0; else v1;) == v0",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x > y) v0; else v1;) == v1",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x < y) v0 - v1; else v1 - v0;) == (v0 - v1)",
|
||||
"var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x > y) v0 - v1; else v1 - v0;) == (v1 - v0)",
|
||||
};
|
||||
|
||||
const std::size_t expression_list_size = sizeof(expression_list) / sizeof(std::string);
|
||||
|
@ -4662,7 +4945,7 @@ inline bool run_test10()
|
|||
}
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (T(1) != result)
|
||||
{
|
||||
|
@ -4699,7 +4982,7 @@ inline bool run_test10()
|
|||
continue;
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (T(1) != result)
|
||||
{
|
||||
|
@ -5287,8 +5570,8 @@ inline bool run_test15()
|
|||
if (not_equal(base_result,result))
|
||||
{
|
||||
printf("run_test15() - Error in evaluation! (1) Base: %20.10f\tResult: %20.10f\tExpression: %s\n",
|
||||
(double)base_result,
|
||||
(double)result,
|
||||
static_cast<double>(base_result),
|
||||
static_cast<double>(result),
|
||||
expr_str_list[i].c_str());
|
||||
|
||||
failure = true;
|
||||
|
@ -5917,6 +6200,96 @@ struct overload_func : exprtk::igeneric_function<T>
|
|||
template <typename T>
|
||||
inline bool run_test18()
|
||||
{
|
||||
{
|
||||
exprtk::symbol_table<T> symbol_table;
|
||||
symbol_table.remove_variable("x",true);
|
||||
symbol_table.remove_variable("x",false);
|
||||
symbol_table.remove_stringvar("x");
|
||||
symbol_table.remove_function("x");
|
||||
symbol_table.remove_vararg_function("x");
|
||||
symbol_table.remove_vector("x");
|
||||
}
|
||||
|
||||
{
|
||||
exprtk::symbol_table<T> symbol_table;
|
||||
|
||||
{
|
||||
T x;
|
||||
const bool result1 = symbol_table.add_variable("x", x);
|
||||
const bool result2 = symbol_table.remove_variable("x");
|
||||
const bool result3 = symbol_table.remove_variable("x");
|
||||
|
||||
if (!result1 || !result2 || result3)
|
||||
{
|
||||
printf("run_test18() - Failed sym_tab add/remove [1]\n");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
std::string x;
|
||||
const bool result1 = symbol_table.add_stringvar("x", x);
|
||||
const bool result2 = symbol_table.remove_stringvar("x");
|
||||
const bool result3 = symbol_table.remove_stringvar("x");
|
||||
|
||||
if (!result1 || !result2 || result3)
|
||||
{
|
||||
printf("run_test18() - Failed sym_tab add/remove [2]\n");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<T> x(10,T(0));
|
||||
const bool result1 = symbol_table.add_vector("x", x);
|
||||
const bool result2 = symbol_table.remove_vector("x");
|
||||
const bool result3 = symbol_table.remove_vector("x");
|
||||
|
||||
if (!result1 || !result2 || result3)
|
||||
{
|
||||
printf("run_test18() - Failed sym_tab add/remove [3]\n");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
myfunc<T> x;
|
||||
const bool result1 = symbol_table.add_function("x", x);
|
||||
const bool result2 = symbol_table.remove_function("x");
|
||||
const bool result3 = symbol_table.remove_function("x");
|
||||
|
||||
if (!result1 || !result2 || result3)
|
||||
{
|
||||
printf("run_test18() - Failed sym_tab add/remove [4]\n");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
va_func<T> x;
|
||||
const bool result1 = symbol_table.add_function("x", x);
|
||||
const bool result2 = symbol_table.remove_vararg_function("x");
|
||||
const bool result3 = symbol_table.remove_vararg_function("x");
|
||||
|
||||
if (!result1 || !result2 || result3)
|
||||
{
|
||||
printf("run_test18() - Failed sym_tab add/remove [5]\n");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
symbol_table.add_function("foo1",foo1);
|
||||
symbol_table.add_function("foo2",foo2);
|
||||
symbol_table.add_function("foo3",foo3);
|
||||
symbol_table.add_function("foo4",foo4);
|
||||
symbol_table.add_function("foo5",foo5);
|
||||
symbol_table.add_function("foo6",foo6);
|
||||
|
||||
symbol_table.remove_function("foo1");
|
||||
symbol_table.remove_function("foo2");
|
||||
symbol_table.remove_function("foo3");
|
||||
symbol_table.remove_function("foo4");
|
||||
symbol_table.remove_function("foo5");
|
||||
symbol_table.remove_function("foo6");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
typedef exprtk::expression<T> expression_t;
|
||||
|
||||
|
@ -6448,7 +6821,7 @@ inline bool run_test18()
|
|||
return false;
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (result != T(1))
|
||||
{
|
||||
|
@ -7041,7 +7414,7 @@ inline bool run_test18()
|
|||
continue;
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (result != T(1))
|
||||
{
|
||||
|
@ -7564,7 +7937,7 @@ inline bool run_test19()
|
|||
continue;
|
||||
}
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (result_list[i] != result)
|
||||
{
|
||||
|
@ -8061,15 +8434,15 @@ inline bool run_test19()
|
|||
{
|
||||
x = static_cast<T>(i);
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (not_equal(result,std::sqrt(x),T(0.0000001)))
|
||||
{
|
||||
printf("run_test19() - Computation Error "
|
||||
"Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
|
||||
expression_str.c_str(),
|
||||
(double)std::sqrt(x),
|
||||
(double)result);
|
||||
static_cast<double>(std::sqrt(x)),
|
||||
static_cast<double>(result));
|
||||
|
||||
failure = true;
|
||||
}
|
||||
|
@ -8191,7 +8564,7 @@ inline bool run_test19()
|
|||
|
||||
sum += x;
|
||||
|
||||
T result = expression.value();
|
||||
const T result = expression.value();
|
||||
|
||||
if (result != sum)
|
||||
{
|
||||
|
|
10
readme.txt
10
readme.txt
|
@ -59,7 +59,7 @@ arithmetic operations, functions and processes:
|
|||
|
||||
(05) Functions: abs, avg, ceil, clamp, equal, erf, erfc, exp,
|
||||
expm1, floor, frac, log, log10, log1p, log2,
|
||||
logn, max, min, mul, ncdf, nequal, root,
|
||||
logn, max, min, mul, ncdf, not_equal, root,
|
||||
round, roundn, sgn, sqrt, sum, swap, trunc
|
||||
|
||||
(06) Trigonometry: acos, acosh, asin, asinh, atan, atanh, atan2,
|
||||
|
@ -124,7 +124,7 @@ The most recent version of the C++ Mathematical Expression Toolkit
|
|||
Library including all updates and tests can be found at the following
|
||||
locations:
|
||||
|
||||
(a) Download: http://www.partow.net/programming/exprtk/index.html
|
||||
(a) Download: https://www.partow.net/programming/exprtk/index.html
|
||||
(b) Repository: https://github.com/ArashPartow/exprtk
|
||||
https://github.com/ArashPartow/exprtk-extras
|
||||
|
||||
|
@ -321,7 +321,7 @@ of C++ compilers:
|
|||
+----------+---------------------------------------------------------+
|
||||
| ncdf | Normal cumulative distribution function. (eg: ncdf(x)) |
|
||||
+----------+---------------------------------------------------------+
|
||||
| nequal | Not-equal test between x and y using normalised epsilon |
|
||||
| not_equal| Not-equal test between x and y using normalised epsilon |
|
||||
+----------+---------------------------------------------------------+
|
||||
| pow | x to the power of y. (eg: pow(x,y) == x ^ y) |
|
||||
+----------+---------------------------------------------------------+
|
||||
|
@ -1342,7 +1342,7 @@ noted:
|
|||
|
||||
|
||||
Note: In example 6 from the above set, it is assumed the user defined
|
||||
function foo has been registered as having a side_effect. By default
|
||||
function foo has been registered as having a side-effect. By default
|
||||
all user defined functions are assumed to have side-effects, unless
|
||||
they are configured in their constructors to not have side-effects
|
||||
using the 'disable_has_side_effects' free function. For more
|
||||
|
@ -4310,7 +4310,7 @@ into account when using ExprTk:
|
|||
of that symbol-table, otherwise the result will be undefined
|
||||
behavior.
|
||||
|
||||
(10) Equal and Nequal are normalised-epsilon equality routines,
|
||||
(10) Equal and not_equal are normalised-epsilon equality routines,
|
||||
which use epsilons of 0.0000000001 and 0.000001 for double and
|
||||
float types respectively.
|
||||
|
||||
|
|
Loading…
Reference in New Issue