437
static void init_native_list(UserDefNativeListUnion *cvalue)
440
switch (cvalue->kind) {
441
case USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER: {
442
intList **list = &cvalue->integer;
443
for (i = 0; i < 32; i++) {
444
*list = g_new0(intList, 1);
446
(*list)->next = NULL;
447
list = &(*list)->next;
451
case USER_DEF_NATIVE_LIST_UNION_KIND_S8: {
452
int8List **list = &cvalue->s8;
453
for (i = 0; i < 32; i++) {
454
*list = g_new0(int8List, 1);
456
(*list)->next = NULL;
457
list = &(*list)->next;
461
case USER_DEF_NATIVE_LIST_UNION_KIND_S16: {
462
int16List **list = &cvalue->s16;
463
for (i = 0; i < 32; i++) {
464
*list = g_new0(int16List, 1);
466
(*list)->next = NULL;
467
list = &(*list)->next;
471
case USER_DEF_NATIVE_LIST_UNION_KIND_S32: {
472
int32List **list = &cvalue->s32;
473
for (i = 0; i < 32; i++) {
474
*list = g_new0(int32List, 1);
476
(*list)->next = NULL;
477
list = &(*list)->next;
481
case USER_DEF_NATIVE_LIST_UNION_KIND_S64: {
482
int64List **list = &cvalue->s64;
483
for (i = 0; i < 32; i++) {
484
*list = g_new0(int64List, 1);
486
(*list)->next = NULL;
487
list = &(*list)->next;
491
case USER_DEF_NATIVE_LIST_UNION_KIND_U8: {
492
uint8List **list = &cvalue->u8;
493
for (i = 0; i < 32; i++) {
494
*list = g_new0(uint8List, 1);
496
(*list)->next = NULL;
497
list = &(*list)->next;
501
case USER_DEF_NATIVE_LIST_UNION_KIND_U16: {
502
uint16List **list = &cvalue->u16;
503
for (i = 0; i < 32; i++) {
504
*list = g_new0(uint16List, 1);
506
(*list)->next = NULL;
507
list = &(*list)->next;
511
case USER_DEF_NATIVE_LIST_UNION_KIND_U32: {
512
uint32List **list = &cvalue->u32;
513
for (i = 0; i < 32; i++) {
514
*list = g_new0(uint32List, 1);
516
(*list)->next = NULL;
517
list = &(*list)->next;
521
case USER_DEF_NATIVE_LIST_UNION_KIND_U64: {
522
uint64List **list = &cvalue->u64;
523
for (i = 0; i < 32; i++) {
524
*list = g_new0(uint64List, 1);
526
(*list)->next = NULL;
527
list = &(*list)->next;
531
case USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN: {
532
boolList **list = &cvalue->boolean;
533
for (i = 0; i < 32; i++) {
534
*list = g_new0(boolList, 1);
535
(*list)->value = (i % 3 == 0);
536
(*list)->next = NULL;
537
list = &(*list)->next;
541
case USER_DEF_NATIVE_LIST_UNION_KIND_STRING: {
542
strList **list = &cvalue->string;
543
for (i = 0; i < 32; i++) {
544
*list = g_new0(strList, 1);
545
(*list)->value = g_strdup_printf("%d", i);
546
(*list)->next = NULL;
547
list = &(*list)->next;
551
case USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER: {
552
numberList **list = &cvalue->number;
553
for (i = 0; i < 32; i++) {
554
*list = g_new0(numberList, 1);
555
(*list)->value = (double)i / 3;
556
(*list)->next = NULL;
557
list = &(*list)->next;
562
g_assert_not_reached();
566
static void check_native_list(QObject *qobj,
567
UserDefNativeListUnionKind kind)
574
g_assert(qobject_type(qobj) == QTYPE_QDICT);
575
qdict = qobject_to_qdict(qobj);
577
g_assert(qdict_haskey(qdict, "data"));
578
qlist = qlist_copy(qobject_to_qlist(qdict_get(qdict, "data")));
581
case USER_DEF_NATIVE_LIST_UNION_KIND_S8:
582
case USER_DEF_NATIVE_LIST_UNION_KIND_S16:
583
case USER_DEF_NATIVE_LIST_UNION_KIND_S32:
584
case USER_DEF_NATIVE_LIST_UNION_KIND_S64:
585
case USER_DEF_NATIVE_LIST_UNION_KIND_U8:
586
case USER_DEF_NATIVE_LIST_UNION_KIND_U16:
587
case USER_DEF_NATIVE_LIST_UNION_KIND_U32:
588
case USER_DEF_NATIVE_LIST_UNION_KIND_U64:
589
/* all integer elements in JSON arrays get stored into QInts when
590
* we convert to QObjects, so we can check them all in the same
591
* fashion, so simply fall through here
593
case USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER:
594
for (i = 0; i < 32; i++) {
597
tmp = qlist_peek(qlist);
599
qvalue = qobject_to_qint(tmp);
600
g_assert_cmpint(qint_get_int(qvalue), ==, i);
601
qobject_decref(qlist_pop(qlist));
604
case USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN:
605
for (i = 0; i < 32; i++) {
608
tmp = qlist_peek(qlist);
610
qvalue = qobject_to_qbool(tmp);
611
g_assert_cmpint(qbool_get_int(qvalue), ==, (i % 3 == 0) ? 1 : 0);
612
qobject_decref(qlist_pop(qlist));
615
case USER_DEF_NATIVE_LIST_UNION_KIND_STRING:
616
for (i = 0; i < 32; i++) {
620
tmp = qlist_peek(qlist);
622
qvalue = qobject_to_qstring(tmp);
623
sprintf(str, "%d", i);
624
g_assert_cmpstr(qstring_get_str(qvalue), ==, str);
625
qobject_decref(qlist_pop(qlist));
628
case USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER:
629
for (i = 0; i < 32; i++) {
632
GString *double_expected = g_string_new("");
633
GString *double_actual = g_string_new("");
635
tmp = qlist_peek(qlist);
637
qvalue = qobject_to_qfloat(tmp);
638
g_string_printf(double_expected, "%.6f", (double)i / 3);
639
g_string_printf(double_actual, "%.6f", qfloat_get_double(qvalue));
640
g_assert_cmpstr(double_actual->str, ==, double_expected->str);
642
qobject_decref(qlist_pop(qlist));
643
g_string_free(double_expected, true);
644
g_string_free(double_actual, true);
648
g_assert_not_reached();
653
static void test_native_list(TestOutputVisitorData *data,
655
UserDefNativeListUnionKind kind)
657
UserDefNativeListUnion *cvalue = g_new0(UserDefNativeListUnion, 1);
662
init_native_list(cvalue);
664
visit_type_UserDefNativeListUnion(data->ov, &cvalue, NULL, &err);
665
g_assert(err == NULL);
667
obj = qmp_output_get_qobject(data->qov);
668
check_native_list(obj, cvalue->kind);
669
qapi_free_UserDefNativeListUnion(cvalue);
673
static void test_visitor_out_native_list_int(TestOutputVisitorData *data,
676
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER);
679
static void test_visitor_out_native_list_int8(TestOutputVisitorData *data,
682
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S8);
685
static void test_visitor_out_native_list_int16(TestOutputVisitorData *data,
688
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S16);
691
static void test_visitor_out_native_list_int32(TestOutputVisitorData *data,
694
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S32);
697
static void test_visitor_out_native_list_int64(TestOutputVisitorData *data,
700
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S64);
703
static void test_visitor_out_native_list_uint8(TestOutputVisitorData *data,
706
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U8);
709
static void test_visitor_out_native_list_uint16(TestOutputVisitorData *data,
712
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U16);
715
static void test_visitor_out_native_list_uint32(TestOutputVisitorData *data,
718
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U32);
721
static void test_visitor_out_native_list_uint64(TestOutputVisitorData *data,
724
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U64);
727
static void test_visitor_out_native_list_bool(TestOutputVisitorData *data,
730
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN);
733
static void test_visitor_out_native_list_str(TestOutputVisitorData *data,
736
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_STRING);
739
static void test_visitor_out_native_list_number(TestOutputVisitorData *data,
742
test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER);
434
745
static void output_visitor_test_add(const char *testpath,
435
746
TestOutputVisitorData *data,
436
747
void (*test_func)(TestOutputVisitorData *data, const void *user_data))
471
782
&out_visitor_data, test_visitor_out_list_qapi_free);
472
783
output_visitor_test_add("/visitor/output/union",
473
784
&out_visitor_data, test_visitor_out_union);
785
output_visitor_test_add("/visitor/output/native_list/int",
786
&out_visitor_data, test_visitor_out_native_list_int);
787
output_visitor_test_add("/visitor/output/native_list/int8",
788
&out_visitor_data, test_visitor_out_native_list_int8);
789
output_visitor_test_add("/visitor/output/native_list/int16",
790
&out_visitor_data, test_visitor_out_native_list_int16);
791
output_visitor_test_add("/visitor/output/native_list/int32",
792
&out_visitor_data, test_visitor_out_native_list_int32);
793
output_visitor_test_add("/visitor/output/native_list/int64",
794
&out_visitor_data, test_visitor_out_native_list_int64);
795
output_visitor_test_add("/visitor/output/native_list/uint8",
796
&out_visitor_data, test_visitor_out_native_list_uint8);
797
output_visitor_test_add("/visitor/output/native_list/uint16",
798
&out_visitor_data, test_visitor_out_native_list_uint16);
799
output_visitor_test_add("/visitor/output/native_list/uint32",
800
&out_visitor_data, test_visitor_out_native_list_uint32);
801
output_visitor_test_add("/visitor/output/native_list/uint64",
802
&out_visitor_data, test_visitor_out_native_list_uint64);
803
output_visitor_test_add("/visitor/output/native_list/bool",
804
&out_visitor_data, test_visitor_out_native_list_bool);
805
output_visitor_test_add("/visitor/output/native_list/string",
806
&out_visitor_data, test_visitor_out_native_list_str);
807
output_visitor_test_add("/visitor/output/native_list/number",
808
&out_visitor_data, test_visitor_out_native_list_number);