Skip to content

Commit 607972b

Browse files
rearranged test code
1 parent 0fa90b9 commit 607972b

File tree

2 files changed

+70
-54
lines changed

2 files changed

+70
-54
lines changed

tests/unit/message_processing_test.cpp

Lines changed: 57 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,53 +3,81 @@
33
//
44
#include <string>
55
#include <vector>
6-
#include <mutex>
7-
#include <condition_variable>
6+
// #include <mutex>
7+
// #include <condition_variable>
8+
#include <exception>
9+
#include <unordered_map>
810
#include <gtest/gtest.h>
911
#include <VCELL/MessageEventManager.h>
1012

1113
#include "VCellSundialsSolver.h"
1214

1315
static std::vector<std::string> eventTracker;
14-
static std::mutex eventTrackerMutex;
16+
1517

1618
void appendNextIndex(const WorkerEvent* event);
1719
std::vector<std::string> generateFibonacci(int length);
1820
long sequenceComparison(const std::vector<std::string> &sequence1, const std::vector<std::string> &sequence2);
1921

20-
TEST(MessageProcessingTest, MessagesAreProcessed) {
22+
static std::unordered_map<std::__thread_id, std::string> nameMap;
23+
24+
// std::mutex& getMeyersMutex() {
25+
// static std::mutex eventMutex;
26+
// return eventMutex;
27+
// }
2128

22-
MessageEventManager eventManager{[](WorkerEvent* event)->void{appendNextIndex(event);}};
23-
const int NUM_ITERATIONS = 100;
24-
for (int i = 0; i < NUM_ITERATIONS; ++i) {
25-
JobEvent::Status status;
26-
switch (i + 1) {
27-
case 1: status = JobEvent::JOB_STARTING; break;
28-
case NUM_ITERATIONS: status = JobEvent::JOB_COMPLETED; break;
29-
default: status = JobEvent::JOB_PROGRESS; break;
29+
TEST(MessageProcessingTest, MessagesAreProcessed) {
30+
try {
31+
nameMap[std::this_thread::get_id()] = "Main Thread";
32+
MessageEventManager eventManager{[](WorkerEvent* event)->void{appendNextIndex(event);}};
33+
const int NUM_ITERATIONS = 100;
34+
for (int i = 0; i < NUM_ITERATIONS; ++i) {
35+
//std::cerr << "Main PID = " << getpid() << "\n";
36+
JobEvent::Status status;
37+
switch (i + 1) {
38+
case 1: status = JobEvent::JOB_STARTING; break;
39+
case NUM_ITERATIONS: status = JobEvent::JOB_COMPLETED; break;
40+
default: status = JobEvent::JOB_PROGRESS; break;
41+
}
42+
//std::cerr << "Locking mutex at " << &getMeyersMutex << " on thread " << nameMap[std::this_thread::get_id()] << "\n";
43+
// getMeyersMutex().lock();//eventTrackerMutex->lock();
44+
//std::cerr << "Obtained mutex at " << &getMeyersMutex << " on thread " << nameMap[std::this_thread::get_id()] << "\n";
45+
eventManager.enqueue(status, (i + 1) / 100.0, i, std::to_string(i).c_str());
46+
//std::cerr << "Unlocking mutex at " << &getMeyersMutex << " on thread " << nameMap[std::this_thread::get_id()] << "\n";
47+
// getMeyersMutex().unlock();//eventTrackerMutex->unlock();
3048
}
31-
eventTrackerMutex.lock();
32-
eventManager.enqueue(status, (i + 1) / 100.0, i, std::to_string(i).c_str());
33-
eventTrackerMutex.unlock();
49+
eventManager.requestStopAndWaitForIt();
50+
std::vector<std::string> expectedResults = generateFibonacci(NUM_ITERATIONS);
51+
// delete eventTrackerMutex;
52+
ASSERT_TRUE(!sequenceComparison(eventTracker, expectedResults));
53+
} catch (const std::exception& e) {
54+
std::cerr << "Caught exception in main test body: " << e.what() << std::endl;
3455
}
35-
eventManager.requestStopAndWaitForIt();
36-
std::vector<std::string> expectedResults = generateFibonacci(NUM_ITERATIONS);
37-
ASSERT_TRUE(!sequenceComparison(eventTracker, expectedResults));
3856
}
3957

4058
void appendNextIndex(const WorkerEvent* event) {
41-
eventTrackerMutex.lock();
42-
if (eventTracker.empty()) {
43-
eventTracker.emplace_back("0");
44-
} else if (1 == eventTracker.size()) {
45-
eventTracker.emplace_back("1");
46-
} else {
47-
const long firstValue = std::stol(eventTracker[eventTracker.size() - 2]);
48-
const long secondValue = std::stol(eventTracker[eventTracker.size() - 1]);
49-
const std::string nextValue{std::to_string(firstValue + secondValue)};
50-
eventTracker.push_back(nextValue);
59+
//std::cerr << "Event PID = " << getpid() << "\n";
60+
if (!nameMap.contains(std::this_thread::get_id())) nameMap[std::this_thread::get_id()] = "Event Thread";
61+
try {
62+
//std::cerr << "Locking mutex at " << &getMeyersMutex << " on thread " << nameMap[std::this_thread::get_id()] << "\n";
63+
// getMeyersMutex().lock();//eventTrackerMutex->lock();
64+
//std::cerr << "Obtained mutex at " << &getMeyersMutex << " on thread " << nameMap[std::this_thread::get_id()] << "\n";
65+
if (eventTracker.empty()) {
66+
eventTracker.emplace_back("0");
67+
} else if (1 == eventTracker.size()) {
68+
eventTracker.emplace_back("1");
69+
} else {
70+
const long firstValue = std::stol(eventTracker[eventTracker.size() - 2]);
71+
const long secondValue = std::stol(eventTracker[eventTracker.size() - 1]);
72+
const std::string nextValue{std::to_string(firstValue + secondValue)};
73+
eventTracker.push_back(nextValue);
74+
}
75+
//std::cerr << "Unlocking mutex at " << &getMeyersMutex << " on thread " << nameMap[std::this_thread::get_id()] << "\n";
76+
// getMeyersMutex().unlock();//eventTrackerMutex->unlock();
77+
} catch (const std::exception& e) {
78+
std::cerr << "Caught exception in event loop: " << e.what() << std::endl;
79+
exit(2);
5180
}
52-
eventTrackerMutex.unlock();
5381
}
5482

5583
std::vector<std::string> generateFibonacci(const int length) {

tests/unit/smoke_test.cpp

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616

1717
void compare(const std::filesystem::path& file1, const std::filesystem::path& file2, float tolerance);
1818

19-
TEST(SmokeTest, UserProvidesFilesWithoutJMS) {
20-
constexpr int taskID = -1, hashID = 1489333437;
19+
void performSmokeTest(const int taskID, const int hashID) {
2120
const std::filesystem::path RESOURCE_DIRECTORY{RESOURCE_DIR};
2221
const std::filesystem::path OUTPUT_TARGET{RESOURCE_DIRECTORY /std::format("SimID_{}_0_.ida", hashID)};
2322
const std::array NECESSARY_FILES{
@@ -36,12 +35,22 @@ TEST(SmokeTest, UserProvidesFilesWithoutJMS) {
3635
throw std::runtime_error("Could not open output file[" + OUTPUT_TARGET.string() + "] for writing.");
3736
}
3837

39-
activateSolver(inputFileStream, outputFile, taskID);
38+
try {
39+
activateSolver(inputFileStream, outputFile, taskID);
40+
} catch (const std::exception& e) {
41+
std::cerr << "Error caught in test: " << e.what() << std::endl;
42+
exit(EXIT_FAILURE);
43+
}
4044
fclose(outputFile);
4145

4246
compare(OUTPUT_TARGET, NECESSARY_FILES[1], 1e-7);
4347
}
4448

49+
TEST(SmokeTest, UserProvidesFilesWithoutJMS) {
50+
constexpr int taskID = -1, hashID = 1489333437;
51+
performSmokeTest(taskID, hashID);
52+
}
53+
4554
TEST(SmokeTest, UserProvidesFilesWithJMS) {
4655
constexpr int taskID = 2025;
4756
#ifdef TEST_WITH_LOCALHOST
@@ -50,28 +59,7 @@ TEST(SmokeTest, UserProvidesFilesWithJMS) {
5059
constexpr int hashID = 256118677;
5160
#endif
5261

53-
const std::filesystem::path RESOURCE_DIRECTORY{RESOURCE_DIR};
54-
const std::filesystem::path OUTPUT_TARGET{RESOURCE_DIRECTORY /std::format("SimID_{}_0_.ida", hashID)};
55-
const std::array NECESSARY_FILES{
56-
RESOURCE_DIRECTORY /std::format("SimID_{}_0_.cvodeInput", hashID),
57-
RESOURCE_DIRECTORY /std::format("SimID_{}_0_.ida.expected", hashID)
58-
};
59-
for (const auto& file : NECESSARY_FILES) {
60-
assert(std::filesystem::exists(file));
61-
}
62-
FILE *outputFile = NULL;
63-
std::ifstream inputFileStream{NECESSARY_FILES[0]};
64-
if (!inputFileStream.is_open()) { throw std::runtime_error("input file [" + NECESSARY_FILES[0].string() + "] doesn't exit!"); }
65-
66-
// Open the output file...
67-
if (NULL == (outputFile = fopen(OUTPUT_TARGET.string().c_str(), "w"))) {
68-
throw std::runtime_error("Could not open output file[" + OUTPUT_TARGET.string() + "] for writing.");
69-
}
70-
71-
activateSolver(inputFileStream, outputFile, taskID);
72-
fclose(outputFile);
73-
74-
compare(OUTPUT_TARGET, NECESSARY_FILES[1], 1e-7);
62+
performSmokeTest(taskID, hashID);
7563
}
7664

7765
void compare(const std::filesystem::path& file1, const std::filesystem::path& file2, float tolerance) {

0 commit comments

Comments
 (0)