<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
      <head>
        <title>lib/rfuzz/random.rb - C0 code coverage information</title>
        <style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
        <style type='text/css'>span.cross-ref-title {
 font-size: 140%;
}
span.cross-ref a {
 text-decoration: none;
}
span.cross-ref {
 background-color:#f3f7fa;
 border: 1px dashed #333;
 margin: 1em;
 padding: 0.5em;
 overflow: hidden;
}
a.crossref-toggle {
 text-decoration: none;
}
span.marked0 {
 background-color: rgb(185, 210, 200);
 display: block;
}
span.marked1 {
 background-color: rgb(190, 215, 205);
 display: block;
}
span.inferred0 {
 background-color: rgb(175, 200, 200);
 display: block;
}
span.inferred1 {
 background-color: rgb(180, 205, 205);
 display: block;
}
span.uncovered0 {
 background-color: rgb(225, 110, 110);
 display: block;
}
span.uncovered1 {
 background-color: rgb(235, 120, 120);
 display: block;
}
span.overview {
 border-bottom: 8px solid black;
}
div.overview {
 border-bottom: 8px solid black;
}
body {
 font-family: verdana, arial, helvetica;
}
div.footer {
 font-size: 68%;
 margin-top: 1.5em;
}
h1, h2, h3, h4, h5, h6 {
 margin-bottom: 0.5em;
}
h5 {
 margin-top: 0.5em;
}
.hidden {
 display: none;
}
div.separator {
 height: 10px;
}
/* Commented out for better readability, esp. on IE */
/*
table tr td, table tr th {
 font-size: 68%;
}
td.value table tr td {
 font-size: 11px;
}
*/
table.percent_graph {
 height: 12px;
 border: #808080 1px solid;
 empty-cells: show;
}
table.percent_graph td.covered {
 height: 10px;
 background: #00f000;
}
table.percent_graph td.uncovered {
 height: 10px;
 background: #e00000;
}
table.percent_graph td.NA {
 height: 10px;
 background: #eaeaea;
}
table.report {
 border-collapse: collapse;
 width: 100%;
}
table.report td.heading {
 background: #dcecff;
 border: #d0d0d0 1px solid;
 font-weight: bold;
 text-align: center;
}
table.report td.heading:hover {
 background: #c0ffc0;
}
table.report td.text {
 border: #d0d0d0 1px solid;
}
table.report td.value {
 text-align: right;
 border: #d0d0d0 1px solid;
}
table.report tr.light {
 background-color: rgb(240, 240, 245);
}
table.report tr.dark {
 background-color: rgb(230, 230, 235);
}
</style>
        <script type='text/javascript'>
// <![CDATA[
  function toggleCode( id ) {
    if ( document.getElementById )
      elem = document.getElementById( id );
    else if ( document.all )
      elem = eval( "document.all." + id );
    else
      return false;

    elemStyle = elem.style;
    
    if ( elemStyle.display != "block" ) {
      elemStyle.display = "block"
    } else {
      elemStyle.display = "none"
    }

    return true;
  }
  
  // Make cross-references hidden by default
  document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
  // ]]>
</script>
        <style type='text/css'>span.run0 {
  background-color: rgb(178, 204, 255);
  display: block;
}
span.run1 {
  background-color: rgb(178, 206, 255);
  display: block;
}
span.run2 {
  background-color: rgb(178, 209, 255);
  display: block;
}
span.run3 {
  background-color: rgb(178, 211, 255);
  display: block;
}
span.run4 {
  background-color: rgb(178, 214, 255);
  display: block;
}
span.run5 {
  background-color: rgb(178, 218, 255);
  display: block;
}
span.run6 {
  background-color: rgb(178, 220, 255);
  display: block;
}
span.run7 {
  background-color: rgb(178, 223, 255);
  display: block;
}
span.run8 {
  background-color: rgb(178, 225, 255);
  display: block;
}
span.run9 {
  background-color: rgb(178, 228, 255);
  display: block;
}
span.run10 {
  background-color: rgb(178, 232, 255);
  display: block;
}
span.run11 {
  background-color: rgb(178, 234, 255);
  display: block;
}
span.run12 {
  background-color: rgb(178, 237, 255);
  display: block;
}
span.run13 {
  background-color: rgb(178, 239, 255);
  display: block;
}
span.run14 {
  background-color: rgb(178, 242, 255);
  display: block;
}
span.run15 {
  background-color: rgb(178, 246, 255);
  display: block;
}
span.run16 {
  background-color: rgb(178, 248, 255);
  display: block;
}
span.run17 {
  background-color: rgb(178, 251, 255);
  display: block;
}
span.run18 {
  background-color: rgb(178, 253, 255);
  display: block;
}
span.run19 {
  background-color: rgb(178, 255, 253);
  display: block;
}
span.run20 {
  background-color: rgb(178, 255, 249);
  display: block;
}
span.run21 {
  background-color: rgb(178, 255, 247);
  display: block;
}
span.run22 {
  background-color: rgb(178, 255, 244);
  display: block;
}
span.run23 {
  background-color: rgb(178, 255, 242);
  display: block;
}
span.run24 {
  background-color: rgb(178, 255, 239);
  display: block;
}
span.run25 {
  background-color: rgb(178, 255, 235);
  display: block;
}
span.run26 {
  background-color: rgb(178, 255, 233);
  display: block;
}
span.run27 {
  background-color: rgb(178, 255, 230);
  display: block;
}
span.run28 {
  background-color: rgb(178, 255, 228);
  display: block;
}
span.run29 {
  background-color: rgb(178, 255, 225);
  display: block;
}
span.run30 {
  background-color: rgb(178, 255, 221);
  display: block;
}
span.run31 {
  background-color: rgb(178, 255, 219);
  display: block;
}
span.run32 {
  background-color: rgb(178, 255, 216);
  display: block;
}
span.run33 {
  background-color: rgb(178, 255, 214);
  display: block;
}
span.run34 {
  background-color: rgb(178, 255, 211);
  display: block;
}
span.run35 {
  background-color: rgb(178, 255, 207);
  display: block;
}
span.run36 {
  background-color: rgb(178, 255, 205);
  display: block;
}
span.run37 {
  background-color: rgb(178, 255, 202);
  display: block;
}
span.run38 {
  background-color: rgb(178, 255, 200);
  display: block;
}
span.run39 {
  background-color: rgb(178, 255, 197);
  display: block;
}
span.run40 {
  background-color: rgb(178, 255, 193);
  display: block;
}
span.run41 {
  background-color: rgb(178, 255, 191);
  display: block;
}
span.run42 {
  background-color: rgb(178, 255, 188);
  display: block;
}
span.run43 {
  background-color: rgb(178, 255, 186);
  display: block;
}
span.run44 {
  background-color: rgb(178, 255, 183);
  display: block;
}
span.run45 {
  background-color: rgb(178, 255, 179);
  display: block;
}
span.run46 {
  background-color: rgb(179, 255, 178);
  display: block;
}
span.run47 {
  background-color: rgb(182, 255, 178);
  display: block;
}
span.run48 {
  background-color: rgb(184, 255, 178);
  display: block;
}
span.run49 {
  background-color: rgb(187, 255, 178);
  display: block;
}
span.run50 {
  background-color: rgb(191, 255, 178);
  display: block;
}
span.run51 {
  background-color: rgb(193, 255, 178);
  display: block;
}
span.run52 {
  background-color: rgb(196, 255, 178);
  display: block;
}
span.run53 {
  background-color: rgb(198, 255, 178);
  display: block;
}
span.run54 {
  background-color: rgb(201, 255, 178);
  display: block;
}
span.run55 {
  background-color: rgb(205, 255, 178);
  display: block;
}
span.run56 {
  background-color: rgb(207, 255, 178);
  display: block;
}
span.run57 {
  background-color: rgb(210, 255, 178);
  display: block;
}
span.run58 {
  background-color: rgb(212, 255, 178);
  display: block;
}
span.run59 {
  background-color: rgb(215, 255, 178);
  display: block;
}
span.run60 {
  background-color: rgb(219, 255, 178);
  display: block;
}
span.run61 {
  background-color: rgb(221, 255, 178);
  display: block;
}
span.run62 {
  background-color: rgb(224, 255, 178);
  display: block;
}
span.run63 {
  background-color: rgb(226, 255, 178);
  display: block;
}
span.run64 {
  background-color: rgb(229, 255, 178);
  display: block;
}
span.run65 {
  background-color: rgb(233, 255, 178);
  display: block;
}
span.run66 {
  background-color: rgb(235, 255, 178);
  display: block;
}
span.run67 {
  background-color: rgb(238, 255, 178);
  display: block;
}
span.run68 {
  background-color: rgb(240, 255, 178);
  display: block;
}
span.run69 {
  background-color: rgb(243, 255, 178);
  display: block;
}
span.run70 {
  background-color: rgb(247, 255, 178);
  display: block;
}
span.run71 {
  background-color: rgb(249, 255, 178);
  display: block;
}
span.run72 {
  background-color: rgb(252, 255, 178);
  display: block;
}
span.run73 {
  background-color: rgb(255, 255, 178);
  display: block;
}
span.run74 {
  background-color: rgb(255, 252, 178);
  display: block;
}
span.run75 {
  background-color: rgb(255, 248, 178);
  display: block;
}
span.run76 {
  background-color: rgb(255, 246, 178);
  display: block;
}
span.run77 {
  background-color: rgb(255, 243, 178);
  display: block;
}
span.run78 {
  background-color: rgb(255, 240, 178);
  display: block;
}
span.run79 {
  background-color: rgb(255, 238, 178);
  display: block;
}
span.run80 {
  background-color: rgb(255, 234, 178);
  display: block;
}
span.run81 {
  background-color: rgb(255, 232, 178);
  display: block;
}
span.run82 {
  background-color: rgb(255, 229, 178);
  display: block;
}
span.run83 {
  background-color: rgb(255, 226, 178);
  display: block;
}
span.run84 {
  background-color: rgb(255, 224, 178);
  display: block;
}
span.run85 {
  background-color: rgb(255, 220, 178);
  display: block;
}
span.run86 {
  background-color: rgb(255, 218, 178);
  display: block;
}
span.run87 {
  background-color: rgb(255, 215, 178);
  display: block;
}
span.run88 {
  background-color: rgb(255, 212, 178);
  display: block;
}
span.run89 {
  background-color: rgb(255, 210, 178);
  display: block;
}
span.run90 {
  background-color: rgb(255, 206, 178);
  display: block;
}
span.run91 {
  background-color: rgb(255, 204, 178);
  display: block;
}
span.run92 {
  background-color: rgb(255, 201, 178);
  display: block;
}
span.run93 {
  background-color: rgb(255, 198, 178);
  display: block;
}
span.run94 {
  background-color: rgb(255, 196, 178);
  display: block;
}
span.run95 {
  background-color: rgb(255, 192, 178);
  display: block;
}
span.run96 {
  background-color: rgb(255, 189, 178);
  display: block;
}
span.run97 {
  background-color: rgb(255, 187, 178);
  display: block;
}
span.run98 {
  background-color: rgb(255, 184, 178);
  display: block;
}
span.run99 {
  background-color: rgb(255, 182, 178);
  display: block;
}
span.run100 {
  background-color: rgb(255, 178, 178);
  display: block;
}
</style>
      </head>
      <body>
        <h3>C0 code coverage information</h3>
        <p>Generated on Wed Jul 19 17:39:34 EDT 2006 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.6.0</a>
        </p>
        <hr /><pre><span class='marked0'>Code reported as executed by Ruby looks like this...
</span><span class='marked1'>and this: this line is also marked as covered.
</span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
</span><span class='uncovered0'>Finally, here&apos;s a line marked as not executed.
</span></pre>                       
    <table class='report'>
      <thead>
        <tr>
          <td class='heading'>Name</td>
          <td class='heading'>Total lines</td>
          <td class='heading'>Lines of code</td>
          <td class='heading'>Total coverage</td>
          <td class='heading'>Code coverage</td>
        </tr>
      </thead>
      <tbody>
        <tr class='light'>
          <td>
            <a href='lib-rfuzz-random_rb.html'>lib/rfuzz/random.rb</a>
          </td>
          <td class='value'>
            <tt>110</tt>
          </td>
          <td class='value'>
            <tt>60</tt>
          </td>
          <td>
            <table cellspacing='0' cellpadding='0' align='right'>
              <tr>
                <td>
                  <tt>100.0%</tt>&nbsp;</td>
                <td>
                  <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
                    <tr>
                      <td class='covered' width='100' />
                      <td class='uncovered' width='0' />
                    </tr>
                  </table>
                </td>
              </tr>
            </table>
          </td>
          <td>
            <table cellspacing='0' cellpadding='0' align='right'>
              <tr>
                <td>
                  <tt>100.0%</tt>&nbsp;</td>
                <td>
                  <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
                    <tr>
                      <td class='covered' width='100' />
                      <td class='uncovered' width='0' />
                    </tr>
                  </table>
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </tbody>
    </table><pre><span class="inferred1"><a name="line1" />  1 # Implements the randomness engine for RFuzz
</span><span class="marked0"><a name="line2" />  2 require 'base64'
</span><span class="marked1"><a name="line3" />  3 require 'fuzzrnd'
</span><span class="marked0"><a name="line4" />  4 
</span><span class="marked1"><a name="line5" />  5 module RFuzz
</span><span class="marked0"><a name="line6" />  6   class RandomGenerator
</span><span class="inferred1"><a name="line7" />  7 
</span><span class="inferred0"><a name="line8" />  8     # Either initialized without a word dictionary or with one.
</span><span class="inferred1"><a name="line9" />  9     # If you initialize with a word dictionary then you can generate
</span><span class="inferred0"><a name="line10" /> 10     # the random words, and is the expected behavior.  You can use
</span><span class="inferred1"><a name="line11" /> 11     # the &quot;type&quot; parameter to change the default type of generated
</span><span class="inferred0"><a name="line12" /> 12     # content from words to any of the other types available 
</span><span class="inferred1"><a name="line13" /> 13     # [:base64,:uris,:byte_array,:ints,:floats].
</span><span class="inferred0"><a name="line14" /> 14     #
</span><span class="inferred1"><a name="line15" /> 15     # The dict should just be an array of words.
</span><span class="marked0"><a name="line16" /> 16     def initialize(dict=nil, type=:words)
</span><span class="inferred1"><a name="line17" /> 17       # NOT meant to be secure so chill
</span><span class="marked0"><a name="line18" /> 18       @rnd = FuzzRnd.new(&quot;#{self.inspect}&quot;)
</span><span class="marked1"><a name="line19" /> 19       @dict = dict
</span><span class="marked0"><a name="line20" /> 20       @type = type
</span><span class="inferred1"><a name="line21" /> 21     end
</span><span class="inferred0"><a name="line22" /> 22 
</span><span class="inferred1"><a name="line23" /> 23     # Returns a random hash of type (default :words) where
</span><span class="inferred0"><a name="line24" /> 24     # the key=&gt;value is randomly generated.  This is aliased
</span><span class="inferred1"><a name="line25" /> 25     # for RandomGenerator.queries and RandomGenerator.headers
</span><span class="inferred0"><a name="line26" /> 26     # so that it is more readable.
</span><span class="inferred1"><a name="line27" /> 27     #
</span><span class="inferred0"><a name="line28" /> 28     # [:words,:base64,:uris,:byte_array,:ints,:floats] are the available
</span><span class="inferred1"><a name="line29" /> 29     # types of generated hash garbage you can use.  These &quot;types&quot; just
</span><span class="inferred0"><a name="line30" /> 30     # translate to function calls on self.send(type,length).
</span><span class="marked1"><a name="line31" /> 31     def hash_of(count,length=5,type=@type)
</span><span class="marked0"><a name="line32" /> 32       list = []
</span><span class="marked1"><a name="line33" /> 33       count.times do
</span><span class="marked0"><a name="line34" /> 34         list &lt;&lt; Hash[*send(type,length*2)]
</span><span class="marked1"><a name="line35" /> 35       end
</span><span class="inferred0"><a name="line36" /> 36 
</span><span class="marked1"><a name="line37" /> 37       return list
</span><span class="inferred0"><a name="line38" /> 38     end
</span><span class="marked1"><a name="line39" /> 39     alias :queries :hash_of
</span><span class="marked0"><a name="line40" /> 40     alias :headers :hash_of
</span><span class="inferred1"><a name="line41" /> 41 
</span><span class="inferred0"><a name="line42" /> 42     # Generate an array of random length URIs based on words from the dict.
</span><span class="inferred1"><a name="line43" /> 43     # The default max length=100 and is the number of words to chain together
</span><span class="inferred0"><a name="line44" /> 44     # into a gigantor URI.  The URI starts with /.
</span><span class="marked1"><a name="line45" /> 45     def uris(count,length=100)
</span><span class="marked0"><a name="line46" /> 46       ulist = []
</span><span class="marked1"><a name="line47" /> 47       count.times do
</span><span class="marked0"><a name="line48" /> 48         ulist &lt;&lt; &quot;/&quot; + words(num(length)).join(&quot;/&quot;).tr(&quot;'&quot;,&quot;&quot;)
</span><span class="marked1"><a name="line49" /> 49       end
</span><span class="marked0"><a name="line50" /> 50       return ulist
</span><span class="inferred1"><a name="line51" /> 51     end
</span><span class="inferred0"><a name="line52" /> 52 
</span><span class="inferred1"><a name="line53" /> 53     # Generates an array with count number of randomly selected
</span><span class="inferred0"><a name="line54" /> 54     # words from the dictionary.
</span><span class="marked1"><a name="line55" /> 55     def words(count=1)
</span><span class="marked0"><a name="line56" /> 56       raise &quot;You need a dictionary.&quot; unless @dict
</span><span class="marked1"><a name="line57" /> 57       w = ints(count, @dict.length)
</span><span class="marked0"><a name="line58" /> 58       w.collect {|i| @dict[i]}
</span><span class="inferred1"><a name="line59" /> 59     end
</span><span class="inferred0"><a name="line60" /> 60 
</span><span class="inferred1"><a name="line61" /> 61 
</span><span class="inferred0"><a name="line62" /> 62     # Generates an array of base64 encoded chunks of garbage.
</span><span class="inferred1"><a name="line63" /> 63     # The length=100 is the default and is a max, but the lengths
</span><span class="inferred0"><a name="line64" /> 64     # are random.
</span><span class="marked1"><a name="line65" /> 65     def base64(count,length=100)
</span><span class="marked0"><a name="line66" /> 66       list = []
</span><span class="marked1"><a name="line67" /> 67       count.times { 
</span><span class="marked0"><a name="line68" /> 68         list &lt;&lt; Base64.encode64(@rnd.data(num(length)))
</span><span class="marked1"><a name="line69" /> 69       }
</span><span class="marked0"><a name="line70" /> 70       return list
</span><span class="inferred1"><a name="line71" /> 71     end
</span><span class="inferred0"><a name="line72" /> 72 
</span><span class="inferred1"><a name="line73" /> 73     # Generates an array of garbage byte strings, these are
</span><span class="inferred0"><a name="line74" /> 74     # binary strings so very nasty.  As usual, length=100
</span><span class="inferred1"><a name="line75" /> 75     # is a max for the random lengths.
</span><span class="marked0"><a name="line76" /> 76     def byte_array(count,length=100)
</span><span class="marked1"><a name="line77" /> 77       list = []
</span><span class="marked0"><a name="line78" /> 78       count.times { list &lt;&lt; @rnd.data(num(length)) }
</span><span class="marked1"><a name="line79" /> 79       return list
</span><span class="inferred0"><a name="line80" /> 80     end
</span><span class="inferred1"><a name="line81" /> 81 
</span><span class="inferred0"><a name="line82" /> 82     # Generate a single String with random binary garbage in it.
</span><span class="marked1"><a name="line83" /> 83     def bytes(count)
</span><span class="marked0"><a name="line84" /> 84       @rnd.data(count)
</span><span class="marked1"><a name="line85" /> 85     end
</span><span class="inferred0"><a name="line86" /> 86 
</span><span class="inferred1"><a name="line87" /> 87     # A random number with a maximum of max.
</span><span class="marked0"><a name="line88" /> 88     def num(max)
</span><span class="marked1"><a name="line89" /> 89       ints(1, max)[0]
</span><span class="marked0"><a name="line90" /> 90     end
</span><span class="inferred1"><a name="line91" /> 91 
</span><span class="inferred0"><a name="line92" /> 92     # An array of integers with a default max of max.
</span><span class="inferred1"><a name="line93" /> 93     # The integers are 4 bytes and pulled from network
</span><span class="inferred0"><a name="line94" /> 94     # encoding so they should be cross platform (meaning
</span><span class="inferred1"><a name="line95" /> 95     # tests should run the same on all platforms).
</span><span class="marked0"><a name="line96" /> 96     def ints(count, max = nil)
</span><span class="marked1"><a name="line97" /> 97       i = @rnd.data(count * 4).unpack(&quot;N*&quot;)
</span><span class="marked0"><a name="line98" /> 98       if max
</span><span class="marked1"><a name="line99" /> 99         i = i.collect {|i| i % max }
</span><span class="inferred0"><a name="line100" />100       end
</span><span class="marked1"><a name="line101" />101       return i
</span><span class="inferred0"><a name="line102" />102     end
</span><span class="inferred1"><a name="line103" />103 
</span><span class="inferred0"><a name="line104" />104     # An array for random floats.
</span><span class="marked1"><a name="line105" />105     def floats(count)
</span><span class="marked0"><a name="line106" />106       @rnd.data(count * 8).unpack(&quot;G*&quot;)
</span><span class="marked1"><a name="line107" />107     end
</span><span class="inferred0"><a name="line108" />108   end
</span><span class="inferred1"><a name="line109" />109 
</span><span class="inferred0"><a name="line110" />110 end
</span></pre><hr />    <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a> version 0.6.0.</p><p>
          <a href='http://validator.w3.org/check/referer'>
            <img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' />
          </a>
          <a href='http://jigsaw.w3.org/css-validator/check/referer'>
            <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px' />
          </a>
        </p>
      </body>
    </html>