blob: 954e6c9ebfc1f26c23d043aafc6ee23692d493d5 [file] [log] [blame]
Guido van Rossum189f8fb1995-03-30 09:42:43 +00001#! /usr/local/bin/python
2
3"""
4"PYSTONE" Benchmark Program
5
6Version: Python/1.0 (corresponds to C/1.1)
7
8Author: Reinhold P. Weicker, CACM Vol 27, No 10, 10/84 pg. 1013.
9
10 Translated from ADA to C by Rick Richardson.
11 Every method to preserve ADA-likeness has been used,
12 at the expense of C-ness.
13
14 Translated from C to Python by Guido van Rossum.
15"""
16
17LOOPS = 1000
18
19from time import clock
20
21__version__ = "1.0"
22
23[Ident1, Ident2, Ident3, Ident4, Ident5] = range(1, 6)
24
25class Record:
26
27 def __init__(self, PtrComp = None, Discr = 0, EnumComp = 0,
28 IntComp = 0, StringComp = 0):
29 self.PtrComp = PtrComp
30 self.Discr = Discr
31 self.EnumComp = EnumComp
32 self.IntComp = IntComp
33 self.StringComp = StringComp
34
35 def copy(self):
36 return Record(self.PtrComp, self.Discr, self.EnumComp,
37 self.IntComp, self.StringComp)
38
39TRUE = 1
40FALSE = 0
41
42def main():
43 Proc0()
44
45IntGlob = 0
46BoolGlob = FALSE
47Char1Glob = '\0'
48Char2Glob = '\0'
49Array1Glob = [0]*51
50Array2Glob = map(lambda x: x[:], [Array1Glob]*51)
51PtrGlb = None
52PtrGlbNext = None
53
54def Proc0():
55 global IntGlob
56 global BoolGlob
57 global Char1Glob
58 global Char2Glob
59 global Array1Glob
60 global Array2Glob
61 global PtrGlb
62 global PtrGlbNext
63
64 starttime = clock()
65 for i in range(LOOPS):
66 pass
67 nulltime = clock() - starttime
68
69 PtrGlbNext = Record()
70 PtrGlb = Record()
71 PtrGlb.PtrComp = PtrGlbNext
72 PtrGlb.Discr = Ident1
73 PtrGlb.EnumComp = Ident3
74 PtrGlb.IntComp = 40
75 PtrGlb.StringComp = "DHRYSTONE PROGRAM, SOME STRING"
76 String1Loc = "DHRYSTONE PROGRAM, 1'ST STRING"
77 Array2Glob[8][7] = 10
78
79 starttime = clock()
80
81 for i in range(LOOPS):
82 Proc5()
83 Proc4()
84 IntLoc1 = 2
85 IntLoc2 = 3
86 String2Loc = "DHRYSTONE PROGRAM, 2'ND STRING"
87 EnumLoc = Ident2
88 BoolGlob = not Func2(String1Loc, String2Loc)
89 while IntLoc1 < IntLoc2:
90 IntLoc3 = 5 * IntLoc1 - IntLoc2
91 IntLoc3 = Proc7(IntLoc1, IntLoc2)
92 IntLoc1 = IntLoc1 + 1
93 Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3)
94 PtrGlb = Proc1(PtrGlb)
95 CharIndex = 'A'
96 while CharIndex <= Char2Glob:
97 if EnumLoc == Func1(CharIndex, 'C'):
98 EnumLoc = Proc6(Ident1)
99 CharIndex = chr(ord(CharIndex)+1)
100 IntLoc3 = IntLoc2 * IntLoc1
101 IntLoc2 = IntLoc3 / IntLoc1
102 IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1
103 IntLoc1 = Proc2(IntLoc1)
104
105 benchtime = clock() - starttime - nulltime
106 print "Pystone(%s) time for %d passes = %g" % \
107 (__version__, LOOPS, benchtime)
108 print "This machine benchmarks at %g pystones/second" % \
109 (LOOPS/benchtime)
110
111def Proc1(PtrParIn):
112 PtrParIn.PtrComp = NextRecord = PtrGlb.copy()
113 PtrParIn.IntComp = 5
114 NextRecord.IntComp = PtrParIn.IntComp
115 NextRecord.PtrComp = PtrParIn.PtrComp
116 NextRecord.PtrComp = Proc3(NextRecord.PtrComp)
117 if NextRecord.Discr == Ident1:
118 NextRecord.IntComp = 6
119 NextRecord.EnumComp = Proc6(PtrParIn.EnumComp)
120 NextRecord.PtrComp = PtrGlb.PtrComp
121 NextRecord.IntComp = Proc7(NextRecord.IntComp, 10)
122 else:
123 PtrParIn = NextRecord.copy()
124 return PtrParIn
125
126def Proc2(IntParIO):
127 IntLoc = IntParIO + 10
128 while 1:
129 if Char1Glob == 'A':
130 IntLoc = IntLoc - 1
131 IntParIO = IntLoc - IntGlob
132 EnumLoc = Ident1
133 if EnumLoc == Ident1:
134 break
135 return IntParIO
136
137def Proc3(PtrParOut):
138 global IntGlob
139
140 if PtrGlb != None:
141 PtrParOut = PtrGlb.PtrComp
142 else:
143 IntGlob = 100
144 PtrGlb.IntComp = Proc7(10, IntGlob)
145 return PtrParOut
146
147def Proc4():
148 global Char2Glob
149
150 BoolLoc = Char1Glob == 'A'
151 BoolLoc = BoolLoc or BoolGlob
152 Char2Glob = 'B'
153
154def Proc5():
155 global Char1Glob
156 global BoolGlob
157
158 Char1Glob = 'A'
159 BoolGlob = FALSE
160
161def Proc6(EnumParIn):
162 EnumParOut = EnumParIn
163 if not Func3(EnumParIn):
164 EnumParOut = Ident4
165 if EnumParIn == Ident1:
166 EnumParOut = Ident1
167 elif EnumParIn == Ident2:
168 if IntGlob > 100:
169 EnumParOut = Ident1
170 else:
171 EnumParOut = Ident4
172 elif EnumParIn == Ident3:
173 EnumParOut = Ident2
174 elif EnumParIn == Ident4:
175 pass
176 elif EnumParIn == Ident5:
177 EnumParOut = Ident3
178 return EnumParOut
179
180def Proc7(IntParI1, IntParI2):
181 IntLoc = IntParI1 + 2
182 IntParOut = IntParI2 + IntLoc
183 return IntParOut
184
185def Proc8(Array1Par, Array2Par, IntParI1, IntParI2):
186 global IntGlob
187
188 IntLoc = IntParI1 + 5
189 Array1Par[IntLoc] = IntParI2
190 Array1Par[IntLoc+1] = Array1Par[IntLoc]
191 Array1Par[IntLoc+30] = IntLoc
192 for IntIndex in range(IntLoc, IntLoc+2):
193 Array2Par[IntLoc][IntIndex] = IntLoc
194 Array2Par[IntLoc][IntLoc-1] = Array2Par[IntLoc][IntLoc-1] + 1
195 Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc]
196 IntGlob = 5
197
198def Func1(CharPar1, CharPar2):
199 CharLoc1 = CharPar1
200 CharLoc2 = CharLoc1
201 if CharLoc2 != CharPar2:
202 return Ident1
203 else:
204 return Ident2
205
206def Func2(StrParI1, StrParI2):
207 IntLoc = 1
208 while IntLoc <= 1:
209 if Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1:
210 CharLoc = 'A'
211 IntLoc = IntLoc + 1
212 if CharLoc >= 'W' and CharLoc <= 'Z':
213 IntLoc = 7
214 if CharLoc == 'X':
215 return TRUE
216 else:
217 if StrParI1 > StrParI2:
218 IntLoc = IntLoc + 7
219 return TRUE
220 else:
221 return FALSE
222
223def Func3(EnumParIn):
224 EnumLoc = EnumParIn
225 if EnumLoc == Ident3: return TRUE
226 return FALSE
227
228if __name__ == '__main__':
229 main()