Skip to content

Commit

Permalink
Refactor: EvaluatorRegistry, AggregatorRegistry
Browse files Browse the repository at this point in the history
- EvaluatorFactory -> EvaluatorRegistry. Takes map of helper commands, in preparation for 2.0
- AggregatorFactory -> AggregatorRegistry
- *Config -> *Options, mainly in preparation for new EvaluatorConfig for disambiguation
  with EvaluationOptions (which was EvaluatorConfig)
- Fix bad includes related to spec
  • Loading branch information
fushar committed May 22, 2017
1 parent 072a4d9 commit 1bfa948
Show file tree
Hide file tree
Showing 44 changed files with 437 additions and 381 deletions.
17 changes: 10 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,16 @@ include_directories(include)
set(INCLUDE
include/tcframe/aggregator.hpp
include/tcframe/aggregator/Aggregator.hpp
include/tcframe/aggregator/AggregatorFactory.hpp
include/tcframe/aggregator/AggregatorRegistry.hpp
include/tcframe/aggregator/MinAggregator.hpp
include/tcframe/aggregator/SumAggregator.hpp
include/tcframe/evaluator.hpp
include/tcframe/evaluator/BatchEvaluator.hpp
include/tcframe/evaluator/Evaluator.hpp
include/tcframe/evaluator/EvaluationOptions.hpp
include/tcframe/evaluator/EvaluationResult.hpp
include/tcframe/evaluator/EvaluatorConfig.hpp
include/tcframe/evaluator/EvaluatorFactory.hpp
include/tcframe/evaluator/Evaluator.hpp
include/tcframe/evaluator/EvaluatorHelperRegistry.hpp
include/tcframe/evaluator/EvaluatorRegistry.hpp
include/tcframe/evaluator/GenerationResult.hpp
include/tcframe/evaluator/scorer.hpp
include/tcframe/evaluator/scorer/CustomScorer.hpp
Expand All @@ -61,14 +62,14 @@ set(INCLUDE
include/tcframe/evaluator/scorer/ScoringResult.hpp
include/tcframe/generator.hpp
include/tcframe/generator/GenerationException.hpp
include/tcframe/generator/GenerationOptions.hpp
include/tcframe/generator/Generator.hpp
include/tcframe/generator/GeneratorConfig.hpp
include/tcframe/generator/GeneratorLogger.hpp
include/tcframe/generator/TestCaseGenerator.hpp
include/tcframe/grader.hpp
include/tcframe/grader/Grader.hpp
include/tcframe/grader/GraderConfig.hpp
include/tcframe/grader/GraderLogger.hpp
include/tcframe/grader/GradingOptions.hpp
include/tcframe/grader/TestCaseGrader.hpp
include/tcframe/io_manipulator.hpp
include/tcframe/io_manipulator/GridIOSegmentManipulator.hpp
Expand Down Expand Up @@ -98,7 +99,6 @@ set(INCLUDE
include/tcframe/spec/constraint/Constraint.hpp
include/tcframe/spec/constraint/ConstraintSuite.hpp
include/tcframe/spec/constraint/Subtask.hpp
include/tcframe/spec/Spec.hpp
include/tcframe/spec/core.hpp
include/tcframe/spec/core/BaseTestSpec.hpp
include/tcframe/spec/core/BaseProblemSpec.hpp
Expand All @@ -107,6 +107,7 @@ set(INCLUDE
include/tcframe/spec/core/Magic.hpp
include/tcframe/spec/core/MultipleTestCasesConfig.hpp
include/tcframe/spec/core/SeedSetter.hpp
include/tcframe/spec/core/Spec.hpp
include/tcframe/spec/core/StyleConfig.hpp
include/tcframe/spec/io.hpp
include/tcframe/spec/io/GridIOSegment.hpp
Expand Down Expand Up @@ -151,9 +152,11 @@ set(TEST_UNIT
test/unit/tcframe/mock.hpp
test/unit/tcframe/aggregator/MinAggregatorTests.cpp
test/unit/tcframe/aggregator/MockAggregator.hpp
test/unit/tcframe/aggregator/MockAggregatorRegistry.hpp
test/unit/tcframe/aggregator/SumAggregatorTests.cpp
test/unit/tcframe/evaluator/BatchEvaluatorTests.cpp
test/unit/tcframe/evaluator/MockEvaluator.hpp
test/unit/tcframe/evaluator/MockEvaluatorRegistry.hpp
test/unit/tcframe/evaluator/scorer/MockScorer.hpp
test/unit/tcframe/generator/GeneratorLoggerTests.cpp
test/unit/tcframe/generator/GeneratorTests.cpp
Expand Down
2 changes: 1 addition & 1 deletion include/tcframe/aggregator.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once

#include "tcframe/aggregator/Aggregator.hpp"
#include "tcframe/aggregator/AggregatorFactory.hpp"
#include "tcframe/aggregator/AggregatorRegistry.hpp"
#include "tcframe/aggregator/MinAggregator.hpp"
#include "tcframe/aggregator/SumAggregator.hpp"
28 changes: 0 additions & 28 deletions include/tcframe/aggregator/AggregatorFactory.hpp

This file was deleted.

25 changes: 25 additions & 0 deletions include/tcframe/aggregator/AggregatorRegistry.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

#include <string>

#include "tcframe/aggregator/Aggregator.hpp"
#include "tcframe/aggregator/MinAggregator.hpp"
#include "tcframe/aggregator/SumAggregator.hpp"

using std::string;

namespace tcframe {

class AggregatorRegistry {
public:
virtual ~AggregatorRegistry() {}

virtual Aggregator* get(bool hasSubtasks) {
if (hasSubtasks) {
return new MinAggregator();
}
return new SumAggregator();
}
};

}
5 changes: 3 additions & 2 deletions include/tcframe/evaluator.hpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#pragma once

#include "tcframe/evaluator/BatchEvaluator.hpp"
#include "tcframe/evaluator/EvaluationOptions.hpp"
#include "tcframe/evaluator/EvaluationResult.hpp"
#include "tcframe/evaluator/Evaluator.hpp"
#include "tcframe/evaluator/EvaluatorConfig.hpp"
#include "tcframe/evaluator/EvaluatorFactory.hpp"
#include "tcframe/evaluator/EvaluatorHelperRegistry.hpp"
#include "tcframe/evaluator/EvaluatorRegistry.hpp"
#include "tcframe/evaluator/GenerationResult.hpp"
#include "tcframe/evaluator/scorer.hpp"
18 changes: 9 additions & 9 deletions include/tcframe/evaluator/BatchEvaluator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
#include <map>
#include <string>

#include "EvaluationOptions.hpp"
#include "EvaluationResult.hpp"
#include "Evaluator.hpp"
#include "EvaluatorConfig.hpp"
#include "GenerationResult.hpp"
#include "scorer.hpp"
#include "tcframe/os.hpp"
Expand Down Expand Up @@ -34,12 +34,12 @@ class BatchEvaluator : public Evaluator {
EvaluationResult evaluate(
const string& inputFilename,
const string& outputFilename,
const EvaluatorConfig& config) {
const EvaluationOptions& options) {

map<string, ExecutionResult> executionResults;
Verdict verdict;

GenerationResult generationResult = generate(inputFilename, EVALUATION_OUT_FILENAME, config);
GenerationResult generationResult = generate(inputFilename, EVALUATION_OUT_FILENAME, options);
executionResults["solution"] = generationResult.executionResult();

if (generationResult.verdict()) {
Expand All @@ -56,18 +56,18 @@ class BatchEvaluator : public Evaluator {
GenerationResult generate(
const string& inputFilename,
const string& outputFilename,
const EvaluatorConfig& config) {
const EvaluationOptions& options) {

ExecutionRequestBuilder request = ExecutionRequestBuilder()
.setCommand(config.solutionCommand())
.setCommand(options.solutionCommand())
.setInputFilename(inputFilename)
.setOutputFilename(outputFilename);

if (config.timeLimit()) {
request.setTimeLimit(config.timeLimit().value());
if (options.timeLimit()) {
request.setTimeLimit(options.timeLimit().value());
}
if (config.memoryLimit()) {
request.setMemoryLimit(config.memoryLimit().value());
if (options.memoryLimit()) {
request.setMemoryLimit(options.memoryLimit().value());
}

ExecutionResult executionResult = os_->execute(request.build());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
#pragma once

#include <map>
#include <string>
#include <tuple>
#include <utility>

#include "tcframe/spec/core.hpp"
#include "tcframe/util.hpp"

using std::map;
using std::move;
using std::string;
using std::tie;

namespace tcframe {

struct EvaluatorConfig {
friend class EvaluatorConfigBuilder;
struct EvaluationOptions {
friend class EvaluationOptionsBuilder;

private:
string solutionCommand_;
Expand All @@ -34,61 +36,61 @@ struct EvaluatorConfig {
return memoryLimit_;
}

bool operator==(const EvaluatorConfig& o) const {
bool operator==(const EvaluationOptions& o) const {
return tie(solutionCommand_, timeLimit_, memoryLimit_) ==
tie(o.solutionCommand_, o.timeLimit_, o.memoryLimit_);
tie(o.solutionCommand_, o.timeLimit_, o.memoryLimit_);
}
};

class EvaluatorConfigBuilder {
class EvaluationOptionsBuilder {
private:
EvaluatorConfig subject_;
EvaluationOptions subject_;

public:
EvaluatorConfigBuilder(const EvaluatorConfig& from)
EvaluationOptionsBuilder(const EvaluationOptions& from)
: subject_(from) {}

EvaluatorConfigBuilder() {
EvaluationOptionsBuilder() {
subject_.solutionCommand_ = CommonConfig::solutionCommand();
}

EvaluatorConfigBuilder& setSolutionCommand(optional<string> solutionCommand) {
EvaluationOptionsBuilder& setSolutionCommand(optional<string> solutionCommand) {
if (solutionCommand) {
setSolutionCommand(solutionCommand.value());
}
return *this;
}

EvaluatorConfigBuilder& setSolutionCommand(string solutionCommand) {
EvaluationOptionsBuilder& setSolutionCommand(string solutionCommand) {
subject_.solutionCommand_ = solutionCommand;
return *this;
}

EvaluatorConfigBuilder& setTimeLimit(optional<int> timeLimit) {
EvaluationOptionsBuilder& setTimeLimit(optional<int> timeLimit) {
if (timeLimit) {
setTimeLimit(timeLimit.value());
}
return *this;
}

EvaluatorConfigBuilder& setTimeLimit(int timeLimit) {
EvaluationOptionsBuilder& setTimeLimit(int timeLimit) {
subject_.timeLimit_ = optional<int>(timeLimit);
return *this;
}

EvaluatorConfigBuilder& setMemoryLimit(optional<int> memoryLimit) {
EvaluationOptionsBuilder& setMemoryLimit(optional<int> memoryLimit) {
if (memoryLimit) {
setMemoryLimit(memoryLimit.value());
}
return *this;
}

EvaluatorConfigBuilder& setMemoryLimit(int memoryLimit) {
EvaluationOptionsBuilder& setMemoryLimit(int memoryLimit) {
subject_.memoryLimit_ = optional<int>(memoryLimit);
return *this;
}

EvaluatorConfig build() {
EvaluationOptions build() {
return move(subject_);
}
};
Expand Down
6 changes: 3 additions & 3 deletions include/tcframe/evaluator/Evaluator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

#include <string>

#include "EvaluationOptions.hpp"
#include "EvaluationResult.hpp"
#include "EvaluatorConfig.hpp"
#include "GenerationResult.hpp"
#include "scorer.hpp"

Expand All @@ -20,12 +20,12 @@ class Evaluator {
virtual EvaluationResult evaluate(
const string& inputFilename,
const string& outputFilename,
const EvaluatorConfig& config) = 0;
const EvaluationOptions& options) = 0;

virtual GenerationResult generate(
const string& inputFilename,
const string& outputFilename,
const EvaluatorConfig& config) = 0;
const EvaluationOptions& options) = 0;

virtual ScoringResult score(const string& inputFilename, const string& outputFilename) = 0;
};
Expand Down
33 changes: 0 additions & 33 deletions include/tcframe/evaluator/EvaluatorFactory.hpp

This file was deleted.

26 changes: 26 additions & 0 deletions include/tcframe/evaluator/EvaluatorHelperRegistry.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#pragma once

#include <string>

#include "tcframe/os.hpp"
#include "tcframe/util.hpp"
#include "scorer.hpp"

using std::string;

namespace tcframe {

class EvaluatorHelperRegistry {
public:
virtual ~EvaluatorHelperRegistry() {}

virtual Scorer* getScorer(OperatingSystem* os, const optional<string>& scorerCommand) {
if (scorerCommand) {
return new CustomScorer(os, new VerdictCreator(), scorerCommand.value());
} else {
return new DiffScorer(os);
}
}
};

}

0 comments on commit 1bfa948

Please sign in to comment.