105 lines
2.8 KiB
C++
105 lines
2.8 KiB
C++
|
|
// Step 685: TaskCompletionMetrics (12 tests)
|
||
|
|
|
||
|
|
#include "TaskCompletionMetrics.h"
|
||
|
|
|
||
|
|
#include <iostream>
|
||
|
|
#include <string>
|
||
|
|
|
||
|
|
static int passed = 0, failed = 0;
|
||
|
|
#define TEST(name) { std::cout << " " << #name << "... "; }
|
||
|
|
#define PASS() { std::cout << "PASS\n"; ++passed; }
|
||
|
|
#define FAIL(msg) { std::cout << "FAIL: " << msg << "\n"; ++failed; }
|
||
|
|
#define CHECK(cond, msg) if (!(cond)) { FAIL(msg); return; }
|
||
|
|
|
||
|
|
void t1() {
|
||
|
|
TEST(empty_before_after_zero_changes);
|
||
|
|
auto o = TaskCompletionMetrics::diff("T", "", "", false, 50);
|
||
|
|
CHECK(o.linesChanged == 0, "expected 0");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t2() {
|
||
|
|
TEST(added_lines_counted);
|
||
|
|
auto o = TaskCompletionMetrics::diff("T", "", "a\nb\n", false, 50);
|
||
|
|
CHECK(o.linesAdded == 2, "expected 2 added");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t3() {
|
||
|
|
TEST(removed_lines_counted);
|
||
|
|
auto o = TaskCompletionMetrics::diff("T", "a\nb\n", "", false, 50);
|
||
|
|
CHECK(o.linesRemoved == 2, "expected 2 removed");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t4() {
|
||
|
|
TEST(lines_changed_equals_added_plus_removed);
|
||
|
|
auto o = TaskCompletionMetrics::diff("T", "a\n", "a\nb\n", false, 50);
|
||
|
|
CHECK(o.linesChanged == o.linesAdded + o.linesRemoved, "sum mismatch");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t5() {
|
||
|
|
TEST(tests_passed_preserved);
|
||
|
|
auto o = TaskCompletionMetrics::diff("T", "", "", true, 50);
|
||
|
|
CHECK(o.testsPassed, "testsPassed mismatch");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t6() {
|
||
|
|
TEST(quality_clamped_range);
|
||
|
|
auto low = TaskCompletionMetrics::diff("T", "", "", false, -5);
|
||
|
|
auto high = TaskCompletionMetrics::diff("T", "", "", false, 500);
|
||
|
|
CHECK(low.qualityRating == 0, "low clamp");
|
||
|
|
CHECK(high.qualityRating == 100, "high clamp");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t7() {
|
||
|
|
TEST(notes_preserved);
|
||
|
|
auto o = TaskCompletionMetrics::diff("T", "", "", false, 50, "note");
|
||
|
|
CHECK(o.notes == "note", "notes mismatch");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t8() {
|
||
|
|
TEST(task_id_preserved);
|
||
|
|
auto o = TaskCompletionMetrics::diff("ABC", "", "", false, 50);
|
||
|
|
CHECK(o.taskId == "ABC", "task id mismatch");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t9() {
|
||
|
|
TEST(count_lines_empty_zero);
|
||
|
|
CHECK(TaskCompletionMetrics::countLines("") == 0, "expected 0");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t10() {
|
||
|
|
TEST(count_lines_a_b_newline_is_two);
|
||
|
|
CHECK(TaskCompletionMetrics::countLines("a\nb\n") == 2, "expected 2");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t11() {
|
||
|
|
TEST(count_lines_without_trailing_newline_is_two);
|
||
|
|
CHECK(TaskCompletionMetrics::countLines("a\nb") == 2, "expected 2");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void t12() {
|
||
|
|
TEST(tests_provided_false_when_not_given);
|
||
|
|
auto o = TaskCompletionMetrics::diff("T", "", "", false, 50);
|
||
|
|
CHECK(!o.testsProvided, "testsProvided should be false");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
int main() {
|
||
|
|
std::cout << "Step 685: TaskCompletionMetrics\n";
|
||
|
|
t1(); t2(); t3(); t4(); t5(); t6();
|
||
|
|
t7(); t8(); t9(); t10(); t11(); t12();
|
||
|
|
std::cout << "\nResults: " << passed << "/" << (passed + failed) << " passed\n";
|
||
|
|
return failed == 0 ? 0 : 1;
|
||
|
|
}
|
||
|
|
|