| #pragma once | |
| #include "test/cpp/jit/test_base.h" | |
| #include "test/cpp/jit/test_utils.h" | |
| #include "torch/csrc/jit/code_template.h" | |
| namespace torch { | |
| namespace jit { | |
| namespace test { | |
| static const auto ct = CodeTemplate(R"( | |
| int foo($args) { | |
| $bar | |
| $bar | |
| $a+$b | |
| } | |
| int commatest(int a${,stuff}) | |
| int notest(int a${,empty,}) | |
| )"); | |
| static const auto ct_expect = R"( | |
| int foo(hi, 8) { | |
| what | |
| on many | |
| lines... | |
| 7 | |
| what | |
| on many | |
| lines... | |
| 7 | |
| 3+4 | |
| } | |
| int commatest(int a, things..., others) | |
| int notest(int a) | |
| )"; | |
| void testCodeTemplate() { | |
| { | |
| TemplateEnv e; | |
| e.s("hi", "foo"); | |
| e.v("what", {"is", "this"}); | |
| TemplateEnv c(e); | |
| c.s("hi", "foo2"); | |
| ASSERT_EQ(e.s("hi"), "foo"); | |
| ASSERT_EQ(c.s("hi"), "foo2"); | |
| ASSERT_EQ(e.v("what")[0], "is"); | |
| } | |
| { | |
| TemplateEnv e; | |
| e.v("args", {"hi", "8"}); | |
| e.v("bar", {"what\non many\nlines...", "7"}); | |
| e.s("a", "3"); | |
| e.s("b", "4"); | |
| e.v("stuff", {"things...", "others"}); | |
| e.v("empty", {}); | |
| auto s = ct.format(e); | |
| // std::cout << "'" << s << "'\n"; | |
| // std::cout << "'" << ct_expect << "'\n"; | |
| ASSERT_EQ(s, ct_expect); | |
| } | |
| } | |
| } // namespace test | |
| } // namespace jit | |
| } // namespace torch |