1 /*
   2  * Copyright (c) 2016, 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  */
  23 
  24 package jdk.vm.ci.hotspot.test;
  25 
  26 import static jdk.vm.ci.hotspot.test.TestHelper.CONSTANT_REFLECTION_PROVIDER;
  27 import static jdk.vm.ci.hotspot.test.TestHelper.DUMMY_CLASS_INSTANCE;
  28 
  29 import java.util.LinkedList;
  30 
  31 import jdk.vm.ci.meta.JavaConstant;
  32 import org.testng.annotations.DataProvider;
  33 
  34 public class UnboxPrimitiveDataProvider {
  35 
  36     @DataProvider(name = "unboxPrimitiveDataProvider")
  37     public static Object[][] unboxPrimitiveDataProvider() {
  38         LinkedList<Object[]> cfgSet = new LinkedList<>();
  39         // Testing boolean
  40         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(
  41                         true), JavaConstant.forBoolean(true)});
  42         cfgSet.add(new Object[]{JavaConstant.forBoolean(true), null});
  43         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(false),
  44                         JavaConstant.forBoolean(false)});
  45         cfgSet.add(new Object[]{JavaConstant.forBoolean(false), null});
  46         for (byte number : new byte[]{-128, 0, 1, 127}) {
  47             // Testing boxed primitives
  48             cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Byte.valueOf(number)),
  49                             JavaConstant.forByte(number)});
  50             cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Short.valueOf(number)),
  51                             JavaConstant.forShort(number)});
  52             cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Integer.valueOf(number)),
  53                             JavaConstant.forInt(number)});
  54             cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Long.valueOf(number)),
  55                             JavaConstant.forLong(number)});
  56             if (number >= 0) {
  57                 cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(
  58                                 Character.valueOf((char) number)),
  59                                 JavaConstant.forChar((char) number)});
  60             }
  61             cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(
  62                             Float.valueOf(number * 1.1f)),
  63                             JavaConstant.forFloat(number * 1.1f)});
  64             cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(
  65                             Double.valueOf(number * 1.1)),
  66                             JavaConstant.forDouble(number * 1.1)});
  67             // Testing non-boxed primitives (should result in returning of "null")
  68             cfgSet.add(new Object[]{JavaConstant.forByte(number), null});
  69             cfgSet.add(new Object[]{JavaConstant.forShort(number), null});
  70             cfgSet.add(new Object[]{JavaConstant.forInt(number), null});
  71             cfgSet.add(new Object[]{JavaConstant.forLong(number), null});
  72             cfgSet.add(new Object[]{JavaConstant.forChar((char) number), null});
  73             cfgSet.add(new Object[]{JavaConstant.forFloat(number), null});
  74             cfgSet.add(new Object[]{JavaConstant.forDouble(number), null});
  75         }
  76         // Testing boxed primitives with max values
  77         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Short.MAX_VALUE),
  78                         JavaConstant.forShort(Short.MAX_VALUE)});
  79         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Integer.MAX_VALUE),
  80                         JavaConstant.forInt(Integer.MAX_VALUE)});
  81         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Long.MAX_VALUE),
  82                         JavaConstant.forLong(Long.MAX_VALUE)});
  83         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Character.MAX_VALUE),
  84                         JavaConstant.forChar(Character.MAX_VALUE)});
  85         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Float.MAX_VALUE),
  86                         JavaConstant.forFloat(Float.MAX_VALUE)});
  87         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(Double.MAX_VALUE),
  88                         JavaConstant.forDouble(Double.MAX_VALUE)});
  89         // Non-primitives testing
  90         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(
  91                         DUMMY_CLASS_INSTANCE.objectField), null});
  92         cfgSet.add(new Object[]{CONSTANT_REFLECTION_PROVIDER.forObject(
  93                         DUMMY_CLASS_INSTANCE.booleanArrayWithValues),
  94                         null});
  95         // Null testing
  96         cfgSet.add(new Object[]{JavaConstant.NULL_POINTER, null});
  97         cfgSet.add(new Object[]{null, null});
  98         return cfgSet.toArray(new Object[0][0]);
  99     }
 100 }