%description: Test NaN: x!=x if x is NaN Note: MSVC prints NaN as -1.#IND and 1.#QNAN, so we need to %subst them to their gcc equivalent. %global: static bool isNaN(double d) { return d != d; } %activity: #define PRINT(x) EV << #x << ":" << (x) << endl; double zero = 0; double nan = NAN; // defined in header since C++11 PRINT(nan); PRINT(nan*2); PRINT(-nan); PRINT(isNaN(nan)); PRINT(isNaN(3.14)); PRINT(isNaN(1/zero)); PRINT(isNaN(-1/zero)); PRINT(nan==nan); PRINT(nan!=nan); PRINT(nannan); PRINT(nan<=nan); PRINT(nan>=nan); EV << ".\n"; %subst: /-?1\.#IND/nan/ %subst: /-?1\.#QNAN/nan/ %subst: /-?:NaN/:nan/ %subst: /-?:\-nan/:nan/ %contains: stdout nan:nan nan*2:nan -nan:nan isNaN(nan):1 isNaN(3.14):0 isNaN(1/zero):0 isNaN(-1/zero):0 nan==nan:0 nan!=nan:1 nannan:0 nan<=nan:0 nan>=nan:0 .