🐐 String uppercase/lowercase functions
This commit is contained in:
36
tests.py
36
tests.py
@@ -740,6 +740,36 @@ builtin_tests = [
|
||||
('SCINDE(",a,", ",")', Program([], [ExpressionStatement(BuiltIn("SCINDE", [String(",a,"), String(",")]))]), ValList([ValStr(""), ValStr("a"), ValStr("")])),
|
||||
# SCINDE: empty delimiter (split into chars)
|
||||
('SCINDE("abc", "")', Program([], [ExpressionStatement(BuiltIn("SCINDE", [String("abc"), String("")]))]), ValList([ValStr("a"), ValStr("b"), ValStr("c")])),
|
||||
# MAIVSCVLA: basic lowercase→uppercase
|
||||
('MAIVSCVLA("hello")', Program([], [ExpressionStatement(BuiltIn("MAIVSCVLA", [String("hello")]))]), ValStr("HELLO")),
|
||||
# MAIVSCVLA: mixed case
|
||||
('MAIVSCVLA("HeLLo")', Program([], [ExpressionStatement(BuiltIn("MAIVSCVLA", [String("HeLLo")]))]), ValStr("HELLO")),
|
||||
# MAIVSCVLA: already uppercase (idempotence)
|
||||
('MAIVSCVLA("HELLO")', Program([], [ExpressionStatement(BuiltIn("MAIVSCVLA", [String("HELLO")]))]), ValStr("HELLO")),
|
||||
# MAIVSCVLA: empty string
|
||||
('MAIVSCVLA("")', Program([], [ExpressionStatement(BuiltIn("MAIVSCVLA", [String("")]))]), ValStr("")),
|
||||
# MAIVSCVLA: Roman-numeral-shaped ASCII (case-only, not numeral-aware)
|
||||
('MAIVSCVLA("xii")', Program([], [ExpressionStatement(BuiltIn("MAIVSCVLA", [String("xii")]))]), ValStr("XII")),
|
||||
# MAIVSCVLA: non-alphabetic chars unchanged
|
||||
('MAIVSCVLA("a,b!1")', Program([], [ExpressionStatement(BuiltIn("MAIVSCVLA", [String("a,b!1")]))]), ValStr("A,B!1")),
|
||||
# MAIVSCVLA: via variable
|
||||
('DESIGNA s VT "foo"\nDIC(MAIVSCVLA(s))', Program([], [Designa(ID("s"), String("foo")), ExpressionStatement(BuiltIn("DIC", [BuiltIn("MAIVSCVLA", [ID("s")])]))]), ValStr("FOO"), "FOO\n"),
|
||||
# MAIVSCVLA: concatenated with &
|
||||
('MAIVSCVLA("hi") & "!"', Program([], [ExpressionStatement(BinOp(BuiltIn("MAIVSCVLA", [String("hi")]), String("!"), "SYMBOL_AMPERSAND"))]), ValStr("HI!")),
|
||||
# MINVSCVLA: basic uppercase→lowercase
|
||||
('MINVSCVLA("HELLO")', Program([], [ExpressionStatement(BuiltIn("MINVSCVLA", [String("HELLO")]))]), ValStr("hello")),
|
||||
# MINVSCVLA: mixed case
|
||||
('MINVSCVLA("HeLLo")', Program([], [ExpressionStatement(BuiltIn("MINVSCVLA", [String("HeLLo")]))]), ValStr("hello")),
|
||||
# MINVSCVLA: already lowercase (idempotence)
|
||||
('MINVSCVLA("hello")', Program([], [ExpressionStatement(BuiltIn("MINVSCVLA", [String("hello")]))]), ValStr("hello")),
|
||||
# MINVSCVLA: empty string
|
||||
('MINVSCVLA("")', Program([], [ExpressionStatement(BuiltIn("MINVSCVLA", [String("")]))]), ValStr("")),
|
||||
# MINVSCVLA: Roman-numeral-shaped ASCII (case-only, not numeral-aware)
|
||||
('MINVSCVLA("XII")', Program([], [ExpressionStatement(BuiltIn("MINVSCVLA", [String("XII")]))]), ValStr("xii")),
|
||||
# MINVSCVLA: non-alphabetic chars unchanged
|
||||
('MINVSCVLA("A,B!1")', Program([], [ExpressionStatement(BuiltIn("MINVSCVLA", [String("A,B!1")]))]), ValStr("a,b!1")),
|
||||
# MINVSCVLA round-trips MAIVSCVLA on lowercase input
|
||||
('MINVSCVLA(MAIVSCVLA("hi"))', Program([], [ExpressionStatement(BuiltIn("MINVSCVLA", [BuiltIn("MAIVSCVLA", [String("hi")])]))]), ValStr("hi")),
|
||||
]
|
||||
|
||||
class TestBuiltins(unittest.TestCase):
|
||||
@@ -850,6 +880,12 @@ error_tests = [
|
||||
("QVAERE('a{3}', 'aaa')", CentvrionError), # Arabic quantifier in pattern
|
||||
('SCINDE(I, ",")', CentvrionError), # SCINDE requires strings, not int
|
||||
('SCINDE("a", I)', CentvrionError), # SCINDE requires strings, not int delimiter
|
||||
('MAIVSCVLA(I)', CentvrionError), # MAIVSCVLA requires a string, not int
|
||||
('MAIVSCVLA()', CentvrionError), # MAIVSCVLA requires exactly 1 arg
|
||||
('MAIVSCVLA("a", "b")', CentvrionError), # MAIVSCVLA too many args
|
||||
('MINVSCVLA(I)', CentvrionError), # MINVSCVLA requires a string, not int
|
||||
('MINVSCVLA()', CentvrionError), # MINVSCVLA requires exactly 1 arg
|
||||
('MINVSCVLA("a", "b")', CentvrionError), # MINVSCVLA too many args
|
||||
('PETE("http://example.com")', CentvrionError), # RETE required for PETE
|
||||
('CVM RETE\nPETE(I)', CentvrionError), # PETE requires a string URL
|
||||
('PETITVR("/", FVNCTIO (r) VT {\nREDI("hi")\n})', CentvrionError), # RETE required for PETITVR
|
||||
|
||||
Reference in New Issue
Block a user