test/tools/javac/types/CastTest.java

changeset 1007
95fc7fd39be2
parent 792
2199365892b1
child 2525
2eb010b6cb22
     1.1 --- a/test/tools/javac/types/CastTest.java	Wed May 11 13:10:57 2011 +0200
     1.2 +++ b/test/tools/javac/types/CastTest.java	Wed May 11 13:12:11 2011 +0200
     1.3 @@ -42,12 +42,13 @@
     1.4   */
     1.5  public class CastTest extends TypeHarness {
     1.6  
     1.7 -    Type[] allTypes;
     1.8 +    Type[] types_no_boxing;
     1.9 +    Type[] types_boxing;
    1.10  
    1.11      static final boolean T = true;
    1.12      static final boolean F = false;
    1.13  
    1.14 -    boolean[][] cast_result = {
    1.15 +    boolean[][] cast_result_no_boxing = {
    1.16                  //byte, short, int, long, float, double, char, bool, C, +C, I, T, byte[], short[], int[], long[], float[], double[], char[], bool[], C[], +C[], I[], T[]
    1.17      /*byte*/    { T   , T    , T  , T   , T    , T     , T   , F   , F, F , F, F, F     , F      , F    , F     , F      , F       , F     , F     , F  , F   , F  , F },
    1.18      /*short*/   { T   , T    , T  , T   , T    , T     , T   , F   , F, F , F, F, F     , F      , F    , F     , F      , F       , F     , F     , F  , F   , F  , F },
    1.19 @@ -74,6 +75,25 @@
    1.20      /*I[]*/     { F   , F    , F  , F   , F    , F     , F   , F   , F, F , F, T, F     , F      , F    , F     , F      , F       , F     , F     , T  , F   , T  , T },
    1.21      /*T[]*/     { F   , F    , F  , F   , F    , F     , F   , F   , F, F , F, T, F     , F      , F    , F     , F      , F       , F     , F     , T  , T   , T  , T }};
    1.22  
    1.23 +    boolean[][] cast_result_boxing = {
    1.24 +                   //byte, short, int, long, float, double, char, bool, Byte, Short, Integer, Long, Float, Double, Character, Boolean, Object
    1.25 +    /*byte*/       { T   , T    , T  , T   , T    , T     , T   , F   , T   , F    , F      , F   , F    , F     , F        , F ,      T },
    1.26 +    /*short*/      { T   , T    , T  , T   , T    , T     , T   , F   , F   , T    , F      , F   , F    , F     , F        , F ,      T  },
    1.27 +    /*int*/        { T   , T    , T  , T   , T    , T     , T   , F   , F   , F    , T      , F   , F    , F     , F        , F ,      T  },
    1.28 +    /*long*/       { T   , T    , T  , T   , T    , T     , T   , F   , F   , F    , F      , T   , F    , F     , F        , F ,      T  },
    1.29 +    /*float*/      { T   , T    , T  , T   , T    , T     , T   , F   , F   , F    , F      , F   , T    , F     , F        , F ,      T  },
    1.30 +    /*double*/     { T   , T    , T  , T   , T    , T     , T   , F   , F   , F    , F      , F   , F    , T     , F        , F ,      T  },
    1.31 +    /*char*/       { T   , T    , T  , T   , T    , T     , T   , F   , F   , F    , F      , F   , F    , F     , T        , F ,      T  },
    1.32 +    /*bool*/       { F   , F    , F  , F   , F    , F     , F   , T   , F   , F    , F      , F   , F    , F     , F        , T ,      T  },
    1.33 +    /*Byte*/       { T   , T    , T  , T   , T    , T     , F   , F   , T   , F    , F      , F   , F    , F     , F        , F ,      T  },
    1.34 +    /*Short*/      { F   , T    , T  , T   , T    , T     , F   , F   , F   , T    , F      , F   , F    , F     , F        , F ,      T  },
    1.35 +    /*Integer*/    { F   , F    , T  , T   , T    , T     , F   , F   , F   , F    , T      , F   , F    , F     , F        , F ,      T  },
    1.36 +    /*Long*/       { F   , F    , F  , T   , T    , T     , F   , F   , F   , F    , F      , T   , F    , F     , F        , F ,      T  },
    1.37 +    /*Float*/      { F   , F    , F  , F   , T    , T     , F   , F   , F   , F    , F      , F   , T    , F     , F        , F ,      T  },
    1.38 +    /*Double*/     { F   , F    , F  , F   , F    , T     , F   , F   , F   , F    , F      , F   , F    , T     , F        , F ,      T  },
    1.39 +    /*Character*/  { F   , F    , T  , T   , T    , T     , T   , F   , F   , F    , F      , F   , F    , F     , T        , F ,      T  },
    1.40 +    /*Boolean*/    { F   , F    , F  , F   , F    , F     , F   , T   , F   , F    , F      , F   , F    , F     , F        , T ,      T  },
    1.41 +    /*Object*/     { T   , T    , T  , T   , T    , T     , T   , T   , T   , T    , T      , T   , T    , T     , T        , T ,      T  }};
    1.42      CastTest() {
    1.43          Type[] primitiveTypes = {
    1.44              predef.byteType,
    1.45 @@ -85,6 +105,15 @@
    1.46              predef.charType,
    1.47              predef.booleanType };
    1.48  
    1.49 +        Type[] boxedTypes = new Type[primitiveTypes.length + 1];
    1.50 +        for (int i = 0 ; i < primitiveTypes.length ; i++) {
    1.51 +            boxedTypes[i] = box(primitiveTypes[i]);
    1.52 +        }
    1.53 +
    1.54 +        boxedTypes[primitiveTypes.length] = predef.objectType;
    1.55 +
    1.56 +        types_boxing = join(Type.class, primitiveTypes, boxedTypes);
    1.57 +
    1.58          Type[] referenceTypes = {
    1.59              fac.Class(),
    1.60              fac.Class(FINAL),
    1.61 @@ -97,17 +126,22 @@
    1.62              arrayTypes[idx++] = fac.Array(t);
    1.63          }
    1.64  
    1.65 -        allTypes = join(Type.class, primitiveTypes, referenceTypes, arrayTypes);
    1.66 +        types_no_boxing = join(Type.class, primitiveTypes, referenceTypes, arrayTypes);
    1.67      }
    1.68  
    1.69 -    void test() {
    1.70 -        for (int i = 0; i < allTypes.length ; i++) {
    1.71 -            for (int j = 0; j < allTypes.length ; j++) {
    1.72 -                assertCastable(allTypes[i], allTypes[j], cast_result[i][j]);
    1.73 +    void test(Type[] all_types, boolean[][] cast_result) {
    1.74 +        for (int i = 0; i < all_types.length ; i++) {
    1.75 +            for (int j = 0; j < all_types.length ; j++) {
    1.76 +                assertCastable(all_types[i], all_types[j], cast_result[i][j]);
    1.77              }
    1.78          }
    1.79      }
    1.80  
    1.81 +    void runTests() {
    1.82 +        test(types_no_boxing, cast_result_no_boxing);
    1.83 +        test(types_boxing, cast_result_boxing);
    1.84 +    }
    1.85 +
    1.86      @SuppressWarnings("unchecked")
    1.87      <T> T[] join(Class<T> type, T[]... args) {
    1.88          int totalLength = 0;
    1.89 @@ -124,6 +158,6 @@
    1.90      }
    1.91  
    1.92      public static void main(String[] args) {
    1.93 -        new CastTest().test();
    1.94 +        new CastTest().runTests();
    1.95      }
    1.96  }

mercurial