1#!/usr/bin/env python3
2#  Copyright 2016 Google Inc. All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS-IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16from fruit_test_common import *
17
18COMMON_DEFINITIONS = '''
19    #include "test_common.h"
20
21    using namespace std;
22    using namespace fruit::impl;
23    '''
24
25def test_invoke_no_args():
26    source = '''
27        int main() {
28          // This is static because the lambda must have no captures.
29          static int num_invocations = 0;
30
31          auto l = []() {
32            ++num_invocations;
33          };
34          using L = decltype(l);
35          LambdaInvoker::invoke<L>();
36          Assert(num_invocations == 1);
37        }
38        '''
39    expect_success(
40        COMMON_DEFINITIONS,
41        source,
42        locals())
43
44def test_invoke_some_args():
45    source = '''
46        int main() {
47          // This is static because the lambda must have no captures.
48          static int num_invocations = 0;
49
50          auto l = [](int n, double x) {
51            Assert(n == 5);
52            Assert(x == 3.14);
53            ++num_invocations;
54          };
55          using L = decltype(l);
56          LambdaInvoker::invoke<L>(5, 3.14);
57          Assert(num_invocations == 1);
58        }
59        '''
60    expect_success(
61        COMMON_DEFINITIONS,
62        source,
63        locals())
64
65if __name__== '__main__':
66    main(__file__)
67