
Rc`1  ã               @   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* ƒ d S)/aD  
"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 an integer benchmark again.

iPÃ  é    )Útimez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.5/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 }
 xG |
 t k rz| t |
 d ƒ k rat t ƒ } 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   sH   |  d } x7 t  d k r3 | d } | t }  t } | t k r Pq W|  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 } |  t k r- t } n` |  t k rW t d k rN t } q t } n6 |  t k rl t } n! |  t k r{ n |  t k r t } | 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 } xA | d k rI t  |  | | | d ƒ t k r	 d } | d } q	 W| d k rh | d k rh d } | d k rx 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LOOPSr   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   :
 