Mercurial > hg > Members > kono > jpf-core
diff src/main/gov/nasa/jpf/vm/choice/RandomIntIntervalGenerator.java @ 0:61d41facf527
initial v8 import (history reset)
author | Peter Mehlitz <Peter.C.Mehlitz@nasa.gov> |
---|---|
date | Fri, 23 Jan 2015 10:14:01 -0800 |
parents | |
children | fdc263e5806b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/gov/nasa/jpf/vm/choice/RandomIntIntervalGenerator.java Fri Jan 23 10:14:01 2015 -0800 @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2014, United States Government, as represented by the + * Administrator of the National Aeronautics and Space Administration. + * All rights reserved. + * + * The Java Pathfinder core (jpf-core) platform is licensed under the + * Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package gov.nasa.jpf.vm.choice; + +import gov.nasa.jpf.Config; +import gov.nasa.jpf.vm.ChoiceGenerator; +import gov.nasa.jpf.vm.ChoiceGeneratorBase; +import gov.nasa.jpf.vm.IntChoiceGenerator; + +import java.util.Random; + +/** + * a IntChoiceGenerator that randomly chooses a configured number + * of values from a specified range + * this is usually configured through app properties + * + * <2do> this is too redundant to RandomOrderIntCG - replace + */ +public class RandomIntIntervalGenerator extends ChoiceGeneratorBase<Integer> implements IntChoiceGenerator { + + protected int min, max; // both inclusive + protected int nChoices; + protected long seed; + + protected Random random; + protected int range; + + protected int next; + protected int count = 0; + + public RandomIntIntervalGenerator (String id, int min, int max, int nChoices){ + this(id, min,max,nChoices,0L); + } + + public RandomIntIntervalGenerator (String id, int min, int max, int nChoices, long seed){ + super(id); + + this.min = min; + this.max = max; + this.nChoices = nChoices; + this.seed = seed; + + range = max - min; + random = new Random(seed); + } + + public RandomIntIntervalGenerator(Config conf, String id) { + super(id); + + min = conf.getInt(id + ".min"); + max = conf.getInt(id + ".max"); + nChoices = conf.getInt(id + ".n", 1); + seed = conf.getLong(id + ".seed", 1); + + range = max - min; + random = new Random(seed); + } + + + @Override + public void reset () { + random = new Random(seed); + count = 0; + + isDone = false; + } + + @Override + public boolean hasMoreChoices() { + return !isDone && (count < nChoices); + } + + @Override + public void advance (){ + if (count < nChoices){ + count++; + next = random.nextInt(range) + min; + } + } + + @Override + public Integer getNextChoice () { + return new Integer(next); + } + + @Override + public int getTotalNumberOfChoices () { + return nChoices; + } + + @Override + public int getProcessedNumberOfChoices () { + return count; + } + + @Override + public String toString () { + StringBuilder sb = new StringBuilder(getClass().getName()); + if (id == null) { + sb.append('['); + } else { + sb.append("[id=\""); + sb.append(id); + sb.append("\","); + } + sb.append(min); + sb.append(".."); + sb.append(max); + sb.append(",n="); + sb.append(nChoices); + sb.append(",cur="); + sb.append(getNextChoice()); + sb.append(",count="); + sb.append(count); + sb.append(']'); + return sb.toString(); + } + + @Override + public Class<Integer> getChoiceType() { + return Integer.class; + } + + @Override + public ChoiceGenerator<Integer> randomize() { + return this; + } + +}