-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy patharray.py
More file actions
105 lines (86 loc) · 3.41 KB
/
array.py
File metadata and controls
105 lines (86 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# *******************************************************************************************
# *******************************************************************************************
#
# Name : array.py
# Purpose : Array Test generator
# Date : 3rd October 2022
# Author : Paul Robson ([email protected])
#
# *******************************************************************************************
# *******************************************************************************************
import os,sys,re,random
from simpletests import *
from assign import *
# *******************************************************************************************
#
# Variable Classes
#
# *******************************************************************************************
class Array(IntegerVariable):
def setup(self,parent):
self.dimensions = [random.randint(2,6) for n in range(0,random.randint(1,2))]
parent.handle.write("{0} dim {1}({2})\n".format(parent.nextLineNumber(),self.getName(),self.makeDimension(self.dimensions)))
self.data = {}
def updateValue(self):
element = self.makeDimension([random.randint(0,self.dimensions[n]) for n in range(0,len(self.dimensions))])
self.data[element] = self.getNewValue()
return [self.getItemName(element),self.data[element]]
def getItemName(self,element):
return self.getName()+self.getTypeChar()+"("+element+")"
def getTypeChar(self):
return ""
def makeDimension(self,d):
return ",".join([str(x) for x in d])
def defaultData(self):
return 0
def getChecks(self):
checks = []
if len(self.dimensions) == 1:
for x1 in range(0,self.dimensions[0]+1):
e = self.makeDimension([x1])
checks.append("assert {0} = {1}".format(self.getItemName(e),self.data[e] if e in self.data else self.defaultData()))
else:
for x1 in range(0,self.dimensions[0]+1):
for x2 in range(0,self.dimensions[1]+1):
e = self.makeDimension([x1,x2])
checks.append("assert {0} = {1}".format(self.getItemName(e),self.data[e] if e in self.data else self.defaultData()))
return checks
# *******************************************************************************************
#
# Repeated assignments generator
#
# *******************************************************************************************
class ArrayOne(TestAssertion):
def create(self,parent):
v = parent.variables[random.randint(0,len(parent.variables)-1)] # pick a variable
return v.updateValue()
def make(self,data):
kwd = "let " if random.randint(0,1) == 0 else ""
return "{2}{0} = {1}".format(data[0],data[1],kwd)
# *******************************************************************************************
#
# Complete Test Set class
#
# *******************************************************************************************
class ArrayTestSet(AssignTestSet):
def getFactoryList(self):
return [ # list of test factory classes
ArrayOne()
]
def startup(self):
self.variables = [] # create variables, all initially zero or ""
varCount = max(2,self.count // 5)
for i in range(0,varCount):
v = Array(i)
self.variables.append(v)
v.setup(self)
return self
def closedown(self):
for v in self.variables:
for c in v.getChecks():
self.handle.write("{0} {1}\n".format(self.nextLineNumber(),c))
return self
if __name__ == "__main__":
t =ArrayTestSet()
t.do(40)
t.startup().create().closedown().terminate()