All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dakusui.jcunit.generators.TupleGenerator Maven / Gradle / Ivy

package com.github.dakusui.jcunit.generators;

/**
 */

import com.github.dakusui.jcunit.constraint.ConstraintManager;
import com.github.dakusui.jcunit.core.*;
import com.github.dakusui.jcunit.core.factor.Factors;
import com.github.dakusui.jcunit.core.tuples.Tuple;

/**
 * Implementations of this interface must guarantee that a public constructor without
 * any parameters exists.
 */
public interface TupleGenerator extends
    JCUnitConfigurablePlugin,
    Iterable {

  public Factors getFactors();

  public void setFactors(Factors factors);

  public ConstraintManager getConstraintManager();

  public void setConstraintManager(ConstraintManager constraintManager);

  public Class getTargetClass();

  public void setTargetClass(Class klazz);

  /**
   * Returns a tuple which represents a test case identified by {@code testId}
   */
  public Tuple get(long testId);

  /**
   * Returns next valid id.
   */
  public long nextId(long testId);

  /**
   * Returns the first valid id.
   */
  public long firstId();

  /**
   * Returns total number of test cases generated by the implementations of this interface.
   */
  public long size();

  public static class Builder {

    private Class tupleGeneratorClass;
    private Factors                         factors;
    private ConstraintManager               constraintManager;
    private Param[]                         parameters;
    private Class                        targetClass;

    public Builder() {
    }

    public Builder(TupleGenerator.Builder base) {
      this.tupleGeneratorClass = base.tupleGeneratorClass;
      this.factors = base.factors;
      this.constraintManager = base.getConstraintManager();
      this.parameters = base.parameters;
    }

    public Builder setTupleGeneratorClass(
        Class tupleGeneratorClass) {
      this.tupleGeneratorClass = tupleGeneratorClass;
      return this;
    }

    public Builder setFactors(Factors factors) {
      this.factors = factors;
      return this;
    }

    public Builder setConstraintManager(ConstraintManager constraintManager) {
      this.constraintManager = constraintManager;
      return this;
    }

    public Builder setParameters(Param[] parameters) {
      this.parameters = parameters;
      return this;
    }

    public Builder setTargetClass(Class targetClass) {
      this.targetClass = targetClass;
      return this;
    }

    public TupleGenerator build() {
      Checks.checknotnull(this.constraintManager);
      Checks.checknotnull(this.tupleGeneratorClass);
      Checks.checknotnull(this.factors);
      Checks.checknotnull(this.constraintManager);
      TupleGenerator ret = Utils.createNewInstanceUsingNoParameterConstructor(
          this.tupleGeneratorClass);
      ret.setFactors(this.factors);
      ret.setConstraintManager(this.constraintManager);
      ret.setTargetClass(this.targetClass);
      ret.init(this.parameters);
      return ret;
    }

    public ConstraintManager getConstraintManager() {
      return constraintManager;
    }

    public Factors getFactors() {
      return factors;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy