3
‡Œði  ã               @   sš  d Z ddlmZ ddlmZ dZdZeddƒ\ZZ	Z
ZZG dd	„ d	eƒZdZdZefd
d„Zefdd„Zdaeadadadgd add„ tgd D ƒadadaefdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd „ Z!d!d"„ Z"d#d$„ Z#d%d&„ Z$d'd(„ Z%d)d*„ Z&e'd+k�r–ddl(Z(d,d-„ Z)e*e(j+ƒd Z,e,dk�rBe)d.e, ƒ nLe,dk�rŠye-e(j+d ƒZ.W n( e/k
�r†   e)d/e(j+d  ƒ Y nX neZ.ee.ƒ dS )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)ÚclockiPÃ  z1.1é   é   c               @   s   e Zd Zddd„Zdd„ ZdS )ÚRecordNr   c             C   s"   || _ || _|| _|| _|| _d S )N)ÚPtrCompÚDiscrÚEnumCompÚIntCompÚ
StringComp)Úselfr   r   r	   r
   r   © r   ú?/tmp/pip-build-6m2fasei/future/future/backports/test/pystone.pyÚ__init__/   s
    zRecord.__init__c             C   s   t | j| j| j| j| jƒS )N)r   r   r   r	   r
   r   )r   r   r   r   Úcopy7   s    zRecord.copy)Nr   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   -   s    
r   c             C   s.   t | ƒ\}}tdt| |f ƒ td| ƒ d S )Nz#Pystone(%s) time for %d passes = %gz-This machine benchmarks at %g pystones/second)ÚpystonesÚprintÚ__version__)ÚloopsÚ	benchtimeZstonesr   r   r   Úmain>   s    r   c             C   s   t | ƒS )N)ÚProc0)r   r   r   r   r   E   s    r   ú é3   c             C   s   g | ]}|d d … ‘qS )Nr   )Ú.0Úxr   r   r   ú
<listcomp>M   s    r   Nc             C   sp  t ƒ }xt| ƒD ]}qW t ƒ | }tƒ atƒ att_tt_tt_	dt_
dt_d}dtd d< t ƒ }xÞt| ƒD ]Ò}tƒ  tƒ  d}d}d	}t}t||ƒ ax*||k rÂd
| | }	t||ƒ}	|d }qšW ttt||	ƒ ttƒad}
x6|
tk�r|t|
dƒk�rttƒ}tt|
ƒd ƒ}
qàW || }	|	| }d|	|  | }t|ƒ}qlW t ƒ | | }|dk�r`d}n| | }||fS )Né(   zDHRYSTONE PROGRAM, SOME STRINGzDHRYSTONE PROGRAM, 1'ST STRINGé
   é   é   é   é   zDHRYSTONE PROGRAM, 2'ND STRINGé   r   ÚAÚCg        )r   Úranger   Ú
PtrGlbNextÚPtrGlbr   ÚIdent1r   ÚIdent3r	   r
   r   Ú
Array2GlobÚProc5ÚProc4ÚIdent2ÚFunc2ÚBoolGlobÚProc7ÚProc8Ú
Array1GlobÚProc1Ú	Char2GlobÚFunc1ÚProc6ÚchrÚordÚProc2)r   Z	starttimeÚiZnulltimeZ
String1LocZIntLoc1ZIntLoc2Z
String2LocÚEnumLocZIntLoc3Z	CharIndexr   ZloopsPerBenchtimer   r   r   r   Q   sT    




r   c             C   sv   t jƒ  | _}d| _| j|_| j|_t|jƒ|_|jtkrdd|_t| jƒ|_t j|_t	|jdƒ|_n|jƒ } d |_| S )Nr&   r   r!   )
r+   r   r   r
   ÚProc3r   r,   r:   r	   r4   )ZPtrParInZ
NextRecordr   r   r   r7   ‹   s    
r7   c             C   s8   | d }x*t dkr&|d }|t } t}|tkr
P q
W | S )Nr!   r'   r   )Ú	Char1GlobÚIntGlobr,   )ZIntParIOÚIntLocr?   r   r   r   r=   ›   s    r=   c             C   s$   t d k	rt j} ndatdtƒt _| S )Néd   r!   )r+   r   rB   r4   r
   )Z	PtrParOutr   r   r   r@   ¦   s
    r@   c              C   s   t dk} | pt} dad S )Nr'   ÚB)rA   r3   r8   )ZBoolLocr   r   r   r0   °   s    r0   c               C   s   da tad S )Nr'   )rA   ÚFALSEr3   r   r   r   r   r/   ·   s    r/   c             C   sb   | }t | ƒst}| tkrt}n@| tkr:tdkr4t}q^t}n$| tkrHt}n| tkrRn| tkr^t}|S )NrD   )ÚFunc3ÚIdent4r,   r1   rB   r-   ÚIdent5)Ú	EnumParInZ
EnumParOutr   r   r   r:   ¾   s     r:   c             C   s   | d }|| }|S )Nr$   r   )ÚIntParI1ÚIntParI2rC   Z	IntParOutr   r   r   r4   Ñ   s    r4   c             C   sŒ   |d }|| |< | | | |d < || |d < x"t ||d ƒD ]}||| |< q<W || |d  d || |d < | | ||d  |< dad S )Nr&   r   é   r$   é   )r)   rB   )Z	Array1ParZ	Array2ParrK   rL   rC   ZIntIndexr   r   r   r5   Ö   s     r5   c             C   s   | }|}||krt S tS d S )N)r,   r1   )ZCharPar1ZCharPar2ZCharLoc1ZCharLoc2r   r   r   r9   ã   s
    r9   c             C   st   d}x2|dkr6t | | ||d  ƒtkrd}|d }qW |dkrL|dkrLd}|dkrXtS | |krl|d }tS tS d S )Nr   r'   ÚWÚZr#   ÚX)r9   r,   ÚTRUErF   )ZStrParI1ZStrParI2rC   ZCharLocr   r   r   r2   ë   s    
r2   c             C   s   | }|t krtS tS )N)r-   rR   rF   )rJ   r?   r   r   r   rG   ü   s     rG   Ú__main__c             C   s6   t | dtjd� t dtjd  tjd� tjdƒ d S )Nú )ÚendÚfilezusage: %s [number_of_loops]r   )rV   rD   )r   ÚsysÚstderrÚargvÚexit)Úmsgr   r   r   Úerror  s    r\   z%d arguments are too many;zInvalid argument %r;)0Ú__doc__Ú
__future__r   Útimer   ZLOOPSr   r)   r,   r1   r-   rH   rI   Úobjectr   rR   rF   r   r   rB   r3   rA   r8   r6   r.   r+   r*   r   r7   r=   r@   r0   r/   r:   r4   r5   r9   r2   rG   r   rW   r\   ÚlenrY   ÚnargsÚintr   Ú
ValueErrorr   r   r   r   Ú<module>!   sV   
:



 