-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode_runner.h
More file actions
73 lines (55 loc) · 2.46 KB
/
Copy pathcode_runner.h
File metadata and controls
73 lines (55 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef CODE_RUNNER_H
#define CODE_RUNNER_H
#include <QObject>
#include <QJsonArray>
#include <atomic>
#include <thread>
#include "language_registry.h"
#include "python_runner.h"
#include "wasm_runner.h"
#include "javascript_runner.h"
#include "driver_generator.h"
class LanguageRegistry;
class CodeRunner : public QObject {
Q_OBJECT
public:
explicit CodeRunner(LanguageRegistry *registry, QObject *parent = nullptr);
~CodeRunner() override;
void runCode(const QString &code, const QString &languageId, const QString &problemId);
void runSingleTest(const QString &code, const QString &languageId,
int testIndex, const QString &problemId);
void stop();
bool isRunning() const { return m_running; }
QString getProblemsPath(const QString &problemId) const;
void executeTestRaw(EmbeddedRunner* runner, const QString &code,
const QJsonObject &test,
int index, int offset = 0);
void runPythonTestsBatch(const QString &code, const QJsonObject &manifest, int singleTestIndex);
void runCppTestsBatch(const QString &code, const QJsonObject &manifest, int singleTestIndex, const QString &languageId);
void runJavascriptTestsBatch(const QString &code, const QJsonObject &manifest, int singleTestIndex);
void runFreeCode(const QString &code, const QString &languageId);
signals:
void testResult(int testIndex, const QString &status, const QString &output,
const QString &expected, qint64 timeMs);
void compilationError(const QString &error);
void systemError(const QString &error);
void started();
void finished();
void progress(int current, int total);
void freeCodeOutput(const QString &output);
void freeCodeError(const QString &error);
void freeCodeFinished(int exitCode, qint64 ms);
private:
LanguageRegistry *m_registry;
std::atomic<bool> m_running{false};
volatile bool m_stopRequested{false};
QJsonObject m_currentManifest;
QJsonArray evaluateResultsWithPython(const QJsonObject &manifest, const QJsonArray &results);
bool loadTestCases(const QString &problemId, QJsonArray &tests, MethodSchema &schema);
EmbeddedRunner* getRunner(const QString &languageId);
PythonRunner *m_pythonRunner = nullptr;
WasmRunner *m_wasmRunnerC = nullptr;
WasmRunner *m_wasmRunnerCpp = nullptr;
JavascriptRunner *m_javascriptRunner = nullptr;
};
#endif // CODE_RUNNER_H