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 }