mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/55491 Reviewed By: janeyx99 Differential Revision: D27627477 Pulled By: gmagogsfm fbshipit-source-id: 4586d7c96eae762be53c1155c6c724c6d65f1e7f
163 lines
6.5 KiB
Python
163 lines
6.5 KiB
Python
import os
|
|
import sys
|
|
|
|
import torch
|
|
from typing import List
|
|
|
|
# Make the helper files in test/ importable
|
|
pytorch_test_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
|
sys.path.append(pytorch_test_dir)
|
|
from torch.testing._internal.jit_utils import JitTestCase
|
|
|
|
if __name__ == '__main__':
|
|
raise RuntimeError("This test file is not meant to be run directly, use:\n\n"
|
|
"\tpython test/test_jit.py TESTNAME\n\n"
|
|
"instead.")
|
|
|
|
class TestStringFormatting(JitTestCase):
|
|
|
|
def test_modulo_operator(self):
|
|
def fn(dividend: int, divisor: int) -> int:
|
|
return dividend % divisor
|
|
self.checkScript(fn, (5, 2))
|
|
|
|
def test_string_interpolation_with_string_placeholder_and_string_variable(self):
|
|
def fn(arg1: str):
|
|
return "%s in template" % arg1
|
|
self.checkScript(fn, ("foo",))
|
|
|
|
def test_string_interpolation_with_string_placeholder_and_format_string_variable(self):
|
|
def fn(arg1: str):
|
|
return arg1 % "foo"
|
|
self.checkScript(fn, ("%s in template",))
|
|
|
|
def test_string_interpolation_with_double_percent_in_string(self):
|
|
def fn(arg1: str):
|
|
return "%s in template %%" % arg1
|
|
self.checkScript(fn, ("foo",))
|
|
|
|
def test_string_interpolation_with_percent_in_string(self):
|
|
@torch.jit.script
|
|
def fn(arg1: str) -> str:
|
|
return "%s in template %" % arg1 # noqa: F501
|
|
|
|
with self.assertRaisesRegexWithHighlight(RuntimeError,
|
|
"Incomplete format specifier",
|
|
"\"%s in template %\" % arg1"):
|
|
fn("foo")
|
|
|
|
def test_string_interpolation_with_string_placeholder_and_digit_variable(self):
|
|
def fn(arg1: int) -> str:
|
|
return "%s in template" % arg1
|
|
self.checkScript(fn, (1,))
|
|
|
|
def test_string_interpolation_with_digit_placeholder_and_digit_variable(self):
|
|
def fn(arg1: int) -> str:
|
|
return "%d in template" % arg1
|
|
self.checkScript(fn, (1,))
|
|
|
|
def test_string_interpolation_with_alternate_digit_placeholder(self):
|
|
def fn(arg1: int) -> str:
|
|
return "%i in template" % arg1
|
|
self.checkScript(fn, (1,))
|
|
|
|
def test_string_interpolation_with_digit_placeholder_and_string_variable(self):
|
|
@torch.jit.script
|
|
def fn(arg1: str) -> str:
|
|
return "%d in template" % arg1
|
|
|
|
with self.assertRaisesRegexWithHighlight(RuntimeError,
|
|
"%d requires a number for formatting, but got String",
|
|
"\"%d in template\" % arg1"):
|
|
fn("1")
|
|
|
|
def test_string_interpolation_with_exponent_placeholder_and_string_variable(self):
|
|
@torch.jit.script
|
|
def fn(arg1: str) -> str:
|
|
return "%e in template" % arg1
|
|
|
|
with self.assertRaisesRegexWithHighlight(RuntimeError,
|
|
"%e requires a number for formatting, but got String",
|
|
"\"%e in template\" % arg1"):
|
|
fn("1")
|
|
|
|
def test_string_interpolation_with_lowercase_exponent_placeholder_and_digit_variable(self):
|
|
def fn(arg1: int) -> str:
|
|
return "%e in template" % arg1
|
|
self.checkScript(fn, (1,))
|
|
|
|
def test_string_interpolation_with_capital_exponent_placeholder_and_digit_variable(self):
|
|
def fn(arg1: int) -> str:
|
|
return "%E in template" % arg1
|
|
self.checkScript(fn, (1,))
|
|
|
|
def test_string_interpolation_with_float_placeholder_and_float_variable(self):
|
|
def fn(arg1: float) -> str:
|
|
return "%f in template" % arg1
|
|
self.checkScript(fn, (1.0,))
|
|
|
|
def test_string_interpolation_with_float_placeholder_and_digit_variable(self):
|
|
def fn(arg1: int) -> str:
|
|
return "%f in template" % arg1
|
|
self.checkScript(fn, (1,))
|
|
|
|
def test_string_interpolation_with_char_placeholder_and_char_variable(self):
|
|
def fn(arg1: str) -> str:
|
|
return "%c in template" % arg1
|
|
self.checkScript(fn, ("a",))
|
|
|
|
def test_string_interpolation_with_char_placeholder_and_digit_variable(self):
|
|
def fn(arg1: int) -> str:
|
|
return "%c in template" % arg1
|
|
self.checkScript(fn, (97,))
|
|
|
|
def test_string_interpolation_with_char_placeholder_and_true_string_variable(self):
|
|
@torch.jit.script
|
|
def fn(arg1: str) -> str:
|
|
return "%c in template" % arg1
|
|
|
|
with self.assertRaisesRegexWithHighlight(RuntimeError,
|
|
"%c requires an int or char for formatting, but got String",
|
|
"\"%c in template\" % arg1"):
|
|
fn("foo")
|
|
|
|
def test_string_interpolation_with_multiple_placeholders(self):
|
|
def fn(arg1: str, arg2: int, arg3: float) -> str:
|
|
return "%s %d %f in template" % (arg1, arg2, arg3)
|
|
self.checkScript(fn, ("foo", 1, 1))
|
|
|
|
def test_string_interpolation_with_subscript(self):
|
|
def fn(arg1: List[str]) -> str:
|
|
return "%s in template" % arg1[0]
|
|
self.checkScript(fn, (["foo", "bar"],))
|
|
|
|
def test_string_interpolation_with_too_few_arguments(self):
|
|
@torch.jit.script
|
|
def fn(arg1: str) -> str:
|
|
return "%s %s in template" % arg1
|
|
|
|
with self.assertRaisesRegexWithHighlight(RuntimeError,
|
|
"Too few arguments for format string",
|
|
"\"%s %s in template\" % arg1"):
|
|
fn("foo")
|
|
|
|
def test_string_interpolation_with_too_many_arguments(self):
|
|
@torch.jit.script
|
|
def fn(arg1: str, arg2: str) -> str:
|
|
return "%s in template" % (arg1, arg2) # noqa: F507
|
|
|
|
with self.assertRaisesRegexWithHighlight(RuntimeError,
|
|
"Too many arguments for format string",
|
|
"\"%s in template\" % (arg1, arg2"):
|
|
fn("foo", "bar")
|
|
|
|
def test_string_interpolation_with_unknown_format_specifier(self):
|
|
@torch.jit.script
|
|
def fn(arg1: str) -> str:
|
|
return "%a in template" % arg1 # noqa: F501
|
|
|
|
with self.assertRaisesRegexWithHighlight(RuntimeError,
|
|
"The specifier %a is not supported in TorchScript format strings",
|
|
"\"%a in template\" % arg1"):
|
|
fn("foo")
|