|
1 | 1 | #include <catch2/catch_test_macros.hpp> |
2 | 2 |
|
| 3 | +#include "../../../../tools/memory_injector.hpp" |
3 | 4 | #include <exercises/hackerrank/warmup/plus_minus.h> |
4 | | -#include <iostream> |
5 | | -#include <stdexcept> |
| 5 | + |
6 | 6 | #include <vector> |
7 | 7 |
|
8 | 8 | #include <filesystem> |
|
11 | 11 | using json = nlohmann::json; |
12 | 12 |
|
13 | 13 | TEST_CASE("plusMinus JSON Test Cases", "[hackerrank] [jsontestcase] [warmup]") { |
14 | | - std::filesystem::path cwd = std::filesystem::current_path(); |
15 | | - std::string path = |
16 | | - cwd.string() + "/unit/lib/hackerrank/warmup/plus_minus.testcases.json"; |
17 | 14 |
|
18 | | - INFO("plusMinus JSON test cases FILE: " << path); |
| 15 | +#ifdef __linux__ |
| 16 | + SECTION("Failure handling during Out of Memory (OOM)") { |
| 17 | + MemoryInjector::enable_oom_fault(); |
19 | 18 |
|
20 | | - std::ifstream f(path); |
21 | | - json data = json::parse(f); |
| 19 | + int input_size = 3; |
| 20 | + int input_array[] = {1, -2, 0}; |
22 | 21 |
|
23 | | - for (auto testcase : data) { |
24 | | - auto input_size = static_cast<int>(testcase["input"].size()); |
25 | | - std::vector<int> input_vector = testcase["input"]; |
26 | | - const int *input_array = input_vector.data(); |
| 22 | + REQUIRE(HACKERRANK_WARMUP_plusMinusCalculate(input_size, input_array) == |
| 23 | + nullptr); |
27 | 24 |
|
28 | | - char **result = |
29 | | - HACKERRANK_WARMUP_plusMinusCalculate(input_size, input_array); |
| 25 | + // Clean up the state after finishing the test section |
| 26 | + MemoryInjector::disable_fault(); |
| 27 | + } |
| 28 | +#endif |
30 | 29 |
|
31 | | - std::vector<std::string> result_as_vector; |
| 30 | + SECTION("Normal memory allocation succeeds") { |
| 31 | + // Reset the injector state before every section running |
| 32 | + // MemoryInjector::disable_fault(); |
32 | 33 |
|
33 | | - for (int i = 0; i < HACKERRANK_WARMUP_PLUSMINUS_LIMIT_ANSWERS; i++) { |
34 | | - result_as_vector.emplace_back(result[i]); |
35 | | - } |
36 | | - HACKERRANK_WARMUP_freePlusMinus(result, |
37 | | - HACKERRANK_WARMUP_PLUSMINUS_LIMIT_ANSWERS); |
| 34 | + std::filesystem::path cwd = std::filesystem::current_path(); |
| 35 | + std::string path = |
| 36 | + cwd.string() + "/unit/lib/hackerrank/warmup/plus_minus.testcases.json"; |
| 37 | + |
| 38 | + INFO("plusMinus JSON test cases FILE: " << path); |
| 39 | + |
| 40 | + std::ifstream f(path); |
| 41 | + json data = json::parse(f); |
38 | 42 |
|
39 | | - CHECK(result_as_vector == testcase["expected"]); |
| 43 | + for (auto testcase : data) { |
| 44 | + auto input_size = static_cast<int>(testcase["input"].size()); |
| 45 | + std::vector<int> input_vector = testcase["input"]; |
| 46 | + const int *input_array = input_vector.data(); |
40 | 47 |
|
41 | | - // Just call void function, to collect coverage |
42 | | - HACKERRANK_WARMUP_plusMinus(input_size, input_array); |
| 48 | + char **result = |
| 49 | + HACKERRANK_WARMUP_plusMinusCalculate(input_size, input_array); |
| 50 | + |
| 51 | + std::vector<std::string> result_as_vector; |
| 52 | + |
| 53 | + for (int i = 0; i < HACKERRANK_WARMUP_PLUSMINUS_LIMIT_ANSWERS; i++) { |
| 54 | + result_as_vector.emplace_back(result[i]); |
| 55 | + } |
| 56 | + HACKERRANK_WARMUP_freePlusMinus( |
| 57 | + result, HACKERRANK_WARMUP_PLUSMINUS_LIMIT_ANSWERS); |
| 58 | + |
| 59 | + CHECK(result_as_vector == testcase["expected"]); |
| 60 | + |
| 61 | + // Just call void function, to collect coverage |
| 62 | + HACKERRANK_WARMUP_plusMinus(input_size, input_array); |
| 63 | + } |
43 | 64 | } |
44 | 65 | } |
0 commit comments