Changeset 4907 in CLRX


Ignore:
Timestamp:
Aug 20, 2019, 9:02:36 AM (4 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: Add next testcases for ROCm MsgPack? parser - maps.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/tests/amdbin/ROCmMsgPack.cpp

    r4906 r4907  
    712712        }
    713713    }
    714     // longer data (32-bit size)
     714    // longer array (32-bit size)
    715715    {
    716716        Array<cxbyte> tc27(6 + 1818241);
     
    743743        }
    744744    }
     745   
     746    // parseMap
     747    const cxbyte tc28[16] = { 0x91, 0x85, 0x11, 0x33, 0xcc, 0xb4, 0x74, 0xcc, 0x99,
     748                        0x21, 0xcc, 0xff, 0x42, 0x71, 0xcc, 0xca };
     749    {
     750        dataPtr = tc28;
     751        MsgPackArrayParser arrParser(dataPtr, dataPtr + sizeof(tc28));
     752        MsgPackMapParser childParser = arrParser.parseMap();
     753        std::vector<cxuint> res;
     754        while (childParser.haveElements())
     755        {
     756            res.push_back(childParser.parseKeyInteger(MSGPACK_WS_BOTH));
     757            res.push_back(childParser.parseValueInteger(MSGPACK_WS_BOTH));
     758        }
     759        const cxuint expected[10] = { 0x11, 0x33, 0xb4, 0x74, 0x99,
     760                                    0x21, 0xff, 0x42, 0x71, 0xca };
     761        assertArray("MsgPack0", "tc28.value", Array<cxuint>(expected, expected + 10),
     762                        Array<cxuint>(res.begin(), res.end()));
     763        assertValue("MsgPack0", "tc28.DataPtr", dataPtr, tc28 + sizeof(tc28));
     764        assertTrue("MsgPack0", "No elements", !childParser.haveElements());
     765    }
     766    // longer map (16-bit size)
     767    {
     768        Array<cxbyte> tc29(4 + 12615*2);
     769        tc29[0] = 0x91;
     770        tc29[1] = 0xde;
     771        tc29[2] = (12615&0xff);
     772        tc29[3] = (12615>>8);
     773        for (cxuint i = 0; i < tc29.size()-4; i++)
     774            tc29[i+4] = (((i*0x71f)^i) + (12342%(i+1)))&0x7f;
     775        dataPtr = tc29.data();
     776        const cxbyte* dataEnd = tc29.end();
     777        std::vector<cxbyte> res;
     778        MsgPackArrayParser arrParser(dataPtr, dataPtr + tc29.size());
     779        MsgPackMapParser childParser = arrParser.parseMap();
     780        while (childParser.haveElements())
     781        {
     782            res.push_back(childParser.parseKeyInteger(MSGPACK_WS_BOTH));
     783            res.push_back(childParser.parseValueInteger(MSGPACK_WS_BOTH));
     784        }
     785        assertArray("MsgPack0", "tc29.value",
     786                    Array<cxbyte>(tc29.begin()+4, tc29.end()), res);
     787        assertValue("MsgPack0", "tc29.DataPtr", dataPtr, dataEnd);
     788        dataPtr = tc29.data();
     789        {
     790            MsgPackArrayParser arrParser(dataPtr, dataPtr + 2);
     791            assertCLRXException("MsgPack0", "tc29_2.Ex", "MsgPack: Can't parse map size",
     792                        [&arrParser]() { arrParser.parseMap(); });
     793            dataEnd = tc29.begin()+2;
     794            assertValue("MsgPack0", "tc29_2.DataPtr", dataPtr, dataEnd);
     795        }
     796        dataPtr = tc29.data();
     797        {
     798            MsgPackArrayParser arrParser(dataPtr, dataPtr + 3);
     799            assertCLRXException("MsgPack0", "tc29_3.Ex", "MsgPack: Can't parse map size",
     800                        [&arrParser]() { arrParser.parseMap(); });
     801            dataEnd = tc29.begin()+2;
     802            assertValue("MsgPack0", "tc29_3.DataPtr", dataPtr, dataEnd);
     803        }
     804    }
     805    // longer map (32-bit size)
     806    {
     807        Array<cxbyte> tc30(6 + 1818241*2);
     808        tc30[0] = 0x91;
     809        tc30[1] = 0xdf;
     810        tc30[2] = (1818241&0xff);
     811        tc30[3] = (1818241>>8)&0xff;
     812        tc30[4] = (1818241>>16)&0xff;
     813        tc30[5] = (1818241>>24);
     814        for (cxuint i = 0; i < tc30.size()-6; i++)
     815            tc30[i+6] = (((i*0x11f)^i)*3 + (1334123421%(i*5+1)))&0x7f;
     816        dataPtr = tc30.data();
     817        const cxbyte* dataEnd = tc30.end();
     818        MsgPackArrayParser arrParser(dataPtr, dataPtr + tc30.size());
     819        std::vector<cxbyte> res;
     820        MsgPackMapParser childParser = arrParser.parseMap();
     821        while (childParser.haveElements())
     822        {
     823            res.push_back(childParser.parseKeyInteger(MSGPACK_WS_BOTH));
     824            res.push_back(childParser.parseValueInteger(MSGPACK_WS_BOTH));
     825        }
     826        assertArray("MsgPack0", "tc30.value",
     827                    Array<cxbyte>(tc30.begin()+6, tc30.end()), res);
     828        assertValue("MsgPack0", "tc30.DataPtr", dataPtr, dataEnd);
     829        for (cxuint i = 1; i <= 3; i++)
     830        {
     831            dataPtr = tc30.data();
     832            MsgPackArrayParser arrParser(dataPtr, dataPtr + 2 + i);
     833            assertCLRXException("MsgPack0", "tc30_2.Ex", "MsgPack: Can't parse map size",
     834                        [&arrParser]() { arrParser.parseMap(); });
     835            dataEnd = tc30.begin()+2;
     836            assertValue("MsgPack0", "tc30_2.DataPtr", dataPtr, dataEnd);
     837        }
     838    }
    745839}
    746840
Note: See TracChangeset for help on using the changeset viewer.