diff --git a/gematria/granite/graph_builder.cc b/gematria/granite/graph_builder.cc index 30f6c4ab..e4ead92c 100644 --- a/gematria/granite/graph_builder.cc +++ b/gematria/granite/graph_builder.cc @@ -485,9 +485,10 @@ void StrAppendList(std::stringstream& buffer, std::string_view list_name, buffer << list_name << " = ["; bool first = true; for (const auto& item : items) { - if (!first) { - buffer << ","; + if (first) { first = false; + } else { + buffer << ", "; } buffer << item; } diff --git a/gematria/granite/graph_builder_test.cc b/gematria/granite/graph_builder_test.cc index 82cdbca4..60659de2 100644 --- a/gematria/granite/graph_builder_test.cc +++ b/gematria/granite/graph_builder_test.cc @@ -571,5 +571,37 @@ TEST_F(BasicBlockGraphBuilderTest, TwoNops) { )pb")))); } +TEST_F(BasicBlockGraphBuilderTest, DebugString) { + CreateBuilder(OutOfVocabularyTokenBehavior::ReturnError()); + ASSERT_TRUE(builder_->AddBasicBlock(BasicBlockFromProto(ParseTextProto(R"pb( + canonicalized_instructions: { + mnemonic: "LEA" + llvm_mnemonic: "LEA64r" + output_operands: { register_name: "RDI" } + input_operands: { + address: { base_register: "RBX" displacement: 8 scaling: 1 } + } + })pb")))); + + const std::string expected_string = + "num_graphs = 1\n" + "num_nodes = 5\n" + "num_edges = 4\n" + "num_node_tokens = 16\n" + "num_nodes_per_block = [5]\n" + "num_edges_per_block = [4]\n" + "node_types = [NodeType::kInstruction, NodeType::kAddressOperand, " + "NodeType::kRegister, NodeType::kImmediate, NodeType::kRegister]\n" + "edge_senders = [2, 3, 1, 0]\n" + "edge_receivers = [1, 1, 0, 4]\n" + "edge_types = [EdgeType::kAddressBaseRegister, " + "EdgeType::kAddressDisplacement, EdgeType::kInputOperands, " + "EdgeType::kOutputOperands]\n" + "InstructionNodeMask = [1, 0, 0, 0, 0]\n" + "DeltaBlockIndex = [0]\n"; + + EXPECT_EQ(builder_->DebugString(), expected_string); +} + } // namespace } // namespace gematria