# zot/fuzzy.py
#
#
__copyright__ = "Copyright 2015, B.H.J Thate"
""" generate fuzzy objects used for testing. """
## IMPORTS
from zot.object import Object
from zot.utils import error
import random
import string
## DEFINES
kinds = Object()
kinds.register("int", int)
kinds.register("float", float)
kinds.register("complex", complex)
kinds.register("list", list)
kinds.register("tuple", tuple)
kinds.register("range", range)
kinds.register("str", str)
kinds.register("bytes", bytes)
kinds.register("bytearray", bytearray)
kinds.register("memoryview", memoryview)
kinds.register("set", set)
kinds.register("frozenset", frozenset)
kinds.register("dict", dict)
[docs]def printables(*args, **kwargs): return [a for a in string.printable]
[docs]def random_int(*args, **kwargs):
if args: return random.randint(0, int(random.random()*args[0]))
else: return random.randint(0, int(random.random() * 1000))
[docs]def random_float(*args, **kwargs): return random.random() * 1000
[docs]def random_complex(*args, **kwargs): return complex(random_int(1), random_int(1))
[docs]def random_list(*args, **kwargs): return [a for a in random.sample(printables(), random_int(len(string.printable)-1))]
[docs]def random_tuple(*args, **kwargs): return tuple([a for a in random.sample(printables(), random_int(len(string.printable)-1))])
[docs]def random_range(*args, **kwargs): return range(random_int(1), random_int(random.random()*1000))
[docs]def random_str(*args, **kwargs): return "".join(random.sample(printables(), random_int(len(string.printable)-1)))
[docs]def random_bytes(*args, **kwargs): return bytes(random_str(), "utf-8")
[docs]def random_bytearray(*args, **kwargs): return bytearray(random_str(), "utf-8")
[docs]def random_memoryview(*args, **kwargs): return memoryview(bytes(random_str(), "utf-8"))
[docs]def random_set(*args, **kwargs): return set(random_str())
[docs]def random_frozenset(*args, **kwargs): return frozenset(random_str())
[docs]def random_dict(*args, **kwargs): return {}
rand = Object()
rand.define("int", random_int)
rand.define("float", random_float)
rand.define("complex", random_complex)
rand.define("list", random_list)
rand.define("tuple", random_tuple)
rand.define("range", random_range)
rand.define("str", random_str)
rand.define("bytes", random_bytes)
rand.define("bytearray", random_bytearray)
rand.define("memoryview", random_memoryview)
rand.define("set", random_set)
rand.define("frozenset", random_frozenset)
rand.define("dict", random_dict)
kind_list =["int", "float", "complex", "list", "tuple", "range", "str", "bytes",
"bytearray", "memoryview", "set", "frozenset", "dict"]
types_list = [int, float, complex, list, tuple, range, str, bytes,
bytearray, memoryview, set, frozenset, dict]
objects_list = [Object, ]
## FUNCTIONS
[docs]def fuzzy(kind, *args, **kwargs):
try: return rand[kind]()
except: error()
[docs]def random_fuzz(*args, **kwargs):
kind = random.choice(kind_list)
return fuzzy(kind)