diff --git a/src/input_output_test.cpp b/src/input_output_test.cpp index 8ab918e..97d5a75 100644 --- a/src/input_output_test.cpp +++ b/src/input_output_test.cpp @@ -28,16 +28,13 @@ int main(int, const char**) { sequence->Process(input_string); if (sequence->Output() == output_string) { - std::cout << "[PASS] " << test << std::endl; + std::cout << " [PASS] " << test << std::endl; } else { - std::cout << "[FAIL] " << test << std::endl; + std::cout << " [FAIL] " << test << std::endl; std::cout << "---[Output]------------------" << std::endl; std::cout << sequence->Output() << std::endl; - std::cout << "-----------------------------" << std::endl; - std::cout << " vs " << std::endl; std::cout << "---[Expected]----------------" << std::endl; std::cout << output_string << std::endl; - std::cout << "-----------------------------" << std::endl; } } } diff --git a/src/translator/sequence/Sequence.cpp b/src/translator/sequence/Sequence.cpp index 6d8d893..bd6a9c0 100644 --- a/src/translator/sequence/Sequence.cpp +++ b/src/translator/sequence/Sequence.cpp @@ -41,7 +41,6 @@ void Sequence::ComputeInternalRepresentation(const std::string& input) { //std::cout << token->toString() << std::endl; } - //return; // Parser. SequenceParser parser(&tokens); @@ -561,7 +560,8 @@ void Sequence::LayoutComputeMessagesPositions() { message.line_bottom = message.bottom; if (message.is_separated) { - message.offset = offset++; + message.offset = offset; + offset += 2; } else { message.line_top = message.bottom; } @@ -573,7 +573,7 @@ void Sequence::LayoutComputeMessagesPositions() { }; for (auto& cut : graph::Cut(message_dependencies, preference)) { - int offset = 1; + int offset = 2; // Fast path: Only one message, no crossing. if (cut.size() == 1) { @@ -624,6 +624,11 @@ void Sequence::LayoutComputeMessagesPositions() { add_message(message, y, offset); } } + + // Sort message by y. + std::sort(messages.begin(), messages.end(), [](const Message& a, const Message& b) { + return a.line_bottom > b.line_bottom; + }); } void Sequence::Actor::Draw(Screen& screen, int height) { @@ -684,7 +689,7 @@ void Sequence::Draw() { actor.Draw(screen, height); } - for (auto& message : messages) { + for(auto message : messages) { message.Draw(screen); } diff --git a/testing/sequence/interleaved/output b/testing/sequence/interleaved/output index dda8b3b..cf523d1 100644 --- a/testing/sequence/interleaved/output +++ b/testing/sequence/interleaved/output @@ -2,12 +2,12 @@ │A│ │B│ └┬┘ └┬┘ │ │ - │─┐ │ + │──┐ │ │message 2│ │────────>│ - │ │ │ + │ │ │ │message 1│ - │ └──────>│ + │ └─────>│ ┌┴┐ ┌┴┐ │A│ │B│ └─┘ └─┘ diff --git a/testing/sequence/interleaved_complex/output b/testing/sequence/interleaved_complex/output index 950d011..e5e8413 100644 --- a/testing/sequence/interleaved_complex/output +++ b/testing/sequence/interleaved_complex/output @@ -2,23 +2,23 @@ │A│ │B│ └┬┘ └┬┘ │ │ - │─┐ │ + │──┐ │ │message 2│ │────────>│ - │ │ │ + │ │ │ │message 1│ - │ └──────>│ + │ └─────>│ │ │ - │──┐ │ - │─┐│ │ + │────┐ │ + │──┐ │ │ │message 5│ │────────>│ - │ ││ │ + │ │ │ │ │message 4│ - │ └──────>│ - │ │ │ - │message 3│ │ └─────>│ + │ │ │ + │message 3│ + │ └───>│ ┌┴┐ ┌┴┐ │A│ │B│ └─┘ └─┘ diff --git a/testing/sequence/interleaved_complex_2/input b/testing/sequence/interleaved_complex_2/input new file mode 100644 index 0000000..d351c2e --- /dev/null +++ b/testing/sequence/interleaved_complex_2/input @@ -0,0 +1,8 @@ +1) A->B: message 1 +2) A->B: message 2 +3) A->B: message 3 +4) A->B: message 4 +5) A->B: message 5 + +A: 1<2<3<4<5 +B: 2<1<5<3<4 diff --git a/testing/sequence/interleaved_complex_2/output b/testing/sequence/interleaved_complex_2/output new file mode 100644 index 0000000..c2797f5 --- /dev/null +++ b/testing/sequence/interleaved_complex_2/output @@ -0,0 +1,24 @@ +┌─┐ ┌─┐ +│A│ │B│ +└┬┘ └┬┘ + │ │ + │──┐ │ + │message 2│ + │────────>│ + │ │ │ + │message 1│ + │ └─────>│ + │ │ + │──┐ │ + │──│─┐ │ + │message 5│ + │────────>│ + │ │ │ │ + │message 3│ + │ └─────>│ + │ │ │ + │message 4│ + │ └───>│ +┌┴┐ ┌┴┐ +│A│ │B│ +└─┘ └─┘