00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00031 
00032 #define sym_compare_assert(V1, OP, V2)          \
00033                                                 \
00034     mln_assertion(V1 OP V2);                    \
00035     mln_assertion(-V1 OP -V2);                  \
00036     mln_assertion(V2 OP V1);                    \
00037     mln_assertion(-V2 OP -V1);
00038 
00039 #define asym_compare_assert(V1, OP, V2)         \
00040                                                 \
00041     mln_assertion(V1 OP V2);                    \
00042     mln_assertion(!(-V1 OP -V2));               \
00043     mln_assertion(-V2 OP -V1);                  \
00044     mln_assertion(!(V2 OP V1));
00045 
00046 
00047 #define test_interop(T1, T2, OP, V1, V2)                \
00048                                                         \
00049 {                                                       \
00050     T1 i = V1;                                          \
00051     T2 j = V2;                                          \
00052                                                         \
00053     i = i OP j;                                         \
00054     sym_compare_assert(i, ==, float(V1 OP V2));         \
00055     sym_compare_assert(j, ==, float(V2));               \
00056                                                         \
00057     i = V1;                                             \
00058     j = V2;                                             \
00059                                                         \
00060     j = i OP j;                                         \
00061     sym_compare_assert(j, ==, float(V1 OP V2));         \
00062     sym_compare_assert(i, ==, float(V1));               \
00063                                                         \
00064     i = V1;                                             \
00065     i OP##= i;                                          \
00066     sym_compare_assert(i, ==, float(V1 OP V1));         \
00067                                                         \
00068     i = V1;                                             \
00069     j = V2;                                             \
00070     i OP##= j;                                          \
00071     sym_compare_assert(i, ==, float(V1 OP V2));         \
00072                                                         \
00073     j OP##= j;                                          \
00074     sym_compare_assert(j, ==, float(V2 OP V2));         \
00075                                                         \
00076     i = V1;                                             \
00077     j = V2;                                             \
00078     j OP##= i;                                          \
00079     sym_compare_assert(j, ==, float(V2 OP V1));         \
00080                                                         \
00081     i = V1;                                             \
00082     i OP##= i;                                          \
00083     sym_compare_assert(i, ==, float(((V1 OP V1))));     \
00084 }
00085 
00086 #define test_operator(T, OP, V1, V2)            \
00087                                                 \
00088 {                                               \
00089     T i = V1;                                   \
00090     T j = V2;                                   \
00091                                                 \
00092     i = i OP j;                                 \
00093     sym_compare_assert(i, ==, float(V1 OP V2)); \
00094     sym_compare_assert(j, ==, float(V2));       \
00095                                                 \
00096     i = V1;                                     \
00097     i OP##= i;                                  \
00098     sym_compare_assert(i, ==, float(V1 OP V1)); \
00099                                                 \
00100     i = V1;                                     \
00101     j = V2;                                     \
00102     i OP##= j;                                  \
00103 }