Changeset 4906 in CLRX


Ignore:
Timestamp:
Aug 18, 2019, 9:24:10 PM (4 weeks ago)
Author:
matszpk
Message:

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

File:
1 edited

Legend:

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

    r4905 r4906  
    651651        assertTrue("MsgPack0", "No elements", !childParser.haveElements());
    652652    }
     653    // longer array (more than 15 elements)
     654    const cxbyte tc25[39] = { 0x91, 0xdc, 0x23, 0x00,
     655        0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x78,
     656        0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
     657        0x21, 0x12, 0x23, 0x54, 0x25, 0x46, 0x77, 0x58,
     658        0x0f, 0x0a, 0x0b, 0x0d, 0x0e, 0x01, 0x21, 0x22,
     659        0x79, 0x7b, 0x7f };
     660    {
     661        dataPtr = tc25;
     662        MsgPackArrayParser arrParser(dataPtr, dataPtr + sizeof(tc25));
     663        MsgPackArrayParser childParser = arrParser.parseArray();
     664        std::vector<cxuint> res;
     665        while (childParser.haveElements())
     666            res.push_back(childParser.parseInteger(MSGPACK_WS_BOTH));
     667        const cxuint expected[35] = {
     668            0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x78,
     669            0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
     670            0x21, 0x12, 0x23, 0x54, 0x25, 0x46, 0x77, 0x58,
     671            0x0f, 0x0a, 0x0b, 0x0d, 0x0e, 0x01, 0x21, 0x22,
     672            0x79, 0x7b, 0x7f };
     673        assertArray("MsgPack0", "tc25.value", Array<cxuint>(expected, expected + 35),
     674                        Array<cxuint>(res.begin(), res.end()));
     675        assertValue("MsgPack0", "tc25.DataPtr", dataPtr, tc25 + sizeof(tc25));
     676        assertTrue("MsgPack0", "No elements", !childParser.haveElements());
     677    }
     678    // longer array (16-bit size)
     679    {
     680        Array<cxbyte> tc26(4 + 12615);
     681        tc26[0] = 0x91;
     682        tc26[1] = 0xdc;
     683        tc26[2] = (12615&0xff);
     684        tc26[3] = (12615>>8);
     685        for (cxuint i = 0; i < tc26.size()-4; i++)
     686            tc26[i+4] = (((i*0x71f)^i) + (12342%(i+1)))&0x7f;
     687        dataPtr = tc26.data();
     688        const cxbyte* dataEnd = tc26.end();
     689        std::vector<cxbyte> res;
     690        MsgPackArrayParser arrParser(dataPtr, dataPtr + tc26.size());
     691        MsgPackArrayParser childParser = arrParser.parseArray();
     692        while (childParser.haveElements())
     693            res.push_back(childParser.parseInteger(MSGPACK_WS_BOTH));
     694        assertArray("MsgPack0", "tc26.value",
     695                    Array<cxbyte>(tc26.begin()+4, tc26.end()), res);
     696        assertValue("MsgPack0", "tc26.DataPtr", dataPtr, dataEnd);
     697        dataPtr = tc26.data();
     698        {
     699            MsgPackArrayParser arrParser(dataPtr, dataPtr + 2);
     700            assertCLRXException("MsgPack0", "tc26_2.Ex", "MsgPack: Can't parse array size",
     701                        [&arrParser]() { arrParser.parseArray(); });
     702            dataEnd = tc26.begin()+2;
     703            assertValue("MsgPack0", "tc26_2.DataPtr", dataPtr, dataEnd);
     704        }
     705        dataPtr = tc26.data();
     706        {
     707            MsgPackArrayParser arrParser(dataPtr, dataPtr + 3);
     708            assertCLRXException("MsgPack0", "tc26_3.Ex", "MsgPack: Can't parse array size",
     709                        [&arrParser]() { arrParser.parseArray(); });
     710            dataEnd = tc26.begin()+2;
     711            assertValue("MsgPack0", "tc26_3.DataPtr", dataPtr, dataEnd);
     712        }
     713    }
     714    // longer data (32-bit size)
     715    {
     716        Array<cxbyte> tc27(6 + 1818241);
     717        tc27[0] = 0x91;
     718        tc27[1] = 0xdd;
     719        tc27[2] = (1818241&0xff);
     720        tc27[3] = (1818241>>8)&0xff;
     721        tc27[4] = (1818241>>16)&0xff;
     722        tc27[5] = (1818241>>24);
     723        for (cxuint i = 0; i < tc27.size()-6; i++)
     724            tc27[i+6] = (((i*0x11f)^i)*3 + (1334123421%(i*5+1)))&0x7f;
     725        dataPtr = tc27.data();
     726        const cxbyte* dataEnd = tc27.end();
     727        MsgPackArrayParser arrParser(dataPtr, dataPtr + tc27.size());
     728        std::vector<cxbyte> res;
     729        MsgPackArrayParser childParser = arrParser.parseArray();
     730        while (childParser.haveElements())
     731            res.push_back(childParser.parseInteger(MSGPACK_WS_BOTH));
     732        assertArray("MsgPack0", "tc27.value",
     733                    Array<cxbyte>(tc27.begin()+6, tc27.end()), res);
     734        assertValue("MsgPack0", "tc27.DataPtr", dataPtr, dataEnd);
     735        for (cxuint i = 1; i <= 3; i++)
     736        {
     737            dataPtr = tc27.data();
     738            MsgPackArrayParser arrParser(dataPtr, dataPtr + 2 + i);
     739            assertCLRXException("MsgPack0", "tc27_2.Ex", "MsgPack: Can't parse array size",
     740                        [&arrParser]() { arrParser.parseArray(); });
     741            dataEnd = tc27.begin()+2;
     742            assertValue("MsgPack0", "tc27_2.DataPtr", dataPtr, dataEnd);
     743        }
     744    }
    653745}
    654746
Note: See TracChangeset for help on using the changeset viewer.