edu.berkeley.cs.jqf.examples.trees.RedBlackBSTNodeGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jqf-examples Show documentation
Show all versions of jqf-examples Show documentation
JQF: Feedback-directed Quickcheck for Java - Sample generators and benchmark tests
package edu.berkeley.cs.jqf.examples.trees;
import java.util.Optional;
import com.pholser.junit.quickcheck.generator.GenerationStatus;
import com.pholser.junit.quickcheck.generator.Generator;
import com.pholser.junit.quickcheck.random.SourceOfRandomness;
/**
* Created by clemieux on 9/15/17.
*/
public class RedBlackBSTNodeGenerator extends Generator {
private static final GenerationStatus.Key SUBTREE_SIZE = new GenerationStatus.Key<>("treesize", Integer.class);
public RedBlackBSTNodeGenerator() {
super(RedBlackBSTNode.class);
}
@Override public RedBlackBSTNode generate(SourceOfRandomness r, GenerationStatus status){
Optional treesizeOpt = status.valueOf(SUBTREE_SIZE);
if (!treesizeOpt.isPresent()) return null;
Integer treesize = treesizeOpt.get();
if (treesize == 0 ){
return null;
}
treesize = treesize -1;
int leftSize = r.nextInt(0, treesize);
int rightSize = treesize - leftSize;
//System.out.println("leftSize: " + leftSize + ", rightSize: " + rightSize);
RedBlackBSTNode retNode = new RedBlackBSTNode<>(r.nextInt(), r.nextInt(), r.nextBoolean(), treesize + 1);
// System.out.println(retNode.key);
retNode.left= generate(r, status.setValue(SUBTREE_SIZE, leftSize));
retNode.right = generate(r, status.setValue(SUBTREE_SIZE, rightSize));
return retNode;
}
}