From 96867eb9a6edb9b218b8e56bd52929fd66802bbe 2017-12-19 14:05:09 From: Alexandre Leroux Date: 2017-12-19 14:05:09 Subject: [PATCH] Adds delete operation --- diff --git a/plugins/amda/tests/FuzzingOperations.cpp b/plugins/amda/tests/FuzzingOperations.cpp index 6d0a6b6..66de737 100644 --- a/plugins/amda/tests/FuzzingOperations.cpp +++ b/plugins/amda/tests/FuzzingOperations.cpp @@ -35,7 +35,7 @@ struct CreateOperation : public IFuzzingOperation { auto variableName = QString{"Var_%1"}.arg(QUuid::createUuid().toString()); qCInfo(LOG_FuzzingOperations()).noquote() - << "Creating variable" << variableName << "(metadata:" << variableMetadata << ")"; + << "Creating variable" << variableName << "(metadata:" << variableMetadata << ")..."; auto newVariable = variableController.createVariable(variableName, variableMetadata, variableProvider); @@ -46,6 +46,28 @@ struct CreateOperation : public IFuzzingOperation { } }; +struct DeleteOperation : public IFuzzingOperation { + bool canExecute(const VariableState &variableState) const override + { + // A variable can be delete only if it exists + return variableState.m_Variable != nullptr; + } + + void execute(VariableState &variableState, VariableController &variableController, + const Properties &properties) const override + { + Q_UNUSED(properties); + + qCInfo(LOG_FuzzingOperations()).noquote() + << "Deleting variable" << variableState.m_Variable->name() << "..."; + variableController.deleteVariable(variableState.m_Variable); + + // Updates variable's state + variableState.m_Range = INVALID_RANGE; + variableState.m_Variable = nullptr; + } +}; + /** * Defines a move operation through a range. * @@ -147,6 +169,8 @@ std::unique_ptr FuzzingOperationFactory::create(FuzzingOperat switch (type) { case FuzzingOperationType::CREATE: return std::make_unique(); + case FuzzingOperationType::DELETE: + return std::make_unique(); case FuzzingOperationType::PAN_LEFT: return std::make_unique( std::minus(), std::minus(), diff --git a/plugins/amda/tests/FuzzingOperations.h b/plugins/amda/tests/FuzzingOperations.h index ce8e134..cc472ff 100644 --- a/plugins/amda/tests/FuzzingOperations.h +++ b/plugins/amda/tests/FuzzingOperations.h @@ -16,7 +16,7 @@ class VariableController; /** * Enumeration of types of existing fuzzing operations */ -enum class FuzzingOperationType { CREATE, PAN_LEFT, PAN_RIGHT, ZOOM_IN, ZOOM_OUT }; +enum class FuzzingOperationType { CREATE, DELETE, PAN_LEFT, PAN_RIGHT, ZOOM_IN, ZOOM_OUT }; /// Interface that represents an operation that can be executed during a fuzzing test struct IFuzzingOperation { diff --git a/plugins/amda/tests/TestAmdaFuzzing.cpp b/plugins/amda/tests/TestAmdaFuzzing.cpp index 365c7a2..2085055 100644 --- a/plugins/amda/tests/TestAmdaFuzzing.cpp +++ b/plugins/amda/tests/TestAmdaFuzzing.cpp @@ -42,12 +42,13 @@ using VariablesPool = std::map; // Defaults values used when the associated properties have not been set for the test const auto NB_MAX_OPERATIONS_DEFAULT_VALUE = 100; const auto NB_MAX_VARIABLES_DEFAULT_VALUE = 1; -const auto AVAILABLE_OPERATIONS_DEFAULT_VALUE - = QVariant::fromValue(WeightedOperationsTypes{{FuzzingOperationType::CREATE, 1.}, - {FuzzingOperationType::PAN_LEFT, 1.}, - {FuzzingOperationType::PAN_RIGHT, 1.}, - {FuzzingOperationType::ZOOM_IN, 1.}, - {FuzzingOperationType::ZOOM_OUT, 1.}}); +const auto AVAILABLE_OPERATIONS_DEFAULT_VALUE = QVariant::fromValue(WeightedOperationsTypes{ + {FuzzingOperationType::CREATE, 1.}, + {FuzzingOperationType::DELETE, 0.1}, // Delete operation is less frequent + {FuzzingOperationType::PAN_LEFT, 1.}, + {FuzzingOperationType::PAN_RIGHT, 1.}, + {FuzzingOperationType::ZOOM_IN, 1.}, + {FuzzingOperationType::ZOOM_OUT, 1.}}); const auto CACHE_TOLERANCE_DEFAULT_VALUE = 0.2; /// Delay between each operation (in ms) @@ -138,7 +139,6 @@ public: fuzzingOperation->execute(variableState, m_VariableController, m_Properties); QTest::qWait(operationDelay()); - } else { qCInfo(LOG_TestAmdaFuzzing()).noquote()