test/tools/javac/lambda/LambdaCapture01.java

Tue, 12 Mar 2013 16:02:43 +0000

author
mcimadamore
date
Tue, 12 Mar 2013 16:02:43 +0000
changeset 1628
5ddecb91d843
parent 0
959103a6100f
permissions
-rw-r--r--

8009545: Graph inference: dependencies between inference variables should be set during incorporation
Summary: Move all transitivity checks into the incorporation round
Reviewed-by: jjg

     1 /*
     2  * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  */
    24 /*
    25  * @test
    26  * @bug 8003280
    27  * @summary Add lambda tests
    28  *  basic test for capture of non-mutable locals
    29  * @author  Brian Goetz
    30  * @author  Maurizio Cimadamore
    31  * @run main LambdaCapture01
    32  */
    34 public class LambdaCapture01 {
    36     static int assertionCount = 0;
    38     static void assertTrue(boolean cond) {
    39         assertionCount++;
    40         if (!cond)
    41             throw new AssertionError();
    42     }
    44     interface Tester {
    45         void test();
    46     }
    48     interface TU<T, U> {
    49         public T foo(U u);
    50     }
    52     public static <T, U> T exec(TU<T, U> lambda, U x) {
    53         return lambda.foo(x);
    54     }
    56     public int n = 5;
    58     //Simple local capture
    59     void test1() {
    60         final int N = 1;
    61         int res = LambdaCapture01.<Integer,Integer>exec((Integer x) -> x + N, 3);
    62         assertTrue(4 == res);
    63     }
    65     //Local capture with multiple scopes (anon class)
    66     void test2() {
    67         final int N = 1;
    68         new Tester() {
    69             public void test() {
    70                 final int M = 2;
    71                 int res = LambdaCapture01.<Integer,Integer>exec((Integer x) -> x + N + M, 3);
    72                 assertTrue(6 == res);
    73             }
    74         }.test();
    75     }
    77     //Local capture with multiple scopes (local class)
    78     void test3() {
    79         final int N = 1;
    80         class MyTester implements Tester {
    81             public void test() {
    82                 final int M = 2;
    83                 int res = LambdaCapture01.<Integer,Integer>exec((Integer x) -> x + N + M, 3);
    84                 assertTrue(6 == res);
    85             }
    86         }
    87         new MyTester().test();
    88     }
    90     //access to field from enclosing scope
    91     void test4() {
    92         final int N = 4;
    93         int res1 = LambdaCapture01.<Integer,Integer>exec((Integer x) -> x + n + N, 3);
    94         assertTrue(12 == res1);
    95         int res2 = LambdaCapture01.<Integer,Integer>exec((Integer x) -> x + LambdaCapture01.this.n + N, 3);
    96         assertTrue(12 == res2);
    97     }
    99     public static void main(String[] args) {
   100         LambdaCapture01 t = new LambdaCapture01();
   101         t.test1();
   102         t.test2();
   103         t.test3();
   104         t.test4();
   105         assertTrue(assertionCount == 5);
   106     }
   107 }

mercurial