î
qá[\5  ã               @   s  d  Z  d Z d d l m Z d Z e d d ƒ \ Z Z Z Z	 Z
 Gd d „  d ƒ Z d Z d Z e d	 d
 „ Z e 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 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 r¯e& d- e) ƒ nV e) d k rÿy e* e% j( d ƒ Z+ Wqe, k
 rûe& d. e% j( d ƒ YqXn e Z+ e e+ ƒ n  d S)/aC  
"PYSTONE" Benchmark Program

Version:        Python/1.2 (corresponds to C/1.1 plus 3 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.

                Version 1.2 changes the division to floor division.

                Under Python 3 version 1.1 would use the normal division
                operator, resulting in some of the operations mistakenly
                yielding floats. Version 1.2 instead uses floor division
                making the benchmark a integer benchmark again.

iPÃ  é    )Úclockz1.2é   é   c               @   s7   e  Z d  Z d d d d d d d „ Z d d „  Z d S)ÚRecordNr   c             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)ÚPtrCompÚDiscrÚEnumCompÚIntCompÚ
StringComp)Úselfr   r   r   r	   r
   © r   ú"/usr/lib/python3.4/test/pystone.pyÚ__init__4   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   Úcopy<   s    zRecord.copy)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   2   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   ÚmainC   s    r   c             C   s
   t  |  ƒ S)N)ÚProc0)r   r   r   r   r   J   s    r   Ú é3   c             C   s    g  |  ] } | d  d  … ‘ q S)Nr   )Ú.0Úxr   r   r   ú
<listcomp>R   s   	 r   Nc             C   sî  t  ƒ  } x t |  ƒ D] } q Wt  ƒ  | } 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 x7 | | k  rd
 | | }	 t | | ƒ }	 | d } qÕ Wt t t | |	 ƒ t t ƒ a d }
 xJ |
 t k r}| t |
 d ƒ k rdt t ƒ } n  t t |
 ƒ d ƒ }
 q4W| | }	 |	 | } d |	 | | } t | ƒ } q– Wt  ƒ  | | } | 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   V   sT    
									

	
r   c             C   s­   t  j ƒ  |  _ } d |  _ |  j | _ |  j | _ t | j ƒ | _ | j t k r” d | _ t |  j ƒ | _ t  j | _ t	 | j d ƒ | _ n | j ƒ  }  d  | _ |  S)Nr%   r   r    )
r*   r   r   r	   ÚProc3r   r+   r9   r   r3   )ZPtrParInZ
NextRecordr   r   r   r6      s    			r6   c             C   sM   |  d } x< t  d k r6 | d } | t }  t } n  | t k r Pq q |  S)Nr    r&   r   )Ú	Char1GlobÚIntGlobr+   )ZIntParIOÚIntLocr>   r   r   r   r<       s    


	r<   c             C   s4   t  d  k	 r t  j }  n d a t d t ƒ t  _ |  S)Néd   r    )r*   r   rA   r3   r	   )Z	PtrParOutr   r   r   r?   «   s
    r?   c              C   s"   t  d k }  |  p t }  d a d  S)Nr&   ÚB)r@   r2   r7   )ZBoolLocr   r   r   r/   µ   s    r/   c               C   s   d a  t a d  S)Nr&   )r@   ÚFALSEr2   r   r   r   r   r.   ¼   s    r.   c             C   s—   |  } t  |  ƒ s t } n  |  t k r0 t } nc |  t k rZ t d k rQ t } q“ t } n9 |  t k ro t } n$ |  t k r~ n |  t k r“ t } n  | S)NrC   )ÚFunc3ÚIdent4r+   r0   rA   r,   ÚIdent5)Ú	EnumParInZ
EnumParOutr   r   r   r9   Ã   s     						r9   c             C   s   |  d } | | } | S)Nr#   r   )ÚIntParI1ÚIntParI2rB   Z	IntParOutr   r   r   r3   Ö   s    

r3   c             C   s¢   | d } | |  | <|  | |  | d <| |  | d <x) t  | | d ƒ D] } | | | | <qH W| | | d d | | | d <|  | | | d | <d a d  S)Nr%   r   é   r#   é   )r(   rA   )Z	Array1ParZ	Array2ParrJ   rK   rB   ZIntIndexr   r   r   r4   Û   s    

"r4   c             C   s$   |  } | } | | k r t  St Sd  S)N)r+   r0   )ZCharPar1ZCharPar2ZCharLoc1ZCharLoc2r   r   r   r8   è   s
    r8   c             C   s    d } xD | d k rL t  |  | | | d ƒ t k r	 d } | d } q	 q	 W| d k rn | d k rn d } n  | d k r~ t S|  | k r˜ | d } t St Sd  S)Nr   r&   ÚWÚZr"   ÚX)r8   r+   ÚTRUErE   )ZStrParI1ZStrParI2rB   ZCharLocr   r   r   r1   ð   s    !	
r1   c             C   s   |  } | t  k r t St S)N)r,   rQ   rE   )rI   r>   r   r   r   rF     s     rF   Ú__main__c             C   sH   t  |  d d d t j ƒt  d t j d d t j ƒt j d ƒ d  S)NÚendú Úfilezusage: %s [number_of_loops]r   rC   )r   ÚsysÚstderrÚargvÚexit)Úmsgr   r   r   Úerror  s    r[   z%d arguments are too many;zInvalid argument %r;)-Ú__doc__ZLOOPSZtimer   r   r(   r+   r0   r,   rG   rH   r   rQ   rE   r   r   rA   r2   r@   r7   r5   r-   r*   r)   r   r6   r<   r?   r/   r.   r9   r3   r4   r8   r1   rF   r   rV   r[   ÚlenrX   ÚnargsÚintr   Ú
ValueErrorr   r   r   r   Ú<module>(   sT   :
 