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 Workervoid 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 WorkerTEST(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