#!/usr/bin/env python3
# This script lists the GNU failing tests by size
# Just like with util/run-gnu-test.sh, we expect the gnu sources
# to be in ../
import urllib.request

import urllib
import os
import glob
import json

base = "../gnu/tests/"
urllib.request.urlretrieve(
    "https://raw.githubusercontent.com/uutils/coreutils-tracking/main/gnu-full-result.json",
    "result.json",
)

tests = glob.glob(base + "/*/*.sh")
tests_pl = glob.glob(base + "/*/*.pl")
tests_xpl = glob.glob(base + "/*/*.xpl")
tests = tests + tests_pl + tests_xpl

# sort by size
list_of_files = sorted(tests, key=lambda x: os.stat(x).st_size)

with open("result.json", "r") as json_file:
    data = json.load(json_file)

for d in data:
    for e in data[d]:
        # Not all the tests are .sh files, rename them if not.
        script = e.replace(".log", ".sh")
        a = "%s%s/%s" % (base, d, script)
        if not os.path.exists(a):
            a = a.replace(".sh", ".pl")
            if not os.path.exists(a):
                a = a.replace(".pl", ".xpl")

        # the tests pass, we don't care anymore
        if data[d][e] == "PASS":
            list_of_files.remove(a)

# Remove the factor tests and reverse the list (bigger first)
tests = list(filter(lambda k: "factor" not in k, list_of_files))

for f in reversed(tests):
    print("%s: %s" % (f, os.stat(f).st_size))
print("")
print("%s tests remaining" % len(tests))

add a script to list the failing tests and sort them by size: (the smaller, the easier to fix in general)