%description: Test the shift operator in NED expressions (they are implemented with cDynamicExpression). 64-bit signed arithmetic. %global: void test(const char *expr) { cDynamicExpression e; e.parse(expr); std::string result; try { cNedValue v = e.evaluate(); result = v.str(); } catch (std::exception& e) { result = e.what(); } EV << expr << " ==> " << result << "\n"; } void test(const char *s1, const std::string& s2, const char *s3) { test((std::string(s1) + " " + s2 + " " + s3).c_str()); } %activity: // left-shift, normal usage test("1<<0"); test("1<<1"); test("1<<16"); test("1<<62"); test("1<<63"); // shift by 64 or more places test("1<<64"); test("1<<10000"); // negative shift shifts right test("4<<-1"); test("4<<-2"); test("4<<-3"); // negative shift by 64 or more places test("2<<-64"); test("2<<-10000"); // negative values test("-1<<1"); test("-1<<16"); test("-1<<62"); test("-1<<63"); // shifting negative values by 64 or more places test("-1<<64"); // negative shift of negative values test("-4<<-1"); test("-4<<-2"); test("-4<<-3"); test("-4<<-4"); test("-4<<-64"); EV << "====================\n"; // right-shift, normal usage test("4>>0"); test("4>>1"); test("4>>2"); test("4>>3"); // shift by 64 or more places test("4>>64"); test("4>>10000"); // negative shift shifts left test("1>>-1"); test("1>>-2"); test("1>>-62"); test("1>>-63"); // negative shift by 64 or more places test("1>>-64"); test("1>>-10000"); // negative values test("-4>>1"); test("-4>>2"); test("-4>>3"); test("-4>>63"); // shifting negative values by 64 or more places test("-1>>64"); // negative shift of negative values test("-1>>-1"); test("-1>>-2"); test("-1>>-3"); test("-1>>-63"); test("-1>>-64"); EV << ".\n"; %contains: stdout 1<<0 ==> 1 1<<1 ==> 2 1<<16 ==> 65536 1<<62 ==> 4611686018427387904 1<<63 ==> -9223372036854775808 1<<64 ==> 0 1<<10000 ==> 0 4<<-1 ==> 2 4<<-2 ==> 1 4<<-3 ==> 0 2<<-64 ==> 0 2<<-10000 ==> 0 -1<<1 ==> -2 -1<<16 ==> -65536 -1<<62 ==> -4611686018427387904 -1<<63 ==> -9223372036854775808 -1<<64 ==> 0 -4<<-1 ==> -2 -4<<-2 ==> -1 -4<<-3 ==> -1 -4<<-4 ==> -1 -4<<-64 ==> -1 ==================== 4>>0 ==> 4 4>>1 ==> 2 4>>2 ==> 1 4>>3 ==> 0 4>>64 ==> 0 4>>10000 ==> 0 1>>-1 ==> 2 1>>-2 ==> 4 1>>-62 ==> 4611686018427387904 1>>-63 ==> -9223372036854775808 1>>-64 ==> 0 1>>-10000 ==> 0 -4>>1 ==> -2 -4>>2 ==> -1 -4>>3 ==> -1 -4>>63 ==> -1 -1>>64 ==> -1 -1>>-1 ==> -2 -1>>-2 ==> -4 -1>>-3 ==> -8 -1>>-63 ==> -9223372036854775808 -1>>-64 ==> 0 .