source: CLRX/CLRadeonExtender/trunk/tests/amdbin/ROCmMsgPackWrite.cpp

Last change on this file was 4960, checked in by matszpk, 14 months ago

CLRadeonExtender: ROCmBin: Next testcase for generateROCmMetadataMsgPack (include kernel descriptors values).

File size: 40.4 KB
Line 
1/*
2 *  CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3 *  Copyright (C) 2014-2018 Mateusz Szpakowski
4 *
5 *  This library is free software; you can redistribute it and/or
6 *  modify it under the terms of the GNU Lesser General Public
7 *  License as published by the Free Software Foundation; either
8 *  version 2.1 of the License, or (at your option) any later version.
9 *
10 *  This library is distributed in the hope that it will be useful,
11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 *  Lesser General Public License for more details.
14 *
15 *  You should have received a copy of the GNU Lesser General Public
16 *  License along with this library; if not, write to the Free Software
17 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18 */
19
20#include <CLRX/Config.h>
21#include <iostream>
22#include <cstring>
23#include <cstdio>
24#include <vector>
25#include <memory>
26#include <CLRX/utils/Containers.h>
27#include <CLRX/amdbin/ROCmBinaries.h>
28#include "../TestUtils.h"
29
30using namespace CLRX;
31
32static void testMsgPackBytesWrite()
33{
34    {
35        static const cxbyte outBytes0[3] = { 0x92, 0xc3, 0xc2 };
36        std::vector<cxbyte> out;
37        MsgPackArrayWriter awriter(2, out);
38        awriter.putBool(true);
39        awriter.putBool(false);
40        assertArray("MsgPackWrite0", "tc0",
41                    Array<cxbyte>(outBytes0, outBytes0 + sizeof(outBytes0)), out);
42    }
43    {
44        static const cxbyte outBytes1[16] = { 0x9f, 0, 1, 2, 3, 4, 5, 6, 7,
45            8, 9, 10, 11, 12, 13, 14 };
46        std::vector<cxbyte> out;
47        MsgPackArrayWriter awriter(15, out);
48        for (cxuint i = 0; i < 15; i++)
49            awriter.putUInt(i);
50        assertArray("MsgPackWrite0", "tc1",
51                    Array<cxbyte>(outBytes1, outBytes1 + sizeof(outBytes1)), out);
52    }
53    {   // longer array
54        static const cxbyte outBytes2[21] = { 0xdc, 0x0, 0x12, 0, 1, 2, 3, 4, 5, 6, 7,
55            8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
56        std::vector<cxbyte> out;
57        MsgPackArrayWriter awriter(18, out);
58        for (cxuint i = 0; i < 18; i++)
59            awriter.putUInt(i);
60        assertArray("MsgPackWrite0", "tc2",
61                    Array<cxbyte>(outBytes2, outBytes2 + sizeof(outBytes2)), out);
62    }
63    {   // long array (12222 elements)
64        Array<cxbyte> outBytes3(12222+3);
65        outBytes3[0] = 0xdc;
66        outBytes3[1] = 12222>>8;
67        outBytes3[2] = 12222&0xff;
68        std::vector<cxbyte> out;
69        MsgPackArrayWriter awriter(12222, out);
70        for (cxuint i = 0; i < 12222; i++)
71        {
72            awriter.putUInt(i&0x7f);
73            outBytes3[i+3] = i&0x7f;
74        }
75        assertArray("MsgPackWrite0", "tc3", outBytes3, out);
76    }
77    {   // long array (1777777 elements)
78        Array<cxbyte> outBytes4(1777777+5);
79        outBytes4[0] = 0xdd;
80        outBytes4[1] = 1777777>>24;
81        outBytes4[2] = (1777777>>16)&0xff;
82        outBytes4[3] = (1777777>>8)&0xff;
83        outBytes4[4] = 1777777&0xff;
84        std::vector<cxbyte> out;
85        MsgPackArrayWriter awriter(1777777, out);
86        for (cxuint i = 0; i < 1777777; i++)
87        {
88            awriter.putUInt(i&0x7f);
89            outBytes4[i+5] = i&0x7f;
90        }
91        assertArray("MsgPackWrite0", "tc4", outBytes4, out);
92    }
93    /* test putting values */
94    {
95        static const cxbyte outBytes5[21] = { 0x95, 0x12, 0xcc, 0xd1, 0xcd, 0xab, 0x73,
96            0xce, 0xa1, 0x18, 0xb9, 0x31,
97            0xcf, 0x11, 0x88, 0x99, 0xa1, 0xb6, 0xa1, 0x9e, 0x1a };
98        std::vector<cxbyte> out;
99        MsgPackArrayWriter awriter(5, out);
100        awriter.putUInt(0x12);
101        awriter.putUInt(0xd1);
102        awriter.putUInt(0xab73);
103        awriter.putUInt(0xa118b931U);
104        awriter.putUInt(0x118899a1b6a19e1aULL);
105        assertArray("MsgPackWrite0", "tc5",
106                    Array<cxbyte>(outBytes5, outBytes5 + sizeof(outBytes5)), out);
107    }
108    // testing string putting (short)
109    {
110        static const cxbyte outBytes6[7] = { 0x91, 0xa5, 0x4a, 0x5b, 0x31, 0x28, 0x44 };
111        std::vector<cxbyte> out;
112        MsgPackArrayWriter awriter(1, out);
113        awriter.putString("\x4a\x5b\x31\x28\x44");
114        assertArray("MsgPackWrite0", "tc6",
115                    Array<cxbyte>(outBytes6, outBytes6 + sizeof(outBytes6)), out);
116    }
117    {
118        Array<cxbyte> outBytes7(187+3);
119        outBytes7[0] = 0x91;
120        outBytes7[1] = 0xd9;
121        outBytes7[2] = 187;
122        std::vector<cxbyte> out;
123        MsgPackArrayWriter awriter(1, out);
124        for (cxuint i = 0; i < 187; i++)
125            outBytes7[i+3] = (i&0x7f)+10;
126        std::string s(reinterpret_cast<cxbyte*>(outBytes7.data())+3,
127                    reinterpret_cast<cxbyte*>(outBytes7.data())+187+3);
128        awriter.putString(s.c_str());
129        assertArray("MsgPackWrite0", "tc7", outBytes7, out);
130    }
131    {
132        Array<cxbyte> outBytes8(18529+4);
133        outBytes8[0] = 0x91;
134        outBytes8[1] = 0xda;
135        outBytes8[2] = 18529>>8;
136        outBytes8[3] = 18529&0xff;
137        std::vector<cxbyte> out;
138        MsgPackArrayWriter awriter(1, out);
139        for (cxuint i = 0; i < 18529; i++)
140            outBytes8[i+4] = (i&0x7f)+10;
141        std::string s(reinterpret_cast<cxbyte*>(outBytes8.data())+4,
142                    reinterpret_cast<cxbyte*>(outBytes8.data())+18529+4);
143        awriter.putString(s.c_str());
144        assertArray("MsgPackWrite0", "tc8", outBytes8, out);
145    }
146    {
147        Array<cxbyte> outBytes9(9838391+6);
148        outBytes9[0] = 0x91;
149        outBytes9[1] = 0xdb;
150        outBytes9[2] = 9838391>>24;
151        outBytes9[3] = (9838391>>16)&0xff;
152        outBytes9[4] = (9838391>>8)&0xff;
153        outBytes9[5] = 9838391&0xff;
154        std::vector<cxbyte> out;
155        MsgPackArrayWriter awriter(1, out);
156        for (cxuint i = 0; i < 9838391; i++)
157            outBytes9[i+6] = (i&0x7f)+10;
158        std::string s(reinterpret_cast<cxbyte*>(outBytes9.data())+6,
159                    reinterpret_cast<cxbyte*>(outBytes9.data())+9838391+6);
160        awriter.putString(s.c_str());
161        assertArray("MsgPackWrite0", "tc9", outBytes9, out);
162    }
163    /* map writer class */
164    {
165        static const cxbyte outBytes10[21] = { 0x83,
166            0xa4, 'a', 'b', 'a', 'b', 15,
167            0xa3, 'c', 'o', 'b', 0xcd, 0xe9, 0x11,
168            0xa5, 'e', 'x', 't', 'r', 'a', 11 };
169        std::vector<cxbyte> out;
170        MsgPackMapWriter mwriter(3, out);
171        mwriter.putKeyString("abab");
172        mwriter.putValueUInt(15);
173        mwriter.putKeyString("cob");
174        mwriter.putValueUInt(0xe911);
175        mwriter.putKeyString("extra");
176        mwriter.putValueUInt(11);
177        assertArray("MsgPackWrite0", "tc10",
178                    Array<cxbyte>(outBytes10, outBytes10 + sizeof(outBytes10)), out);
179    }
180    // longer map testcase
181    {
182        Array<cxbyte> outBytes11(14821*10+3);
183        outBytes11[0] = 0xde;
184        outBytes11[1] = 14821>>8;
185        outBytes11[2] = 14821&0xff;
186        std::vector<cxbyte> out;
187        MsgPackMapWriter mwriter(14821, out);
188        for (cxuint i = 0; i < 14821; i++)
189        {
190            char kbuf[8], vbuf[8];
191            ::snprintf(kbuf, 8, "%04x", i);
192            ::snprintf(vbuf, 8, "%04x", i^0xdca1);
193            outBytes11[3+i*10] = 0xa4;
194            std::copy(kbuf, kbuf+4, ((char*)outBytes11.data())+3 + i*10 + 1);
195            outBytes11[3+i*10 + 5] = 0xa4;
196            std::copy(vbuf, vbuf+4, ((char*)outBytes11.data())+3 + i*10 + 6);
197           
198            mwriter.putKeyString(kbuf);
199            mwriter.putValueString(vbuf);
200        }
201        assertArray("MsgPackWrite0", "tc11", outBytes11, out);
202    }
203    // longer map testcase
204    {
205        Array<cxbyte> outBytes12(793894*14+5);
206        outBytes12[0] = 0xdf;
207        outBytes12[1] = 793894>>24;
208        outBytes12[2] = (793894>>16)&0xff;
209        outBytes12[3] = (793894>>8)&0xff;
210        outBytes12[4] = 793894&0xff;
211        std::vector<cxbyte> out;
212        MsgPackMapWriter mwriter(793894, out);
213        for (cxuint i = 0; i < 793894; i++)
214        {
215            char kbuf[10], vbuf[10];
216            ::snprintf(kbuf, 10, "%06x", i);
217            ::snprintf(vbuf, 10, "%06x", (i^0x11b3dca1U)&0xffffffU);
218            outBytes12[5+i*14] = 0xa6;
219            std::copy(kbuf, kbuf+6, ((char*)outBytes12.data())+5 + i*14 + 1);
220            outBytes12[5+i*14 + 7] = 0xa6;
221            std::copy(vbuf, vbuf+6, ((char*)outBytes12.data())+5 + i*14 + 8);
222           
223            mwriter.putKeyString(kbuf);
224            mwriter.putValueString(vbuf);
225        }
226        assertArray("MsgPackWrite0", "tc12", outBytes12, out);
227    }
228}
229
230struct ROCmMsgPackMDTestCase
231{
232    ROCmMetadata input;
233    Array<ROCmKernelDescriptor> inputKDescs;
234    size_t expectedSize;
235    const cxbyte* expected;      // input metadata string
236    bool good;
237    const char* error;
238};
239
240static const cxbyte rocmMsgPackInput0[] =
241{
242    0x83,
243    0xae, 'a', 'm', 'd', 'h', 's', 'a', '.', 'k', 'e', 'r', 'n', 'e', 'l', 's',
244    0x91,
245    // kernel A
246    0xde, 0x00, 0x13,
247    0xa5, '.', 'a', 'r', 'g', 's',
248    // kernel args
249    0xdc, 0x00, 0x16,
250    0x88,   // 0
251        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
252            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
253        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
254        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '0',
255        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x00,
256        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
257        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
258            0xa7, 'i', 'n', 't', '8', '_', 't', '*',
259        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
260            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
261        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'i', '8',
262    0x88,   // 1
263        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
264            0xa8, 'c', 'o', 'n', 's', 't', 'a', 'n', 't',
265        0xac, '.', 'i', 's', '_', 'v', 'o', 'l', 'a', 't', 'i', 'l', 'e', 0xc3,
266        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '1',
267        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x08,
268        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
269        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
270            0xa6, 'u', 'c', 'h', 'a', 'r', '*',
271        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
272            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
273        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'u', '8',
274    0x88,   // 2
275        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
276            0xa7, 'p', 'r', 'i', 'v', 'a', 't', 'e',
277        0xac, '.', 'i', 's', '_', 'r', 'e', 's', 't', 'r', 'i', 'c', 't', 0xc3,
278        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '2',
279        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x10,
280        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
281        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
282            0xa6, 'i', 'n', 't', '1', '6', '*',
283        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
284            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
285        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '1', '6',
286    0x88,   // 3
287        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
288            0xa5, 'l', 'o', 'c', 'a', 'l',
289        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
290        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '3',
291        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x18,
292        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
293        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
294            0xa9, 'u', 'i', 'n', 't', '1', '6', '_', 't', '*',
295        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
296            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
297        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'u', '1', '6',
298    0x89,   // 4
299        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
300            0xa5, 'l', 'o', 'c', 'a', 'l',
301        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
302        0xa5, '.', 'n', 'a', 'm', 'e', 0xa4, 'i', 'n', '3', 'x',
303        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x20,
304        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
305        0xae, '.', 'p', 'o', 'i', 'n', 't', 'e', 'e', '_', 'a', 'l', 'i', 'g', 'n', 0x08,
306        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
307            0xa5, 'h', 'a', 'l', 'f', '*',
308        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
309            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
310        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '1', '6',
311    0x88,   // 5
312        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
313            0xa7, 'g', 'e', 'n', 'e', 'r', 'i', 'c',
314        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
315        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '4',
316        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x28,
317        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
318        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
319            0xa6, 'i', 'n', 't', '3', '2', '*',
320        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
321            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
322        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '3', '2',
323    0x88,   // 6
324        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
325            0xa6, 'r', 'e', 'g', 'i', 'o', 'n',
326        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
327        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '5',
328        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x30,
329        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
330        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
331            0xa7, 'u', 'i', 'n', 't', '3', '2', '*',
332        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
333            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
334        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'u', '3', '2',
335    0x87,   // 7
336        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
337        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '6',
338        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x38,
339        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
340        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
341            0xa6, 'f', 'l', 'o', 'a', 't', '*',
342        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
343            0xa5, 'q', 'u', 'e', 'u', 'e',
344        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '3', '2',
345    0x88,   // 8
346        0xa7, '.', 'a', 'c', 'c', 'e', 's', 's',
347            0xa9, 'r', 'e', 'a', 'd', '_', 'o', 'n', 'l', 'y',
348        0xa8, '.', 'i', 's', '_', 'p', 'i', 'p', 'e', 0xc3,
349        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '7',
350        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x40,
351        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
352        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
353            0xa5, 'l', 'o', 'n', 'g', '*',
354        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
355            0xa4, 'p', 'i', 'p', 'e',
356        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
357    0x87,   // 9
358        0xa7, '.', 'a', 'c', 'c', 'e', 's', 's',
359            0xaa, 'r', 'e', 'a', 'd', '_', 'w', 'r', 'i', 't', 'e',
360        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '8',
361        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x48,
362        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
363        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
364            0xa9, 'i', 'm', 'a', 'g', 'e', '2', 'd', '_', 't',
365        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
366            0xa5, 'i', 'm', 'a', 'g', 'e',
367        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'u', '6', '4',
368    0x86,   // 10
369        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '9',
370        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x50,
371        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
372        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
373            0xa9, 's', 'a', 'm', 'p', 'l', 'e', 'r', '_', 't',
374        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
375            0xa7, 's', 'a', 'm', 'p', 'l', 'e', 'r',
376        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '6', '4',
377    0x87,   // 11
378        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
379            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
380        0xa5, '.', 'n', 'a', 'm', 'e', 0xa4, 'i', 'n', '1', '0',
381        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x58,
382        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
383        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
384            0xa6, 's', 't', 'r', 'u', 'c', '*',
385        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
386            0xb6, 'd', 'y', 'n', 'a', 'm', 'i', 'c', '_', 's', 'h', 'a', 'r', 'e', 'd', '_',
387                'p', 'o', 'i', 'n', 't', 'e', 'r',
388        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e',
389            0xa6, 's', 't', 'r', 'u', 'c', 't',
390    0x86,   // 12
391        0xa5, '.', 'n', 'a', 'm', 'e', 0xa1, 'n',
392        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x60,
393        0xa5, '.', 's', 'i', 'z', 'e', 0x04,
394        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', 't',
395        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
396            0xa8, 'b', 'y', '_', 'v', 'a', 'l', 'u', 'e',
397        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '3', '2',
398    0x84,   // 13
399        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x70,
400        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
401        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
402            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
403            'o', 'f', 'f', 's', 'e', 't', '_', 'x',
404        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
405    0x84,   // 14
406        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x78,
407        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
408        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
409            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
410            'o', 'f', 'f', 's', 'e', 't', '_', 'y',
411        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
412    0x84,   // 15
413        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x80,
414        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
415        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
416            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
417            'o', 'f', 'f', 's', 'e', 't', '_', 'z',
418        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
419    0x84,   // 16
420        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x88,
421        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
422        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
423            0xb4, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'p', 'r', 'i', 'n', 't', 'f', '_',
424            'b', 'u', 'f', 'f', 'e', 'r',
425        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
426    0x84,   // 17
427        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x90,
428        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
429        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
430            0xb4, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'd', 'e', 'f', 'a', 'u', 'l', 't',
431            '_', 'q', 'u', 'e', 'u', 'e',
432        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
433    0x84,   // 18
434        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x98,
435        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
436        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
437            0xb8, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'c', 'o', 'm', 'p', 'l', 'e', 't',
438            'i', 'o', 'n', '_', 'a', 'c', 't', 'i', 'o', 'n',
439        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
440    0x84,   // 19
441        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0xa0,
442        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
443        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
444            0xb9, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'm', 'u', 'l', 't', 'i', 'g', 'r',
445            'i', 'd', '_', 's', 'y', 'n', 'c', '_', 'a', 'r', 'g',
446        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
447    0x88,   // 20
448        0xae, '.', 'a', 'c', 't', 'u', 'a', 'l', '_', 'a', 'c', 'c', 'e', 's', 's',
449            0xaa, 'w', 'r', 'i', 't', 'e', '_', 'o', 'n', 'l', 'y',
450        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
451            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
452        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'x', '0',
453        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0xa8,
454        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
455        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
456            0xa7, 'i', 'n', 't', '8', '_', 't', '*',
457        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
458            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
459        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'i', '8',
460    0x88,   // 21
461        0xae, '.', 'a', 'c', 't', 'u', 'a', 'l', '_', 'a', 'c', 'c', 'e', 's', 's',
462            0xaa, 'r', 'e', 'a', 'd', '_', 'w', 'r', 'i', 't', 'e',
463        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
464            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
465        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'x', '1',
466        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0xb0,
467        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
468        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
469            0xa7, 'i', 'n', 't', '8', '_', 't', '*',
470        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
471            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
472        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'i', '8',
473    0xb6, '.', 'd', 'e', 'v', 'i', 'c', 'e', '_', 'e', 'n', 'q', 'u', 'e', 'u', 'e', '_',
474        's', 'y', 'm', 'b', 'o', 'l', 0xa4, 'a', 'b', 'c', 'd',
475    0xb9, '.', 'g', 'r', 'o', 'u', 'p', '_', 's', 'e', 'g', 'm', 'e', 'n', 't', '_',
476        'f', 'i', 'x', 'e', 'd', '_', 's', 'i', 'z', 'e', 0x48,
477    0xb6, '.', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
478        '_', 'a', 'l', 'i', 'g', 'n', 0x10,
479    0xb5, '.', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
480        '_', 's', 'i', 'z', 'e', 0xcc, 0xc0,
481    0xa9, '.', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e',
482        0xa8, 'O', 'p', 'e', 'n', 'C', 'L', ' ', 'C',
483    0xb1, '.', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '_',
484        'v', 'e', 'r', 's', 'i', 'o', 'n', 0x92, 0x03, 0x02,
485    0xb8, '.', 'm', 'a', 'x', '_', 'f', 'l', 'a', 't', '_', 'w', 'o', 'r', 'k',
486        'g', 'r', 'o', 'u', 'p', '_', 's', 'i', 'z', 'e', 0xcd, 0x01, 0x8c,
487    0xa5, '.', 'n', 'a', 'm', 'e', 0xa8, 't', 'e', 's', 't', 'e', 'r', 'e', 'k',
488    0xbb, '.', 'p', 'r', 'i', 'v', 'a', 't', 'e', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
489        '_', 'f', 'i', 'x', 'e', 'd', '_', 's', 'i', 'z', 'e', 0x20,
490    0xb4, '.', 'r', 'e', 'q', 'd', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_',
491            's', 'i', 'z', 'e', 0x93, 0x06, 0x09, 0x11,
492    0xab, '.', 's', 'g', 'p', 'r', '_', 'c', 'o', 'u', 'n', 't', 0x2b,
493    0xb1, '.', 's', 'g', 'p', 'r', '_', 's', 'p', 'i', 'l', 'l', '_',
494            'c', 'o', 'u', 'n', 't', 0x05,
495    0xa7, '.', 's', 'y', 'm', 'b', 'o', 'l',
496        0xab, 't', 'e', 's', 't', 'e', 'r', 'e', 'k', '.', 'k', 'd',
497    0xae, '.', 'v', 'e', 'c', '_', 't', 'y', 'p', 'e', '_', 'h', 'i', 'n', 't',
498        0xa5, 'i', 'n', 't', '1', '6',
499    0xab, '.', 'v', 'g', 'p', 'r', '_', 'c', 'o', 'u', 'n', 't', 0x09,
500    0xb1, '.', 'v', 'g', 'p', 'r', '_', 's', 'p', 'i', 'l', 'l', '_',
501            'c', 'o', 'u', 'n', 't', 0x08,
502    0xaf, '.', 'w', 'a', 'v', 'e', 'f', 'r', 'o', 'n', 't', '_', 's', 'i', 'z', 'e', 0x40,
503    0xb4, '.', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_', 's', 'i', 'z', 'e', '_',
504            'h', 'i', 'n', 't', 0x93, 0x04, 0x0b, 0x05,
505    // printf infos
506    0xad, 'a', 'm', 'd', 'h', 's', 'a', '.', 'p', 'r', 'i', 'n', 't', 'f', 0x92,
507        0xd9, 0x20, '2', ':', '4', ':', '4', ':', '4', ':', '4', ':', '4', ':','i', '=',
508        '%', 'd', ',', 'a', '=', '%', 'f', ',', 'b', '=', '%', 'f', ',',
509        'c', '=', '%', 'f', 0x0a,
510        0xaf, '1', ':', '1', ':', '4', ':', 'i', 'n', 'd', 'e', 'x', 'a', '%', 'd', 0x0a,
511    // version
512    0xae, 'a', 'm', 'd', 'h', 's', 'a', '.', 'v', 'e', 'r', 's', 'i', 'o', 'n',
513        0x92, 0x27, 0x34
514};
515
516static const cxbyte rocmMsgPackInput1[] =
517{
518    0x82,
519    0xae, 'a', 'm', 'd', 'h', 's', 'a', '.', 'k', 'e', 'r', 'n', 'e', 'l', 's',
520    0x91,
521    // kernel A
522    0xde, 0x00, 0x13,
523    0xa5, '.', 'a', 'r', 'g', 's',
524    // kernel args
525    0x95,
526    0x88,   // 0
527        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
528            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
529        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
530        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '0',
531        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x00,
532        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
533        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
534            0xa6, 'f', 'l', 'o', 'a', 't', '*',
535        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
536            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
537        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '3', '2',
538    0x88,   // 1
539        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
540            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
541        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
542        0xa5, '.', 'n', 'a', 'm', 'e', 0xa4, 'o', 'u', 't', '0',
543        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x00,
544        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
545        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
546            0xa6, 'f', 'l', 'o', 'a', 't', '*',
547        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
548            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
549        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '3', '2',
550    0x84,   // 2
551        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x70,
552        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
553        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
554            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
555            'o', 'f', 'f', 's', 'e', 't', '_', 'x',
556        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
557    0x84,   // 3
558        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x78,
559        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
560        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
561            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
562            'o', 'f', 'f', 's', 'e', 't', '_', 'y',
563        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
564    0x84,   // 4
565        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x80,
566        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
567        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
568            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
569            'o', 'f', 'f', 's', 'e', 't', '_', 'z',
570        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
571    0xb6, '.', 'd', 'e', 'v', 'i', 'c', 'e', '_', 'e', 'n', 'q', 'u', 'e', 'u', 'e', '_',
572        's', 'y', 'm', 'b', 'o', 'l', 0xa4, 'a', 'b', 'c', 'd',
573    0xb9, '.', 'g', 'r', 'o', 'u', 'p', '_', 's', 'e', 'g', 'm', 'e', 'n', 't', '_',
574        'f', 'i', 'x', 'e', 'd', '_', 's', 'i', 'z', 'e', 0xcc, 0xe7,
575    0xb6, '.', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
576        '_', 'a', 'l', 'i', 'g', 'n', 0x10,
577    0xb5, '.', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
578        '_', 's', 'i', 'z', 'e', 0xcc, 0xc0,
579    0xa9, '.', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e',
580        0xa8, 'O', 'p', 'e', 'n', 'C', 'L', ' ', 'C',
581    0xb1, '.', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '_',
582        'v', 'e', 'r', 's', 'i', 'o', 'n', 0x92, 0x03, 0x02,
583    0xb8, '.', 'm', 'a', 'x', '_', 'f', 'l', 'a', 't', '_', 'w', 'o', 'r', 'k',
584        'g', 'r', 'o', 'u', 'p', '_', 's', 'i', 'z', 'e', 0xcd, 0x01, 0x8c,
585    0xa5, '.', 'n', 'a', 'm', 'e', 0xa7, 'v', 'e', 'c', 't', 'o', 'r', 's',
586    0xbb, '.', 'p', 'r', 'i', 'v', 'a', 't', 'e', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
587        '_', 'f', 'i', 'x', 'e', 'd', '_', 's', 'i', 'z', 'e', 0xcd, 0x15, 0x2e,
588    0xb4, '.', 'r', 'e', 'q', 'd', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_',
589            's', 'i', 'z', 'e', 0x93, 0x06, 0x09, 0x11,
590    0xab, '.', 's', 'g', 'p', 'r', '_', 'c', 'o', 'u', 'n', 't', 0x2b,
591    0xb1, '.', 's', 'g', 'p', 'r', '_', 's', 'p', 'i', 'l', 'l', '_',
592            'c', 'o', 'u', 'n', 't', 0x05,
593    0xa7, '.', 's', 'y', 'm', 'b', 'o', 'l',
594        0xaa, 'v', 'e', 'c', 't', 'o', 'r', 's', '.', 'k', 'd',
595    0xae, '.', 'v', 'e', 'c', '_', 't', 'y', 'p', 'e', '_', 'h', 'i', 'n', 't',
596        0xa5, 'i', 'n', 't', '1', '6',
597    0xab, '.', 'v', 'g', 'p', 'r', '_', 'c', 'o', 'u', 'n', 't', 0x09,
598    0xb1, '.', 'v', 'g', 'p', 'r', '_', 's', 'p', 'i', 'l', 'l', '_',
599            'c', 'o', 'u', 'n', 't', 0x08,
600    0xaf, '.', 'w', 'a', 'v', 'e', 'f', 'r', 'o', 'n', 't', '_', 's', 'i', 'z', 'e', 0x40,
601    0xb4, '.', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_', 's', 'i', 'z', 'e', '_',
602            'h', 'i', 'n', 't', 0x93, 0x04, 0x0b, 0x05,
603    // version
604    0xae, 'a', 'm', 'd', 'h', 's', 'a', '.', 'v', 'e', 'r', 's', 'i', 'o', 'n',
605        0x92, 0x27, 0x34
606};
607
608static const ROCmMsgPackMDTestCase rocmMsgPackMDTestCases[] =
609{
610    {   // testcase 0
611        {
612            { 39, 52 },
613            {   // printfInfos
614                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" },
615                { 1, { 4 }, "indexa%d\n" },
616            },
617            {   // kernels
618                { // kernel 1
619                    "testerek", "testerek.kd",
620                    {   // args
621                        { "in0", "int8_t*", 8, 0, 0, ROCmValueKind::GLOBAL_BUFFER,
622                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
623                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
624                            true, false, false, false },
625                        { "in1", "uchar*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
626                            ROCmValueType::UINT8, ROCmAddressSpace::CONSTANT,
627                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
628                            false, false, true, false },
629                        { "in2", "int16*", 8, 16, 0, ROCmValueKind::GLOBAL_BUFFER,
630                            ROCmValueType::INT16, ROCmAddressSpace::PRIVATE,
631                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
632                            false, true, false, false },
633                        { "in3", "uint16_t*", 8, 24, 0, ROCmValueKind::GLOBAL_BUFFER,
634                            ROCmValueType::UINT16, ROCmAddressSpace::LOCAL,
635                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
636                            true, false, false, false },
637                        { "in3x", "half*", 8, 32, 8, ROCmValueKind::GLOBAL_BUFFER,
638                            ROCmValueType::FLOAT16, ROCmAddressSpace::LOCAL,
639                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
640                            true, false, false, false },
641                        { "in4", "int32*", 8, 40, 0, ROCmValueKind::GLOBAL_BUFFER,
642                            ROCmValueType::INT32, ROCmAddressSpace::GENERIC,
643                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
644                            true, false, false, false },
645                        { "in5", "uint32*", 8, 48, 0, ROCmValueKind::GLOBAL_BUFFER,
646                            ROCmValueType::UINT32, ROCmAddressSpace::REGION,
647                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
648                            true, false, false, false },
649                        { "in6", "float*", 8, 56, 0, ROCmValueKind::QUEUE,
650                            ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
651                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
652                            true, false, false, false },
653                        { "in7", "long*", 8, 64, 0, ROCmValueKind::PIPE,
654                            ROCmValueType::INT64, ROCmAddressSpace::GLOBAL,
655                            ROCmAccessQual::READ_ONLY, ROCmAccessQual::DEFAULT,
656                            false, false, false, true },
657                        { "in8", "image2d_t", 8, 72, 0, ROCmValueKind::IMAGE,
658                            ROCmValueType::UINT64, ROCmAddressSpace::GLOBAL,
659                            ROCmAccessQual::READ_WRITE, ROCmAccessQual::DEFAULT,
660                            false, false, false, false },
661                        { "in9", "sampler_t", 8, 80, 0, ROCmValueKind::SAMPLER,
662                            ROCmValueType::FLOAT64, ROCmAddressSpace::GLOBAL,
663                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
664                            false, false, false, false },
665                        { "in10", "struc*", 8, 88, 0, ROCmValueKind::DYN_SHARED_PTR,
666                            ROCmValueType::STRUCTURE, ROCmAddressSpace::GLOBAL,
667                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
668                            false, false, false, false },
669                        { "n", "int", 4, 96, 0, ROCmValueKind::BY_VALUE,
670                            ROCmValueType::INT32, ROCmAddressSpace::NONE,
671                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
672                            false, false, false, false },
673                        { "", "", 8, 112, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
674                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
675                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
676                            false, false, false, false },
677                        { "", "", 8, 120, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
678                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
679                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
680                            false, false, false, false },
681                        { "", "", 8, 128, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
682                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
683                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
684                            false, false, false, false },
685                        { "", "", 8, 136, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
686                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
687                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
688                            false, false, false, false },
689                        { "", "", 8, 144, 0, ROCmValueKind::HIDDEN_DEFAULT_QUEUE,
690                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
691                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
692                            false, false, false, false },
693                        { "", "", 8, 152, 0, ROCmValueKind::HIDDEN_COMPLETION_ACTION,
694                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
695                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
696                            false, false, false, false },
697                        { "", "", 8, 160, 0, ROCmValueKind::HIDDEN_MULTIGRID_SYNC_ARG,
698                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
699                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
700                            false, false, false, false },
701                        { "ix0", "int8_t*", 8, 168, 0, ROCmValueKind::GLOBAL_BUFFER,
702                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
703                            ROCmAccessQual::READ_ONLY, ROCmAccessQual::WRITE_ONLY,
704                            false, false, false, false },
705                        { "ix1", "int8_t*", 8, 176, 0, ROCmValueKind::GLOBAL_BUFFER,
706                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
707                            ROCmAccessQual::WRITE_ONLY, ROCmAccessQual::READ_WRITE,
708                            false, false, false, false }
709                    },
710                    "OpenCL C", { 3, 2 }, { 6, 9, 17 }, { 4, 11, 5 }, "int16", "",
711                    192, 72, 32, 16, 64, 43, 9, 396, { 0, 0, 0 }, 5, 8, "abcd"
712                }
713            }
714        },
715        {
716            { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, 0, 0, 0, { }, 0, 0, 0, 0, { } }
717        },
718        sizeof(rocmMsgPackInput0), rocmMsgPackInput0,
719        true, ""
720    },
721    {   // testcase 1
722        {
723            { 39, 52 },
724            { },
725            {   // kernels
726                { // kernel 1
727                    "vectors", "vectors.kd",
728                    {   // args
729                        { "in0", "float*", 8, 0, 0, ROCmValueKind::GLOBAL_BUFFER,
730                            ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
731                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
732                            true, false, false, false },
733                        { "out0", "float*", 8, 0, 0, ROCmValueKind::GLOBAL_BUFFER,
734                            ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
735                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
736                            true, false, false, false },
737                        { "", "", 8, 112, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
738                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
739                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
740                            false, false, false, false },
741                        { "", "", 8, 120, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
742                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
743                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
744                            false, false, false, false },
745                        { "", "", 8, 128, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
746                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
747                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
748                            false, false, false, false },
749                    },
750                    "OpenCL C", { 3, 2 }, { 6, 9, 17 }, { 4, 11, 5 }, "int16", "",
751                    192, BINGEN64_DEFAULT, BINGEN64_DEFAULT,
752                    16, 64, 43, 9, 396, { 0, 0, 0 }, 5, 8, "abcd"
753                }
754            }
755        },
756        {
757            { 231, 5422, 0, 0, 0, { }, 0, 0, 0, 0, { } }
758        },
759        sizeof(rocmMsgPackInput1), rocmMsgPackInput1,
760        true, ""
761    }
762};
763
764static void testParseROCmMsgPackMDCase(cxuint testId, const ROCmMsgPackMDTestCase& testCase)
765{
766    std::vector<const ROCmKernelDescriptor*> kdescs(testCase.inputKDescs.size());
767    for (size_t i = 0; i < testCase.inputKDescs.size(); i++)
768        kdescs[i] = testCase.inputKDescs.data()+i;
769   
770    bool good = true;
771    std::string error;
772    std::vector<cxbyte> result;
773    try
774    { generateROCmMetadataMsgPack(testCase.input, kdescs.data(), result); }
775    catch(const std::exception& ex)
776    {
777        good = false;
778        error = ex.what();
779    }
780   
781    char testName[30];
782    snprintf(testName, 30, "Test #%u", testId);
783    assertValue(testName, "good", testCase.good, good);
784    assertString(testName, "error", testCase.error, error.c_str());
785    if (!good)
786        // do not check if test failed
787        return;
788   
789    assertArray(testName, "result", Array<cxbyte>(testCase.expected,
790                        testCase.expected + testCase.expectedSize), result);
791}
792
793int main(int argc, const char** argv)
794{
795    int retVal = 0;
796    retVal |= callTest(testMsgPackBytesWrite);
797    for (cxuint i = 0; i < sizeof(rocmMsgPackMDTestCases)/
798                            sizeof(ROCmMsgPackMDTestCase); i++)
799        try
800        { testParseROCmMsgPackMDCase(i, rocmMsgPackMDTestCases[i]); }
801        catch(const std::exception& ex)
802        {
803            std::cerr << ex.what() << std::endl;
804            retVal = 1;
805        }
806    return retVal;
807}
Note: See TracBrowser for help on using the repository browser.