xref: /aosp_15_r20/external/angle/src/libANGLE/UnlockedTailCall_unittest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2023 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // UnlockedTailCall_unittest.cpp: Unit tests of the UnlockedTailCall class.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include <gtest/gtest.h>
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker namespace angle
14*8975f5c5SAndroid Build Coastguard Worker {
SetUpTailCall(UnlockedTailCall * unlockedTailCall,int * result)15*8975f5c5SAndroid Build Coastguard Worker void SetUpTailCall(UnlockedTailCall *unlockedTailCall, int *result)
16*8975f5c5SAndroid Build Coastguard Worker {
17*8975f5c5SAndroid Build Coastguard Worker     unlockedTailCall->add([result](void *resultOut) {
18*8975f5c5SAndroid Build Coastguard Worker         (void)resultOut;
19*8975f5c5SAndroid Build Coastguard Worker         ++*result;
20*8975f5c5SAndroid Build Coastguard Worker     });
21*8975f5c5SAndroid Build Coastguard Worker }
22*8975f5c5SAndroid Build Coastguard Worker 
23*8975f5c5SAndroid Build Coastguard Worker // Test basic functionality
TEST(UnlockedTailCall,Basic)24*8975f5c5SAndroid Build Coastguard Worker TEST(UnlockedTailCall, Basic)
25*8975f5c5SAndroid Build Coastguard Worker {
26*8975f5c5SAndroid Build Coastguard Worker     int a = 10;
27*8975f5c5SAndroid Build Coastguard Worker     int b = 500;
28*8975f5c5SAndroid Build Coastguard Worker 
29*8975f5c5SAndroid Build Coastguard Worker     UnlockedTailCall unlockedTailCall;
30*8975f5c5SAndroid Build Coastguard Worker     ASSERT_FALSE(unlockedTailCall.any());
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker     SetUpTailCall(&unlockedTailCall, &a);
33*8975f5c5SAndroid Build Coastguard Worker     ASSERT_TRUE(unlockedTailCall.any());
34*8975f5c5SAndroid Build Coastguard Worker 
35*8975f5c5SAndroid Build Coastguard Worker     SetUpTailCall(&unlockedTailCall, &b);
36*8975f5c5SAndroid Build Coastguard Worker     ASSERT_TRUE(unlockedTailCall.any());
37*8975f5c5SAndroid Build Coastguard Worker 
38*8975f5c5SAndroid Build Coastguard Worker     unlockedTailCall.run(nullptr);
39*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(a, 11);
40*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(b, 501);
41*8975f5c5SAndroid Build Coastguard Worker }
42*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
43