a 97a@sdZddlmZddlmZdZdZedd\ZZ Z Z Z Gdd d e ZdZdZefd d Zefd d ZdaeadadadgdaddtgdDadadaefddZddZddZddZddZddZ dd Z!d!d"Z"d#d$Z#d%d&Z$d'd(Z%d)d*Z&e'd+krddl(Z(d,d-Z)e*e(j+dZ,e,dkrBe)d.e,nJe,dkrze-e(j+dZ.Wn&e/ye)d/e(j+dYn0neZ.ee.dS)0a "PYSTONE" Benchmark Program Version: Python/1.1 (corresponds to C/1.1 plus 2 Pystone fixes) Author: Reinhold P. Weicker, CACM Vol 27, No 10, 10/84 pg. 1013. Translated from ADA to C by Rick Richardson. Every method to preserve ADA-likeness has been used, at the expense of C-ness. Translated from C to Python by Guido van Rossum. Version History: Version 1.1 corrects two bugs in version 1.0: First, it leaked memory: in Proc1(), NextRecord ends up having a pointer to itself. I have corrected this by zapping NextRecord.PtrComp at the end of Proc1(). Second, Proc3() used the operator != to compare a record to None. This is rather inefficient and not true to the intention of the original benchmark (where a pointer comparison to None is intended; the != operator attempts to find a method __cmp__ to do value comparison of the record). Version 1.1 runs 5-10 percent faster than version 1.0, so benchmark figures of different versions can't be compared directly. )print_function)clockiPz1.1c@seZdZdddZddZdS)RecordNrcCs"||_||_||_||_||_dSN)PtrCompDiscrEnumCompIntComp StringComp)selfrr r r r rx/private/var/folders/s6/9n5zrl012gv99k63s4q6ccsd4s6mqz/T/pip-target-f5cq3f2q/lib/python/future/backports/test/pystone.py__init__/s zRecord.__init__cCst|j|j|j|j|jSr)rrr r r r )r rrrcopy7sz Record.copy)Nrrrr)__name__ __module__ __qualname__rrrrrrr-s rcCs.t|\}}tdt||ftd|dS)Nz#Pystone(%s) time for %d passes = %gz-This machine benchmarks at %g pystones/second)pystonesprint __version__)loops benchtimeZstonesrrrmain>s  rcCst|Sr)Proc0)rrrrrEsr3cCsg|]}|ddqSrr).0xrrr Mr Nc Cs^t}t|D]}qt|}tatatt_tt_tt_ dt_ dt_ d}dt dd<t}t|D]}t td}d}d }t}t|| a||krd ||} t||} |d }qttt || ttad } | tkr|t| d krtt}tt| d } q||} | |}d| ||}t|}qft||} | dkrNd} n|| } | | fS)N(zDHRYSTONE PROGRAM, SOME STRINGzDHRYSTONE PROGRAM, 1'ST STRING zDHRYSTONE PROGRAM, 2'ND STRINGrACg)rranger PtrGlbNextPtrGlbrIdent1r Ident3r r r Array2GlobProc5Proc4Ident2Func2BoolGlobProc7Proc8 Array1GlobProc1 Char2GlobFunc1Proc6chrordProc2) rZ starttimeiZnulltimeZ String1LocZIntLoc1ZIntLoc2Z String2LocEnumLocZIntLoc3Z CharIndexrZloopsPerBenchtimerrrrQsT            rcCsvt|_}d|_|j|_|j|_t|j|_|jtkrdd|_t|j|_tj|_t |jd|_n|}d|_|S)Nr(rr#) r-rrr Proc3r r.r<r r6)ZPtrParInZ NextRecordrrrr9s   r9cCs4|d}tdkr$|d}|t}t}|tkrq0q|S)Nr#r)r) Char1GlobIntGlobr.)ZIntParIOIntLocrArrrr?sr?cCs$tdurtj}ndatdtt_|S)Ndr#)r-rrDr6r )Z PtrParOutrrrrBs  rBcCstdk}|pt}dadS)Nr)B)rCr5r:)ZBoolLocrrrr2sr2cCs datadS)Nr))rCFALSEr5rrrrr1sr1cCsb|}t|st}|tkrt}n@|tkr:tdkr4t}q^t}n$|tkrHt}n|tkrRn |tkr^t}|S)NrF)Func3Ident4r.r3rDr/Ident5) EnumParInZ EnumParOutrrrr<s r<cCs|d}||}|S)Nr&r)IntParI1IntParI2rEZ IntParOutrrrr6sr6cCs|d}|||<||||d<|||d<t||dD]}||||<q:|||dd|||d<||||d|<dadS)Nr(rr&)r+rD)Z Array1ParZ Array2ParrMrNrEZIntIndexrrrr7s  r7cCs|}|}||krtStSdSr)r.r3)ZCharPar1ZCharPar2ZCharLoc1ZCharLoc2rrrr;s r;cCspd}|dkr4t||||dtkrd}|d}q|dkrH|dkrHd}|dkrTtS||krh|d}tStSdS)Nrr)WZr%X)r;r.TRUErH)ZStrParI1ZStrParI2rEZCharLocrrrr4s r4cCs|}|tkrtStSr)r/rTrH)rLrArrrrIs rI__main__cCs6t|dtjdtdtjdtjdtddS)N )endfilezusage: %s [number_of_loops]r)rXrF)rsysstderrargvexit)msgrrrerrorsr^z%d arguments are too many;zInvalid argument %r;)0__doc__ __future__rtimerZLOOPSrr+r.r3r/rJrKobjectrrTrHrrrDr5rCr:r8r0r-r,rr9r?rBr2r1r<r6r7r;r4rIrrYr^lenr[nargsintr ValueErrorrrrrsT      :