use crate::services::submission::{SubmissionResult, SubmissionStatus};
pub fn format_result(result: &SubmissionResult) {
println!("\n==================================================");
if result.is_test {
let passed = result.correct_answer.unwrap_or(false);
if passed {
println!(" โ
All test cases passed");
} else {
println!(" โ Test Failed");
}
println!("==================================================\n");
if let (Some(correct), Some(total)) = (result.total_correct, result.total_testcases) {
println!("๐งช Testcases: {} / {} passed", correct, total);
}
match &result.status {
SubmissionStatus::Accepted if passed => {
if let Some(runtime) = &result.runtime {
println!("โฑ๏ธ Runtime: {}", runtime);
}
if let Some(memory) = &result.memory {
println!("๐พ Memory: {}", memory);
}
if let Some(mp) = result.memory_percentile {
println!("๐ Memory Percentile: {:.2}%", mp);
}
if let Some(rp) = result.runtime_percentile {
println!("โฐ Runtime Percentile: {:.2}%", rp);
}
}
SubmissionStatus::Accepted => {
if let (Some(code_answers), Some(expected)) =
(&result.code_answer, &result.expected_code_answer)
{
println!("Expected");
println!("{}", expected.join("\t"));
println!("Output");
println!("{}", code_answers.join("\t"));
}
}
SubmissionStatus::RuntimeError => {
if let Some(err) = &result.full_runtime_error {
println!("โ Error\n{}", err);
}
}
_ => {}
}
} else {
let status_label = match &result.status {
SubmissionStatus::Accepted => {
println!(" โ
Accepted");
"Accepted"
}
SubmissionStatus::WrongAnswer => {
println!(" โ Wrong Answer");
"Wrong Answer"
}
SubmissionStatus::CompileError => {
println!(" โ Compile Error");
"Compile Error"
}
SubmissionStatus::RuntimeError => {
println!(" โ Runtime Error");
"Runtime Error"
}
SubmissionStatus::TimeLimitExceeded => {
println!(" โ Time Limit Exceeded");
"Time Limit Exceeded"
}
SubmissionStatus::Unknown(msg) => {
println!(" โ {}", msg);
msg.as_str()
}
};
println!("==================================================\n");
if let (Some(correct), Some(total)) = (result.total_correct, result.total_testcases) {
println!("๐งช Testcases: {} / {} passed", correct, total);
}
match &result.status {
SubmissionStatus::Accepted => {
if let Some(runtime) = &result.runtime {
println!("โฑ๏ธ Runtime: {}", runtime);
}
if let Some(memory) = &result.memory {
println!("๐พ Memory: {}", memory);
}
if let Some(mp) = result.memory_percentile {
println!("๐ Memory Percentile: {:.2}%", mp);
}
if let Some(rp) = result.runtime_percentile {
println!("โฐ Runtime Percentile: {:.2}%", rp);
}
}
SubmissionStatus::CompileError => {
if let Some(err) = &result.compile_error {
println!("๐ฅ Compiler Output:\n{}", err);
}
}
SubmissionStatus::WrongAnswer => {
if let Some(input) = &result.input {
print!("INPUT: ");
for part in input.split('\n') {
print!("{}\t", part);
}
println!();
}
if let (Some(expected), Some(output)) =
(&result.expected_output, &result.code_output)
{
println!("Expected: {}\nOutput: {}", expected, output);
}
}
SubmissionStatus::RuntimeError => {
if let Some(err) = &result.full_runtime_error {
println!("โ Error\n{}", err);
}
}
_ => {
let _ = status_label;
}
}
}
}