
    &i                     z    d Z ddlmZ  ed       G d d             Zdeded	efd
Zd Zd Zedk(  r e        yy)zGenerate hardcoded testbench vectors for problem 046.

This helper is kept in the problem folder for auditability, but the
generated values are intended to be pasted directly into testbench.v.
    )	dataclassT)frozenc                   @    e Zd ZU eed<   eed<   eed<   eed<   eed<   y)SteptagrstcapacityperiodreqN)__name__
__module____qualname__str__annotations__int     Fbenchmarks/problems/046_order_token_bucket_throttle/generate_golden.pyr   r      s    	H	HMK	Hr   r   tokens	countdownstepc                     |j                   r|j                  |j                  ddfS |dk(  }| }|r||j                  k  r|dz  }|j                  r|dkD  rdnd}|j                  r|dk(  rdnd}|r|dz
  n|}|r|j                  n|dz
  }||||fS )Nr      )r   r	   r
   r   )	r   r   r   refill_eventvisible_tokensacceptrejectnext_tokensnext_countdowns	            r   
model_stepr       s    xx}}dkk1a//>LN6!88 2QF88! 3Q!F(..1$NK$0T[[i!mN66r   c                     g } | j                  t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        d	dddd      t        d
dddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      g       | j                  t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      t        ddddd      g       | j                  t        ddddd      t        d dddd      t        d!dddd      t        d"dddd      t        d#dddd      t        d$dddd      g       | j                  t        d%dd&d'd      t        d(dd&d'd      t        d)dd&d'd      t        d*dd&d'd      t        d+dd&d'd      t        d,dd&d'd      t        d-dd&d'd      t        d.dd&d'd      t        d/dd&d'd      t        d0dd&d'd      t        d1dd&d'd      t        d2dd&d'd      t        d3dd&d'd      t        d4dd&d'd      t        d5dd&d'd      t        d6dd&d'd      t        d7dd&d'd      t        d8dd&d'd      g       t        d9      D ]$  }| j                  t        d:|d;dd&d'd             & | j                  t        d<dd&d'd      t        d=dd&d'd      t        d>dd&d'd      g       | S )?N
rst_boot_0r         r   
rst_boot_1post_rst_idledrain_0drain_1drain_2refill_then_take
drain_lastsame_empty_refill_acceptempty_reject_after_refillidle_refillconsume_after_idleidle_to_full_0idle_to_full_1idle_to_full_2idle_to_full_3idle_to_full_4cap_refill_and_reqrst_midstreampost_midrst_reqminp_rst
minp_req_0
minp_req_1	minp_idle
minp_req_2
minp_req_3same_partial_rstsame_partial_take0same_partial_take1same_partial_idle0same_partial_refillreqsame_partial_followmaxp_rst      
maxp_req_0
maxp_req_1
maxp_req_2
maxp_req_3
maxp_req_4
maxp_req_5
maxp_req_6
maxp_req_7
maxp_req_8
maxp_req_9maxp_req_10maxp_req_11maxp_req_12maxp_req_13maxp_req_14maxp_req_15maxp_req_16_reject   
maxp_idle_03dmaxp_refill_acceptmaxp_post_refill_rejectmaxp_idle_final)extendr   rangeappend)stepsidxs     r   build_stepsrc   %   s	   E	LLq!Q*q!Q*!Q1-Aq!Q'Aq!Q'Aq!Q'#Q1a0q!Q*+Q1a8,aAq91a+%q!Q2!1aA.!1aA.!1aA.!1aA.!1aA.%q!Q2!Q1-"Aq!Q/)	
2 
LLQ1a(q!Q*q!Q*aAq)q!Q*q!Q*	
	 
LL#Q1a0%q!Q2%q!Q2%q!Q2)1aA6&1a3	
	 
LLQC+q"c1-q"c1-q"c1-q"c1-q"c1-q"c1-q"c1-q"c1-q"c1-q"c1-2sA.2sA.2sA.2sA.2sA.2sA.%q"c15%	
. Sz BTJs3i0!Ra@AB 
LL%q"c15*Ar3:"Ar32	
 Lr   c                  <   t               } d}d}g }| D ]m  }t        |||      \  }}}}|j                  d|j                   d|j                   d|j
                   d|j                   d|j                   d| d| d       o t        d	j                  |             y )
Nr   r   z        step_cycle("z", 1'bz, 5'dz, 9'dz, 1'bz);
)
rc   r    r`   r   r   r	   r
   r   printjoin)ra   r   r   	out_linesr   r   r   s          r   mainri   |   s    MEFII 
,6vy$,O)	66"488*GDHH:VDMM? S++eDHH:U6(%xrK	

 
$))I
r   __main__N)	__doc__dataclassesr   r   r   r    rc   ri   r   r   r   r   <module>rm      sg    " $  7s 7s 7$ 7"Tn   zF r   