package org.overture.interpreter.assistant.definition; import org.overture.ast.assistant.IAstAssistant; import org.overture.ast.definitions.ANamedTraceDefinition; import org.overture.ast.definitions.traces.ATraceDefinitionTerm; import org.overture.interpreter.assistant.IInterpreterAssistantFactory; import org.overture.interpreter.runtime.Context; import org.overture.interpreter.traces.ReducedTestSequence; import org.overture.interpreter.traces.SequenceTraceNode; import org.overture.interpreter.traces.TestSequence; import org.overture.interpreter.traces.TraceReductionType; public class ANamedTraceDefinitionAssistantInterpreter implements IAstAssistant { protected static IInterpreterAssistantFactory af; @SuppressWarnings("static-access") public ANamedTraceDefinitionAssistantInterpreter( IInterpreterAssistantFactory af) { this.af = af; } public TestSequence getTests(ANamedTraceDefinition tracedef, Context ctxt) throws Exception { return getTests(tracedef, ctxt, 1.0F, TraceReductionType.NONE, System.currentTimeMillis()); } public TestSequence getTests(ANamedTraceDefinition tracedef, Context ctxt, float subset, TraceReductionType type, long seed) throws Exception { SequenceTraceNode traces = new SequenceTraceNode(); for (ATraceDefinitionTerm term : tracedef.getTerms()) { traces.nodes.add(term.apply(af.getTraceExpander(), ctxt)); } TestSequence tests = traces.getTests(); if (tests.isEmpty()) { throw new Exception("Trace expansion generated no tests"); } if (subset < 1.0) { tests = new ReducedTestSequence(tests, subset, type, seed); } return tests; } }