Skip to content

Commit ad6507c

Browse files
author
Gonzalo Diaz
committed
[WIP] coverage increased due new malloc() interceptor.
1 parent ac6a7e6 commit ad6507c

1 file changed

Lines changed: 44 additions & 23 deletions

File tree

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#include <catch2/catch_test_macros.hpp>
22

3+
#include "../../../../tools/memory_injector.hpp"
34
#include <exercises/hackerrank/warmup/plus_minus.h>
4-
#include <iostream>
5-
#include <stdexcept>
5+
66
#include <vector>
77

88
#include <filesystem>
@@ -11,34 +11,55 @@
1111
using json = nlohmann::json;
1212

1313
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";
1714

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();
1918

20-
std::ifstream f(path);
21-
json data = json::parse(f);
19+
int input_size = 3;
20+
int input_array[] = {1, -2, 0};
2221

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);
2724

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
3029

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();
3233

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);
3842

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();
4047

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+
}
4364
}
4465
}

0 commit comments

Comments
 (0)