summaryrefslogtreecommitdiff
path: root/src/contrib/SDL-3.2.20/test/testautomation_guid.c
blob: 98b898c8113782d2070a221a34f831657e4aa17e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/**
 * GUID test suite
 */

#include <SDL3/SDL.h>
#include <SDL3/SDL_test.h>
#include "testautomation_suites.h"

#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif

/* ================= Test Case Implementation ================== */

/* Helper functions */

#define NUM_TEST_GUIDS 5

#ifndef UINT64_C
#ifdef _MSC_VER
#define UINT64_C(x) x##ui64
#elif defined(_LP64)
#define UINT64_C(x) x##UL
#else
#define UINT64_C(x) x##ULL
#endif
#endif

static struct
{
    char *str;
    Uint64 upper, lower;
} test_guids[NUM_TEST_GUIDS] = {
    { "0000000000000000"
      "ffffffffffffffff",
      UINT64_C(0x0000000000000000), UINT64_C(0xffffffffffffffff) },
    { "0011223344556677"
      "8091a2b3c4d5e6f0",
      UINT64_C(0x0011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) },
    { "a011223344556677"
      "8091a2b3c4d5e6f0",
      UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) },
    { "a011223344556677"
      "8091a2b3c4d5e6f1",
      UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f1) },
    { "a011223344556677"
      "8191a2b3c4d5e6f0",
      UINT64_C(0xa011223344556677), UINT64_C(0x8191a2b3c4d5e6f0) },
};

static void
upper_lower_to_bytestring(Uint8 *out, Uint64 upper, Uint64 lower)
{
    Uint64 values[2];
    int i, k;

    values[0] = upper;
    values[1] = lower;

    for (i = 0; i < 2; ++i) {
        Uint64 v = values[i];

        for (k = 0; k < 8; ++k) {
            *out++ = v >> 56;
            v <<= 8;
        }
    }
}

/* Test case functions */

/**
 * Check String-to-GUID conversion
 *
 * \sa SDL_StringToGUID
 */
static int SDLCALL
TestStringToGUID(void *arg)
{
    int i;

    SDLTest_AssertPass("Call to SDL_StringToGUID");
    for (i = 0; i < NUM_TEST_GUIDS; ++i) {
        Uint8 expected[16];
        SDL_GUID guid;

        upper_lower_to_bytestring(expected,
                                  test_guids[i].upper, test_guids[i].lower);

        guid = SDL_StringToGUID(test_guids[i].str);
        SDLTest_AssertCheck(SDL_memcmp(expected, guid.data, 16) == 0, "GUID from string, GUID was: '%s'", test_guids[i].str);
    }

    return TEST_COMPLETED;
}

/**
 * Check GUID-to-String conversion
 *
 * \sa SDL_GUIDToString
 */
static int SDLCALL
TestGUIDToString(void *arg)
{
    int i;

    SDLTest_AssertPass("Call to SDL_GUIDToString");
    for (i = 0; i < NUM_TEST_GUIDS; ++i) {
        char guid_str[33];
        SDL_GUID guid;

        upper_lower_to_bytestring(guid.data,
                                  test_guids[i].upper, test_guids[i].lower);

        SDL_GUIDToString(guid, guid_str, sizeof(guid_str));
        SDLTest_AssertCheck(SDL_strcmp(guid_str, test_guids[i].str) == 0, "Checking whether strings match, expected %s, got %s\n", test_guids[i].str, guid_str);
    }

    return TEST_COMPLETED;
}

/* ================= Test References ================== */

/* GUID routine test cases */
static const SDLTest_TestCaseReference guidTest1 = {
    TestStringToGUID, "TestStringToGUID", "Call to SDL_StringToGUID", TEST_ENABLED
};

static const SDLTest_TestCaseReference guidTest2 = {
    TestGUIDToString, "TestGUIDToString", "Call to SDL_GUIDToString", TEST_ENABLED
};

/* Sequence of GUID routine test cases */
static const SDLTest_TestCaseReference *guidTests[] = {
    &guidTest1,
    &guidTest2,
    NULL
};

/* GUID routine test suite (global) */
SDLTest_TestSuiteReference guidTestSuite = {
    "GUID",
    NULL,
    guidTests,
    NULL
};