Welcome, guest | Sign In | My Account | Store | Cart
import expressions
import utility_mill
from test import support

################################################################################

def hard_test():
   
while True:
        test
= generate_test()
       
with support.captured_stdout() as out:
           
try:
                expressions
.run(test, {})
           
except Exception as err:
               
print(err.args[0])
        val
= out.getvalue()[:-1]
       
try:
           
out = utility_mill.run_latest('Expression_Evaluator', INPUT=test)
       
except:
           
pass
       
else:
           
print('PASS' if val == out else 'FAIL')

################################################################################

def soft_test():
   
# test once a minute (softer)
   
import time
   
# we use some smart variables
    FAIL
= 5
    NAME
= 'Expression_Evaluator'
   
# enter the main program code
   
while True:
        version
= get_version(FAIL, NAME)
       
for minute in range(60):
            test
= generate_test()
           
with support.captured_stdout() as out:
               
try:
                    expressions
.run(test, {})
               
except Exception as err:
                   
print(err.args[0])
            val
= out.getvalue()[:-1]
           
out = get_results(FAIL, NAME, version, INPUT=test)
           
print('PASS' if val == out else 'FAIL')
            time
.sleep(60)

def get_version(fail, name):
   
for attempt in range(fail):
       
try:
           
return utility_mill.get_version(name)
       
except:
           
pass
   
raise SystemExit(1)

def get_results(fail, name, version, **query):
   
for attempt in range(fail):
       
try:
           
return utility_mill.get_results(name, version, query)
       
except:
           
pass
   
raise SystemExit(2)

################################################################################

import random
SR
= random.SystemRandom()
LIB
= '!"#$%&\'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'
OP
= '=', '+', '-', '*', '/', '//', '\\', '%', '**', '^', 'and', '&&', '&', 'or', '||', '|', '==', '!=', '>', '<', '>=', '=>', '<=', '=<'
MAX
= 5

################################################################################

def generate_test():
    variables
= set()
    required_lines
= SR.randint(0, MAX)
    lines
= []
   
while len(lines) != required_lines:
        create_line
(lines, variables)
   
return '\n'.join(lines)

def create_line(lines, variables):
    required_expressions
= SR.randint(0, MAX)
    expressions
= []
   
while len(expressions) != required_expressions:
        create_expression
(expressions, variables)
    lines
.append(';'.join(expressions))

def create_expression(expressions, variables):
    choice
= SR.choice(['assign', 'comment', 'empty', 'print'])
   
if choice == 'assign':
        tokens
= create_assign(variables)
        variables
.add('_')
   
elif choice == 'comment':
        tokens
= create_comment()
   
elif choice == 'empty':
        tokens
= []
   
else:
        tokens
= pad(create_evaluation(variables))
        variables
.add('_')
    expressions
.append(''.join(tokens))

def create_assign(variables):
    required_variables
= SR.randint(1, MAX)
    new_variables
= []
   
while len(new_variables) != required_variables:
        create_variable
(new_variables)
    tokens
= []
   
for variable in new_variables:
        tokens
.append(variable)
        tokens
.append('=')
    evaluation
= create_evaluation(variables)
    variables
.update(new_variables)
    tokens
.extend(evaluation)
    padded_tokens
= pad(tokens)
   
return padded_tokens

def create_variable(new_variables):
    required_length
= SR.randint(1, MAX)
    variable
= ''
   
while not valid_variable(variable):
        variable
= []
       
while len(variable) != required_length:
            variable
.append(SR.choice(LIB))
        variable
= ''.join(variable)
    new_variables
.append(variable)

def valid_variable(variable):
   
if not variable:
       
return False
   
if variable[0] == '#':
       
return False
   
try:
       
float(variable)
       
return False
   
except:
       
pass
   
if variable in OP:
       
return False
   
return True

def create_evaluation(variables):
    required_tokens
= SR.randint(1, MAX)
    tokens
= []
   
while len(tokens) != required_tokens:
       
if SR.randint(0, 1):
            tokens
.append(repr(SR.randint(1, 10)))
       
elif variables:
            tokens
.append(SR.choice(list(variables)))
    token_list
= []
   
for token in tokens:
        token_list
.append(token)
        token_list
.append(SR.choice(OP[1:]))
   
return token_list[:-1]

def pad(tokens):
    token_list
= []
   
for token in tokens:
        token_list
.append(token)
        token_list
.append(create_whitespace())
   
return token_list[:-1]

def create_whitespace():
    required_length
= SR.randint(1, MAX)
    whitespace
= []
   
while len(whitespace) != required_length:
       
if SR.randint(0, 1):
            whitespace
.append(' ')
       
else:
            whitespace
.append('\t')
   
return ''.join(whitespace)

def create_comment():
    required_length
= SR.randint(1, MAX)
    tokens
= ['#']
   
while len(tokens) != required_length:
        create_variable
(tokens)
    padded_tokens
= pad(tokens)
   
return padded_tokens

################################################################################
   
if __name__ == '__main__':
    soft_test
()

History