/** * Copyright - See the COPYRIGHT that is included with this distribution. * pvxs is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. */ #include #include #include #include #include "pvaproto.h" #include "utilpvt.h" using namespace pvxs; namespace { void testEmpty() { testDiag("%s", __func__); BitMask empty; testOk1(!!empty.empty()); testEq(empty.size(), 0u); testEq(empty.wsize(), 0u); testEq(empty.findSet(0u), 0u); testEq(std::string(SB()< void testSerCase(bool be, uint8_t(&input)[N], const char *expect) { std::string sinput((char*)input, N-1u); testShow()<<__func__<<"("<<(be?"BE":"LE")<<", \""< O; VectorOutBuf outbuf(be, O); to_wire(outbuf, mask); std::string actual((char*)O.data(), O.size()-outbuf.size()); testEq(sinput, actual); } void testSer() { testDiag("%s", __func__); { uint8_t actual[] = "\x00"; testSerCase(true, actual, "{}"); testSerCase(false, actual, "{}"); } { uint8_t actual[] = "\x01\x01"; testSerCase(true, actual, "{0}"); testSerCase(false, actual, "{0}"); } { uint8_t actual[] = "\x01\x02"; testSerCase(true, actual, "{1}"); testSerCase(false, actual, "{1}"); } { uint8_t actual[] = "\x02\x00\x01"; testSerCase(true, actual, "{8}"); testSerCase(false, actual, "{8}"); } { uint8_t actual[] = "\x07\x02\x00\x00\x00\x00\x00\x80"; testSerCase(true, actual, "{1, 55}"); testSerCase(false, actual, "{1, 55}"); } { uint8_t actual[] = "\x08\x80\x00\x00\x00\x00\x00\x00\x02"; testSerCase(true, actual, "{1, 63}"); } { uint8_t actual[] = "\x08\x02\x00\x00\x00\x00\x00\x00\x80"; testSerCase(false, actual, "{1, 63}"); } { uint8_t actual[] = "\x09\x80\x00\x00\x00\x00\x00\x01\x02\x01"; testSerCase(true, actual, "{1, 8, 63, 64}"); } { uint8_t actual[] = "\x09\x02\x01\x00\x00\x00\x00\x00\x80\x01"; testSerCase(false, actual, "{1, 8, 63, 64}"); } { uint8_t actual[] = "\x10\x80\x00\x00\x00\x00\x00\x00\x02\x40\x00\x00\x00\x00\x00\x00\x01"; testSerCase(true, actual, "{1, 63, 64, 126}"); } { uint8_t actual[] = "\x10\x02\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x40"; testSerCase(false, actual, "{1, 63, 64, 126}"); } } } // namespace MAIN(testbitmask) { testPlan(76); testEmpty(); testBasic1(); testBasic2(); testBasic3(); testOp(); testExpr(); testSer(); cleanup_for_valgrind(); return testDone(); }