Skip to content

[bug] Eldritch v1 and v2 functional differences #1337

@nullmonk

Description

@nullmonk

V2 missed many important features of v1. Here is a script that runs in v1 but not v2:

v1funcs = {
    "int": [],
    "float": [],
    "string": ["capitalize", "codepoints", "count", "elems", "endswith", "find", "format", "index", "isalnum", "isalpha", "isdigit", "islower", "isspace", "istitle", "isupper", "join", "lower", "lstrip", "partition", "removeprefix", "removesuffix", "replace", "rfind", "rindex", "rpartition", "rsplit", "rstrip", "split", "splitlines", "startswith", "strip", "title", "upper"],
    "bool": [],
    "list": ["append", "clear", "extend", "index", "insert", "pop", "remove"],
    "dict": ["clear", "get", "items", "keys", "pop", "popitem", "setdefault", "update", "values"],
    "tuple": [],
}

items = [
    10,                 # int
    3.14,               # float
    "eldritch",         # string
    True,               # bool
    [1,2,"a"],          # list
    {"a": 4},           # dict
    (1,2,3),            # tuple

    #b"\00\01",         # bytes - v2 exclusive
    #{"a", 1, 2, "b"}   # set - v2 exclusive
]

exit = False # Used to force an error

if "test>>>".rstrip(">") != "test":
    print(f"[!] Fail: failed to rstrip")

if "test> > >".rstrip("> ") != "test":
    print(f"[!] Fail: failed to rstrip")

if "< < <test".lstrip("< ") != "test":
    print(f"[!] Fail: failed to lstrip")

if "<<<test>>>".strip("<>") != "test":
    print(f"[!] Fail: failed to strip")

if len("test    test".split()) != 2:
    print("[!] Fail: split should handle repeats", "test    test".split())
    exit()

if len("test\ttest".split()) != 2:
    print("[!] Fail: split should split on tabs")
    exit()

# These functions should exist
c = chr(ord('A'))
if c != "A":
    print(f"[!] Fail: {c} != 'A'")
    exit()

for i in items:
    if type(i) in ("string", "list", "tuple"):
        i[0] # Ensure substrings for indexable types
        pass
    # look through all the types and see if they have the expected functions
    wants = dir(i)
    for func in v1funcs.get(type(i), []):
        if func not in wants:
            t = type(i)
            print(f"[!] Fail: missing function '{t}.{func}()'")
            #exit() # force an error to quit

res = regex.match("banana phone", r"(na+\sp)") # Raw strings dont work

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions