| 2960 | |
| 2961 | template <typename T> |
| 2962 | bool run_test03() |
| 2963 | { |
| 2964 | typedef exprtk::symbol_table<T> symbol_table_t; |
| 2965 | typedef exprtk::expression<T> expression_t; |
| 2966 | typedef exprtk::parser<T> parser_t; |
| 2967 | |
| 2968 | const std::string expression_string = |
| 2969 | "A+A0+aA+Aa0+b+B1+Bb+bB1+A+A0+AA+AA0+B+B1+BB+BB1+a+a0+aa+aa0+b+b1+bb+bb1+" |
| 2970 | "c+C2+Cc+Cc2+D+D3+dD+dD3+C+C2+CC+CC2+D+D3+DD+DD3+c+c2+cc+cc2+d+d3+dd+dd3+" |
| 2971 | "E+E4+eE+Ee4+f+F5+Ff+fF5+E+E4+EE+EE4+F+F5+FF+FF5+e+e4+ee+ee4+f+f5+ff+ff5+" |
| 2972 | "g+G6+Gg+Gg6+H+H7+hH+hH7+G+G6+GG+GG6+H+H7+HH+HH7+g+g6+gg+gg6+h+h7+hh+hh7+" |
| 2973 | "I+I8+iI+Ii8+j+J9+Jj+jJ9+I+I8+II+II8+J+J9+JJ+JJ9+i+i8+ii+ii8+j+j9+jj+jj9+" |
| 2974 | "k+K0+Kk+Kk0+L+L1+lL+lL1+K+K0+KK+KK0+L+L1+LL+LL1+k+k0+kk+kk0+l+l1+ll+ll1+" |
| 2975 | "M+M2+mM+Mm2+n+N3+Nn+nN3+M+M2+MM+MM2+N+N3+NN+NN3+m+m2+mm+mm2+n+n3+nn+nn3+" |
| 2976 | "o+O4+Oo+Oo4+P+P5+pP+pP5+O+O4+OO+OO4+P+P5+PP+PP5+o+o4+oo+oo4+p+p5+pp+pp5+" |
| 2977 | "Q+Q6+qQ+Qq6+r+R7+Rr+rR7+Q+Q6+QQ+QQ6+R+R7+RR+RR7+q+q6+qq+qq6+r+r7+rr+rr7+" |
| 2978 | "s+S8+Ss+Ss8+T+T9+tT+tT9+S+S8+SS+SS8+T+T9+TT+TT9+s+s8+ss+ss8+t+t9+tt+tt9+" |
| 2979 | "U+U0+uU+Uu0+v+V1+Vv+vV1+U+U0+UU+UU0+V+V1+VV+VV1+u+u0+uu+uu0+v+v1+vv+vv1+" |
| 2980 | "w+W2+Ww+Ww2+X+X3+xX+xX3+W+W2+WW+WW2+X+X3+XX+XX3+w+w2+ww+ww2+x+x3+xx+xx3+" |
| 2981 | "Y+Y4+yY+Yy4+z+Z5+Zz+zZ5+Y+Y4+YY+YY4+Z+Z5+ZZ+ZZ5+y+y4+yy+yy4+z+z5+zz+zz5 "; |
| 2982 | |
| 2983 | static const std::string variable_list[] = |
| 2984 | { |
| 2985 | "A", "A0", "aA", "Aa0", "b", "B1", "Bb", "bB1", |
| 2986 | "c", "C2", "Cc", "Cc2", "D", "D3", "dD", "dD3", |
| 2987 | "E", "E4", "eE", "Ee4", "f", "F5", "Ff", "fF5", |
| 2988 | "g", "G6", "Gg", "Gg6", "H", "H7", "hH", "hH7", |
| 2989 | "I", "I8", "iI", "Ii8", "j", "J9", "Jj", "jJ9", |
| 2990 | "k", "K0", "Kk", "Kk0", "L", "L1", "lL", "lL1", |
| 2991 | "M", "M2", "mM", "Mm2", "n", "N3", "Nn", "nN3", |
| 2992 | "o", "O4", "Oo", "Oo4", "P", "P5", "pP", "pP5", |
| 2993 | "Q", "Q6", "qQ", "Qq6", "r", "R7", "Rr", "rR7", |
| 2994 | "s", "S8", "Ss", "Ss8", "T", "T9", "tT", "tT9", |
| 2995 | "U", "U0", "uU", "Uu0", "v", "V1", "Vv", "vV1", |
| 2996 | "w", "W2", "Ww", "Ww2", "X", "X3", "xX", "xX3", |
| 2997 | "Y", "Y4", "yY", "Yy4", "z", "Z5", "Zz", "zZ5" |
| 2998 | }; |
| 2999 | |
| 3000 | static const std::size_t variable_list_size = sizeof(variable_list) / sizeof(std::string); |
| 3001 | |
| 3002 | static const std::size_t rounds = 300; |
| 3003 | |
| 3004 | for (std::size_t r = 0; r < rounds; ++r) |
| 3005 | { |
| 3006 | symbol_table_t symbol_table_0; |
| 3007 | symbol_table_t symbol_table_1; |
| 3008 | expression_t expression; |
| 3009 | |
| 3010 | std::vector<T> v; |
| 3011 | v.resize(variable_list_size); |
| 3012 | |
| 3013 | for (std::size_t i = 0; i < variable_list_size; ++i) |
| 3014 | { |
| 3015 | v[i] = T(i); |
| 3016 | if (i & 1) |
| 3017 | symbol_table_0.add_variable(variable_list[i],v[i]); |
| 3018 | else |
| 3019 | symbol_table_1.add_variable(variable_list[i],v[i]); |