少年修仙传客户端基础资源
hch
2024-04-11 4c71d74b77c9eb62a0323698c9a0db3b641a917e
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
#if ENABLE_UNIT_TESTS
 
#include "UnitTest++.h"
 
#include "../ThreadLocalValue-c-api.h"
#include "../../ThreadLocalValue.h"
#include "../../Thread.h"
 
SUITE(ThreadLocalValue)
{
    static const int TEST_INT_VALUE = 7;
 
    struct ThreadLocalValueFixture
    {
        ThreadLocalValueFixture()
        {
            localObject = NULL;
            intValue = TEST_INT_VALUE;
            intCopyValue = 0;
            intPtr = &intCopyValue;
            localObject = UnityPalThreadLocalValueNew();
        }
 
        ~ThreadLocalValueFixture()
        {
            UnityPalThreadLocalValueDelete(localObject);
        }
 
        UnityPalThreadLocalValue* localObject;
        int intValue;
        int intCopyValue;
        int* intPtr;
 
        struct ThreadLocalTestData
        {
            UnityPalThreadLocalValue* threadLocalVariable;
            int valueOnAnotherThread;
        };
 
        static void CheckThreadLocalValueOnAnotherThread(void* arg)
        {
            ThreadLocalTestData* data = static_cast<ThreadLocalTestData*>(arg);
            int* checkingIntValue;
            checkingIntValue = &data->valueOnAnotherThread;
            UnityPalThreadLocalValueGetValue(data->threadLocalVariable, reinterpret_cast<void**>(&checkingIntValue));
        }
 
        static void SetThreadLocalValueOnAnotherThread(void* arg)
        {
            ThreadLocalTestData* data = static_cast<ThreadLocalTestData*>(arg);
            int settingIntValue = data->valueOnAnotherThread;
            UnityPalThreadLocalValueSetValue(data->threadLocalVariable, &settingIntValue);
        }
    };
 
    TEST_FIXTURE(ThreadLocalValueFixture, InstantiateNewReturnsValidPointer)
    {
        CHECK_NOT_NULL(localObject);
    }
 
    TEST_FIXTURE(ThreadLocalValueFixture, SetValueNormalReturnsSuccess)
    {
        CHECK_EQUAL(il2cpp::os::kErrorCodeSuccess, UnityPalThreadLocalValueSetValue(localObject, &intValue));
    }
 
    TEST_FIXTURE(ThreadLocalValueFixture, GetValueReturnsSuccess)
    {
        UnityPalThreadLocalValueSetValue(localObject, &intValue);
 
        CHECK_EQUAL(il2cpp::os::kErrorCodeSuccess, UnityPalThreadLocalValueGetValue(localObject, (void**)&intPtr));
    }
 
    TEST_FIXTURE(ThreadLocalValueFixture, GetValueMatchedValueUsedInSet)
    {
        UnityPalThreadLocalValueSetValue(localObject, &intValue);
        UnityPalThreadLocalValueGetValue(localObject, (void**)&intPtr);
 
        CHECK_EQUAL(TEST_INT_VALUE, *intPtr);
    }
 
    TEST_FIXTURE(ThreadLocalValueFixture, ApiSetValueMatchesClassSetValue)
    {
        CHECK_EQUAL(localObject->SetValue(&intValue), UnityPalThreadLocalValueSetValue(localObject, &intValue));
    }
 
    TEST_FIXTURE(ThreadLocalValueFixture, ApiGetValueMatchesClassGetValue)
    {
        UnityPalThreadLocalValueSetValue(localObject, &intValue);
 
        CHECK_EQUAL(localObject->GetValue((void**)&intPtr), UnityPalThreadLocalValueGetValue(localObject, (void**)&intPtr));
    }
 
    TEST_FIXTURE(ThreadLocalValueFixture, ConfirmValueSetOnThisThreadIsDifferentFromValueOnAnotherThread)
    {
        il2cpp::os::Thread::Init();
        ThreadLocalTestData data;
        data.threadLocalVariable = localObject;
        data.valueOnAnotherThread = 0;
 
        il2cpp::os::Thread thread;
        thread.Run(CheckThreadLocalValueOnAnotherThread, &data);
        thread.Join();
 
        CHECK_NOT_EQUAL(TEST_INT_VALUE, data.valueOnAnotherThread);
    }
 
    TEST_FIXTURE(ThreadLocalValueFixture, ConfirmValueSetOnAnotherThreadIsDifferentFromValueSetOnThisThread)
    {
        UnityPalThreadLocalValueSetValue(localObject, &intValue);
 
        ThreadLocalTestData data;
        data.threadLocalVariable = localObject;
        data.valueOnAnotherThread = 42;
 
        il2cpp::os::Thread thread;
        thread.Run(SetThreadLocalValueOnAnotherThread, &data);
        thread.Join();
 
        UnityPalThreadLocalValueGetValue(localObject, (void**)&intPtr);
 
        CHECK_EQUAL(TEST_INT_VALUE, *intPtr);
    }
}
 
#endif // ENABLE_UNIT_TESTS