diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-11-04 02:39:01 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-11-04 03:27:58 +0100 |
| commit | 6ebaad27d92a5bb47fdf9618df12d3b4120f664e (patch) | |
| tree | e390fc03fe2475c158becc313b7ed431d9bae61c | |
| parent | c667f5a6edc3a7f394d53f8e4c163cc19305dbad (diff) | |
| download | ft_printf_test-6ebaad27d92a5bb47fdf9618df12d3b4120f664e.tar.gz ft_printf_test-6ebaad27d92a5bb47fdf9618df12d3b4120f664e.tar.bz2 ft_printf_test-6ebaad27d92a5bb47fdf9618df12d3b4120f664e.zip | |
Added basic test generator
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | generate.py | 93 | ||||
| -rw-r--r-- | header.h | 2 | ||||
| -rw-r--r-- | main.c | 2 |
5 files changed, 93 insertions, 7 deletions
@@ -4,3 +4,4 @@ ft_printf_test *.ghc *.dSYM result.log +generated.c @@ -10,7 +10,7 @@ RM = rm -f MAKE = make -j4 SRC = main.c helper.c tests/pft_tests.c tests/moulitest_tests.c tests/printf_tester_tests.c \ - tests/printf_tests_tests.c + tests/printf_tests_tests.c generated.c OBJ = $(SRC:.c=.o) run: all diff --git a/generate.py b/generate.py index 6ac04b0..f119874 100644 --- a/generate.py +++ b/generate.py @@ -1,17 +1,98 @@ import os import sys import argparse +import string +from random import randrange, choice, shuffle +INT_MIN = -2147483648 +INT_MAX = 2147483647 +UINT_MAX = 4294967295 +CHAR_MIN = -128 +CHAR_MAX = 127 + +ULONG_INT_MAX = 18446744073709551616 + +chars = (list(string.ascii_lowercase) + list(string.ascii_uppercase) + + list(string.punctuation) + list(string.digits)) +chars.remove("\"") +chars.remove("\\") +chars.extend([r"\t", r"\n", r"\r", r"\v", r"\f", "\\\\"]) + def parse_args(): parser = argparse.ArgumentParser(prog="ft_printf_test generator", description="A random test generator") - parser.add_argument("-n", help="number of tests to generate", type=int) - parser.add_argument("-q", "--quiet", - help="decrease vebosity", action="store_true") - parser.add_argument("-c", "--no-clear", help="disable terminal clear before output") - parser.add_argument("-f", "--output-file", help="output file name", default="tests/generated.c")) + parser.add_argument("-n", help="number of tests to generate", type=int, default=100) return vars(parser.parse_args(sys.argv[1:])) +def random_string(n): + b = "".join([choice(chars) for _ in range(randrange(n))]) + return b + +def random_flags(): + flags = "" + possible = "#0- +'" + for _ in range(randrange(len(possible))): + flags += choice(possible) + return flags + +def random_width(): + r = randrange(100) + if r < 5: + return "*" + elif r < 10: + return "" + return str(randrange(200)) + +def random_precision(): + r = randrange(100) + if r < 5: + return ".*" + elif r < 10: + return "" + elif r < 12: + return "." + return "." + str(randrange(200)) + +def generate_args(): + a = [] + b = [] + fmt_str ="diuxXcsp%" + for _ in range(15): + t = fmt_str[randrange(len(fmt_str))] + a.append(f"%{random_flags()}{random_width()}{random_precision()}{t}") + b.append({ + 'c': randrange(CHAR_MIN, CHAR_MAX + 1), + 's': "\"" + random_string(10) + "\"", + 'd': randrange(INT_MIN, INT_MAX + 1), + 'i': randrange(INT_MIN, INT_MAX + 1), + 'u': randrange(UINT_MAX), + 'x': randrange(UINT_MAX), + 'X': randrange(UINT_MAX), + 'p': str(randrange(ULONG_INT_MAX)) + "lu", + '%': None + }[t]) + return a, b + + +def generate_printf(): + a, b = generate_args() + s = "\"" + s2 = "" + for x, y in zip(a, b): + s += x + if x[-1] != '%': + s2 += "," + str(y) + + return f"ASSERT_PRINTF({s}\" {s2});" + + if __name__ == "__main__": - pass + options = parse_args() + with open("generated.c", "w") as file: + file.write("#include \"header.h\"\n\nvoid generated_test(void)\n{\n\t") + + for _ in range(options["n"]): + file.write(generate_printf() + "\n\t") + + file.write("}\n") @@ -17,6 +17,8 @@ int user_ret; char *origin_buf; char *user_buf; +void generated_test(void); + int ft_printf(const char *format, ...); void print_buf_ko(char *msg); @@ -56,5 +56,7 @@ int main(int argc, char **argv) test_printf_tester(); test_printf_tests_test(); + + generated_test(); return 0; } |
