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