================ @@ -55,5 +55,268 @@ TEST_F(FormatTestTableGen, NoSpacesInSquareBracketLists) { verifyFormat("def flag : Flag<[\"-\", \"--\"], \"foo\">;"); } +TEST_F(FormatTestTableGen, LiteralsAndIdentifiers) { + verifyFormat("def LiteralAndIdentifiers {\n" + " let someInteger = -42;\n" + " let 0startID = $TokVarName;\n" + " let 0xstartInteger = 0x42;\n" + " let someIdentifier = $TokVarName;\n" + "}\n"); +} + +TEST_F(FormatTestTableGen, BangOperators) { + verifyFormat("def BangOperators {\n" + " let IfOpe = !if(\n" + " !not(!and(!gt(!add(1, 2), !sub(3, 4)), !isa<Ty>($x))),\n" + " !foldl(0, !listconcat(!range(5, 6), !range(7, 8)),\n" + " total, rec, !add(total, rec.Number)),\n" + " !tail(!range(9, 10)));\n" + " let ForeachOpe = !foreach(\n" + " arg, arglist,\n" + " !if(!isa<SomeType>(arg.Type),\n" + " !add(!cast<SomeOtherType>(arg).Number, x), arg));\n" + " let CondOpe1 = !cond(!eq(size, 1): 1,\n" + " !eq(size, 2): 1,\n" + " !eq(size, 4): 1,\n" + " !eq(size, 8): 1,\n" + " !eq(size, 16): 1,\n" + " true: 0);\n" + " let CondOpe2 = !cond(!lt(x, 0): \"negativenegative\",\n" + " !eq(x, 0): \"zerozero\",\n" + " true: \"positivepositive\");\n" + " let CondOpe2WithComment = !cond(!lt(x, 0): // negative\n" + " \"negativenegative\",\n" + " !eq(x, 0): // zero\n" + " \"zerozero\",\n" + " true: // default\n" + " \"positivepositive\");\n" + "}\n"); +} + +TEST_F(FormatTestTableGen, Include) { + verifyFormat("include \"test/IncludeFile.h\"\n"); +} + +TEST_F(FormatTestTableGen, Types) { + verifyFormat("def Types : list<int>, bits<3>, list<list<string>> {}\n"); +} + +TEST_F(FormatTestTableGen, SimpleValue1_SingleLiterals) { + verifyFormat("def SimpleValue {\n" + " let Integer = 42;\n" + " let String = \"some string\";\n" + "}\n"); +} + +TEST_F(FormatTestTableGen, SimpleValue1_MultilineString) { + // verifyFormat does not understand multiline TableGen code-literals + std::string DefWithCode = + "def SimpleValueCode {\n" + " let Code =\n" + " [{ A TokCode is nothing more than a multi-line string literal " + "delimited by \\[{ and }\\]. It can break across lines and the line " + "breaks are retained in the string. " + "(https://llvm.org/docs/TableGen/ProgRef.html#grammar-token-TokCode)}];\n" + "}\n"; + std::string DefWithCodeMessingUp = + "def SimpleValueCode {\n" + " let Code= " + "[{ A TokCode is nothing more than a multi-line string literal " + "delimited by \\[{ and }\\]. It can break across lines and the line " + "breaks are retained in the string. " + "(https://llvm.org/docs/TableGen/ProgRef.html#grammar-token-TokCode)}];\n" + " } \n"; + EXPECT_EQ(DefWithCode, format(DefWithCodeMessingUp)); +} + +TEST_F(FormatTestTableGen, SimpleValue2) { + verifyFormat("def SimpleValue2 {\n" + " let True = true;\n" + " let False = false;\n" + "}\n"); +} + +TEST_F(FormatTestTableGen, SimpleValue3) { + verifyFormat("class SimpleValue3<int x> { int Question = ?; }\n"); +} + +TEST_F(FormatTestTableGen, SimpleValue4) { + verifyFormat("def SimpleValue4 { let ValueList = {1, 2, 3}; }\n"); +} + +TEST_F(FormatTestTableGen, SimpleValue5) { + verifyFormat("def SimpleValue5 {\n" + " let SquareList = [1, 4, 9];\n" + " let SquareListWithType = [\"a\", \"b\", \"c\"]<string>;\n" + " let SquareListListWithType = [[1, 2], [3, 4, 5], [7]]<\n" + " list<int>>;\n" + " let SquareBitsListWithType = [ {1, 2},\n" + " {3, 4} ]<list<bits<8>>>;\n" + "}\n"); ---------------- hnakamura5 wrote:
SquareListListWithType and SquareBitsListWithType seems a little bit strange for they are similar but the format is difference. One reason is '[' and '{' cannot be connected because '[{' is the beginning of multiline string. https://github.com/llvm/llvm-project/pull/81611 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits