Path: blob/master/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomValueGen.java
41162 views
/*1* Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223package vm.mlvm.meth.share;2425public class RandomValueGen {2627private static final int MAX_DISTINCT_TRIES = 11;2829/*30* Primitive values are returned boxed. void is returned as null String31* contains 0..100 random characters32*/33public static Object next(Class<?> type) throws InstantiationException, IllegalAccessException {34return TestTypes.nextRandomValueForType(type);35}3637public static Object nextDistinct(Class<?> type, Object notEqualTo) throws InstantiationException, IllegalAccessException {38Object nonEqualValue;39for ( int i = MAX_DISTINCT_TRIES; i > 0; i -- ){40nonEqualValue = next(type);41if ( ! nonEqualValue.equals(notEqualTo) )42return nonEqualValue;43}4445// A workaround for booleans. Sometimes RNG produces long series of trues or falses46if ( type.equals(Boolean.class) || type.equals(boolean.class) )47return Boolean.valueOf(! (Boolean) notEqualTo);4849throw new InstantiationException("Can't create distinct value for type=[" + type.getName() + "]; value=[" + notEqualTo + "]");50}5152public static void main(String[] args) {53for (int i = 0; i < 10; i++) {54Class<?> type = RandomTypeGen.next();55Object value;56try {57value = next(type);58System.out.println("type=[" + type + "], value=[" + value + "]");59} catch (Exception e) {60System.err.println("type=[" + type + "]");61e.printStackTrace();62}63}64}656667}686970