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

Last change on this file since 4959 was 4959, checked in by matszpk, 13 months ago

CLRadeonExtender: ROCmBin: First testcase for generateROCmMetadataMsgPack. Store whole main object of the metadata.

File size: 33.3 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 ROCmMsgPackMDTestCase rocmMsgPackMDTestCases[] =
517{
518    {   // testcase 0
519        {
520            { 39, 52 },
521            {   // printfInfos
522                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" },
523                { 1, { 4 }, "indexa%d\n" },
524            },
525            {   // kernels
526                { // kernel 1
527                    "testerek", "testerek.kd",
528                    {   // args
529                        { "in0", "int8_t*", 8, 0, 0, ROCmValueKind::GLOBAL_BUFFER,
530                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
531                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
532                            true, false, false, false },
533                        { "in1", "uchar*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
534                            ROCmValueType::UINT8, ROCmAddressSpace::CONSTANT,
535                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
536                            false, false, true, false },
537                        { "in2", "int16*", 8, 16, 0, ROCmValueKind::GLOBAL_BUFFER,
538                            ROCmValueType::INT16, ROCmAddressSpace::PRIVATE,
539                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
540                            false, true, false, false },
541                        { "in3", "uint16_t*", 8, 24, 0, ROCmValueKind::GLOBAL_BUFFER,
542                            ROCmValueType::UINT16, ROCmAddressSpace::LOCAL,
543                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
544                            true, false, false, false },
545                        { "in3x", "half*", 8, 32, 8, ROCmValueKind::GLOBAL_BUFFER,
546                            ROCmValueType::FLOAT16, ROCmAddressSpace::LOCAL,
547                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
548                            true, false, false, false },
549                        { "in4", "int32*", 8, 40, 0, ROCmValueKind::GLOBAL_BUFFER,
550                            ROCmValueType::INT32, ROCmAddressSpace::GENERIC,
551                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
552                            true, false, false, false },
553                        { "in5", "uint32*", 8, 48, 0, ROCmValueKind::GLOBAL_BUFFER,
554                            ROCmValueType::UINT32, ROCmAddressSpace::REGION,
555                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
556                            true, false, false, false },
557                        { "in6", "float*", 8, 56, 0, ROCmValueKind::QUEUE,
558                            ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
559                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
560                            true, false, false, false },
561                        { "in7", "long*", 8, 64, 0, ROCmValueKind::PIPE,
562                            ROCmValueType::INT64, ROCmAddressSpace::GLOBAL,
563                            ROCmAccessQual::READ_ONLY, ROCmAccessQual::DEFAULT,
564                            false, false, false, true },
565                        { "in8", "image2d_t", 8, 72, 0, ROCmValueKind::IMAGE,
566                            ROCmValueType::UINT64, ROCmAddressSpace::GLOBAL,
567                            ROCmAccessQual::READ_WRITE, ROCmAccessQual::DEFAULT,
568                            false, false, false, false },
569                        { "in9", "sampler_t", 8, 80, 0, ROCmValueKind::SAMPLER,
570                            ROCmValueType::FLOAT64, ROCmAddressSpace::GLOBAL,
571                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
572                            false, false, false, false },
573                        { "in10", "struc*", 8, 88, 0, ROCmValueKind::DYN_SHARED_PTR,
574                            ROCmValueType::STRUCTURE, ROCmAddressSpace::GLOBAL,
575                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
576                            false, false, false, false },
577                        { "n", "int", 4, 96, 0, ROCmValueKind::BY_VALUE,
578                            ROCmValueType::INT32, ROCmAddressSpace::NONE,
579                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
580                            false, false, false, false },
581                        { "", "", 8, 112, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
582                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
583                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
584                            false, false, false, false },
585                        { "", "", 8, 120, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
586                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
587                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
588                            false, false, false, false },
589                        { "", "", 8, 128, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
590                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
591                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
592                            false, false, false, false },
593                        { "", "", 8, 136, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
594                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
595                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
596                            false, false, false, false },
597                        { "", "", 8, 144, 0, ROCmValueKind::HIDDEN_DEFAULT_QUEUE,
598                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
599                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
600                            false, false, false, false },
601                        { "", "", 8, 152, 0, ROCmValueKind::HIDDEN_COMPLETION_ACTION,
602                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
603                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
604                            false, false, false, false },
605                        { "", "", 8, 160, 0, ROCmValueKind::HIDDEN_MULTIGRID_SYNC_ARG,
606                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
607                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
608                            false, false, false, false },
609                        { "ix0", "int8_t*", 8, 168, 0, ROCmValueKind::GLOBAL_BUFFER,
610                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
611                            ROCmAccessQual::READ_ONLY, ROCmAccessQual::WRITE_ONLY,
612                            false, false, false, false },
613                        { "ix1", "int8_t*", 8, 176, 0, ROCmValueKind::GLOBAL_BUFFER,
614                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
615                            ROCmAccessQual::WRITE_ONLY, ROCmAccessQual::READ_WRITE,
616                            false, false, false, false }
617                    },
618                    "OpenCL C", { 3, 2 }, { 6, 9, 17 }, { 4, 11, 5 }, "int16", "",
619                    192, 72, 32, 16, 64, 43, 9, 396, { 0, 0, 0 }, 5, 8, "abcd"
620                }
621            }
622        },
623        {
624            {
625                BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, 0, 0, 0, { },
626                0, 0, 0, 0, { }
627            }
628        },
629        sizeof(rocmMsgPackInput0), rocmMsgPackInput0,
630        true, ""
631    }
632};
633
634static void testParseROCmMsgPackMDCase(cxuint testId, const ROCmMsgPackMDTestCase& testCase)
635{
636    std::vector<const ROCmKernelDescriptor*> kdescs(testCase.inputKDescs.size());
637    for (size_t i = 0; i < testCase.inputKDescs.size(); i++)
638        kdescs[i] = testCase.inputKDescs.data()+i;
639   
640    bool good = true;
641    std::string error;
642    std::vector<cxbyte> result;
643    try
644    { generateROCmMetadataMsgPack(testCase.input, kdescs.data(), result); }
645    catch(const std::exception& ex)
646    {
647        good = false;
648        error = ex.what();
649    }
650   
651    char testName[30];
652    snprintf(testName, 30, "Test #%u", testId);
653    assertValue(testName, "good", testCase.good, good);
654    assertString(testName, "error", testCase.error, error.c_str());
655    if (!good)
656        // do not check if test failed
657        return;
658   
659    assertArray(testName, "result", Array<cxbyte>(testCase.expected,
660                        testCase.expected + testCase.expectedSize), result);
661}
662
663int main(int argc, const char** argv)
664{
665    int retVal = 0;
666    retVal |= callTest(testMsgPackBytesWrite);
667    for (cxuint i = 0; i < sizeof(rocmMsgPackMDTestCases)/
668                            sizeof(ROCmMsgPackMDTestCase); i++)
669        try
670        { testParseROCmMsgPackMDCase(i, rocmMsgPackMDTestCases[i]); }
671        catch(const std::exception& ex)
672        {
673            std::cerr << ex.what() << std::endl;
674            retVal = 1;
675        }
676    return retVal;
677}
Note: See TracBrowser for help on using the repository browser.