Ignore:
Timestamp:
07/23/15 13:43:38 (9 years ago)
Author:
sherbold
Message:
  • made generation of random sequences with an expected valid end and a predefined maximum length more robust. the generation now aborts after a user-defined number of attempts to create a valid sequence and returns an empty sequence instead.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-testgeneration/src/main/java/de/ugoe/cs/autoquest/testgeneration/RandomWalkGenerator.java

    r927 r2026  
    7474    /** 
    7575     * <p> 
     76     * Maximal number of attempts for creating a valid sequence. If this value is reached, the 
     77     * sequence generation will be aborted. 
     78     * </p> 
     79     */ 
     80    private final long maxIterValidSequence; 
     81 
     82    /** 
     83     * <p> 
    7684     * Actual number of random walks performed to generate the test suite. 
    7785     * </p> 
     
    103111     *            maximal number of random walks before aborting the test case generation (see 
    104112     *            {@link #maxIter}) 
     113     * @param maxIterValidSequence 
     114     *            maximal number of attempts to create a valid sequence within the given restrictions 
    105115     */ 
    106116    public RandomWalkGenerator(int numSequences, 
     
    108118                               int maxLength, 
    109119                               boolean validEnd, 
    110                                long maxIter) 
     120                               long maxIter, 
     121                               long maxIterValidSequence) 
    111122    { 
    112123        // check validity of the parameters 
     
    117128        if (maxLength < 1) { 
    118129            throw new IllegalArgumentException( 
    119                                                 "maximal allowed length of test cases must be at least 1 but is " + 
    120                                                     maxLength); 
     130                                               "maximal allowed length of test cases must be at least 1 but is " + 
     131                                                   maxLength); 
    121132        } 
    122133        if (minLength > maxLength) { 
    123134            throw new IllegalArgumentException( 
    124                                                 "minimal allowed length of test cases must be less than or equal to the maximal allowed length (min length: " + 
    125                                                     minLength + " ; max length: " + maxLength + ")"); 
     135                                               "minimal allowed length of test cases must be less than or equal to the maximal allowed length (min length: " + 
     136                                                   minLength + " ; max length: " + maxLength + ")"); 
    126137        } 
    127138        if (maxIter < numSequences) { 
    128139            throw new IllegalArgumentException( 
    129                                                 "maximal number of iterations must greater than or equal to the number of sequences (number of sequences: " + 
    130                                                     numSequences + 
    131                                                     " ; max iterations: " + 
    132                                                     maxIter + 
    133                                                     ")"); 
     140                                               "maximal number of iterations must greater than or equal to the number of sequences (number of sequences: " + 
     141                                                   numSequences + 
     142                                                   " ; max iterations: " + 
     143                                                   maxIter + 
     144                                                   ")"); 
     145        } 
     146        if( maxIterValidSequence < 1) { 
     147            throw new IllegalArgumentException("maximal number of attempts to get a valid sequence must be positive, but is: " + maxIterValidSequence); 
    134148        } 
    135149        this.numSequences = numSequences; 
     
    138152        this.validEnd = validEnd; 
    139153        this.maxIter = maxIter; 
     154        this.maxIterValidSequence = maxIterValidSequence; 
    140155    } 
    141156 
     
    157172        actualIter = 0; 
    158173        while (sequences.size() < numSequences && actualIter < maxIter) { 
    159             List<Event> generatedSequence = model.randomSequence(maxLength, validEnd); 
     174            List<Event> generatedSequence = model.randomSequence(maxLength, validEnd, maxIterValidSequence); 
    160175            if (generatedSequence.size() >= minLength && generatedSequence.size() <= maxLength) { 
    161176                ((List<Event>) generatedSequence).add(0, Event.STARTEVENT); 
Note: See TracChangeset for help on using the changeset viewer.