]> git.llucax.com Git - personal/website.git/commitdiff
Add contents of source/proj/mutest
authorLeandro Lucarella <luca@llucax.com.ar>
Wed, 13 Mar 2013 21:11:32 +0000 (22:11 +0100)
committerLeandro Lucarella <luca@llucax.com.ar>
Wed, 13 Mar 2013 21:11:32 +0000 (22:11 +0100)
source/proj/mutest/index.html [new symlink]
source/proj/mutest/manual.html [new file with mode: 0644]
source/proj/mutest/manual.pdf [new file with mode: 0644]
source/proj/mutest/releases/.htaccess [new file with mode: 0644]
source/proj/mutest/releases/manual-1.0.html [new file with mode: 0644]
source/proj/mutest/releases/manual-1.0.pdf [new file with mode: 0644]
source/proj/mutest/releases/manual.html [new symlink]
source/proj/mutest/releases/manual.pdf [new symlink]
source/proj/mutest/releases/mutest-1.0.tar.gz [new file with mode: 0644]
source/proj/mutest/releases/mutest.tar.gz [new symlink]

diff --git a/source/proj/mutest/index.html b/source/proj/mutest/index.html
new file mode 120000 (symlink)
index 0000000..084d26d
--- /dev/null
@@ -0,0 +1 @@
+manual.html
\ No newline at end of file
diff --git a/source/proj/mutest/manual.html b/source/proj/mutest/manual.html
new file mode 100644 (file)
index 0000000..0221ff4
--- /dev/null
@@ -0,0 +1,909 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
+<title>mutest - A simple micro unit testing framework for C</title>
+<meta name="author" content="Leandro Lucarella" />
+<meta name="date" content="2013-02-17" />
+<meta name="copyright" content="Leandro Lucarella (2008), released under the BOLA license" />
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7514 2012-09-14 14:27:12Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="mutest-a-simple-micro-unit-testing-framework-for-c">
+<h1 class="title"><em>mutest</em> - A simple micro unit testing framework for C</h1>
+<table class="docinfo" frame="void" rules="none">
+<col class="docinfo-name" />
+<col class="docinfo-content" />
+<tbody valign="top">
+<tr><th class="docinfo-name">Author:</th>
+<td>Leandro Lucarella</td></tr>
+<tr><th class="docinfo-name">Contact:</th>
+<td><a class="first last reference external" href="mailto:llucax&#64;gmail.com">llucax&#64;gmail.com</a></td></tr>
+<tr><th class="docinfo-name">Version:</th>
+<td>1.0</td></tr>
+<tr><th class="docinfo-name">Date:</th>
+<td>2013-02-17</td></tr>
+<tr><th class="docinfo-name">Copyright:</th>
+<td>Leandro Lucarella (2008), released under the <a class="reference external" href="http://blitiri.com.ar/p/bola/">BOLA</a> license</td></tr>
+</tbody>
+</table>
+<div class="abstract topic">
+<p class="topic-title first">Abstract</p>
+<p><em>mutest</em> is a micro <a class="reference external" href="http://en.wikipedia.org/wiki/Unit_testing">unit testing</a> framework for C (with some
+<a class="reference internal" href="#c-support">C++ support</a>). It's mostly an idea (it even comes with
+2 <a class="reference internal" href="#implementations">implementations</a> of the idea!) with the goal of being easy to use
+(just write your <a class="reference internal" href="#test-case">test cases</a> grouped in <a class="reference internal" href="#test-suite">test suites</a> and you're
+set) and so small and simple that you don't mind to copy the files to
+your project and just use it (i.e., no dependencies).</p>
+<p>The idea is simple: a source file is a <a class="reference internal" href="#test-suite">test suite</a>, a function is
+a <a class="reference internal" href="#test-case">test case</a> (special functions can be used for <a class="reference internal" href="#test-suite">test suite</a>
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a>), which can can have several <a class="reference internal" href="#checks">checks</a>.
+<a class="reference internal" href="#checks">Checks</a> comes in 2 flavors, one that only prints an error, and one that
+terminates the current <a class="reference internal" href="#test-case">test case</a> too. A (normally) automated <a class="reference internal" href="#test-program">test
+program</a> run all the <a class="reference internal" href="#test-suite">test suites</a> and print some stats. It fails
+(returns non-zero) if any <a class="reference internal" href="#test-suite">test suite</a> fails.</p>
+<p><div style="width: 220px; height: 270px; float: right; margin-left: 1em; margin-top: 1em">
+<iframe width="220" height="270" style="border: none; outline: none" src="http://tools.flattr.net/widgets/thing.html?thing=1141711"></iframe>
+</div></p>
+</div>
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="auto-toc simple">
+<li><a class="reference internal" href="#installation" id="id9">1.&nbsp;&nbsp;&nbsp;Installation</a></li>
+<li><a class="reference internal" href="#quick-sample" id="id10">2.&nbsp;&nbsp;&nbsp;Quick Sample</a><ul class="auto-toc">
+<li><a class="reference internal" href="#factorial-c" id="id11">2.1.&nbsp;&nbsp;&nbsp;factorial.c</a></li>
+<li><a class="reference internal" href="#factorial-test-c" id="id12">2.2.&nbsp;&nbsp;&nbsp;factorial_test.c</a></li>
+<li><a class="reference internal" href="#exception-test-cpp" id="id13">2.3.&nbsp;&nbsp;&nbsp;exception_test.cpp</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#concepts" id="id14">3.&nbsp;&nbsp;&nbsp;Concepts</a><ul class="auto-toc">
+<li><a class="reference internal" href="#test-program" id="id15">3.1.&nbsp;&nbsp;&nbsp;Test Program</a></li>
+<li><a class="reference internal" href="#test-suite" id="id16">3.2.&nbsp;&nbsp;&nbsp;Test Suite</a></li>
+<li><a class="reference internal" href="#test-case" id="id17">3.3.&nbsp;&nbsp;&nbsp;Test Case</a></li>
+<li><a class="reference internal" href="#checks" id="id18">3.4.&nbsp;&nbsp;&nbsp;Checks</a></li>
+<li><a class="reference internal" href="#initialization" id="id19">3.5.&nbsp;&nbsp;&nbsp;Initialization</a></li>
+<li><a class="reference internal" href="#termination" id="id20">3.6.&nbsp;&nbsp;&nbsp;Termination</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#c-support" id="id21">4.&nbsp;&nbsp;&nbsp;C++ Support</a></li>
+<li><a class="reference internal" href="#implementations" id="id22">5.&nbsp;&nbsp;&nbsp;Implementations</a><ul class="auto-toc">
+<li><a class="reference internal" href="#static-implementations" id="id23">5.1.&nbsp;&nbsp;&nbsp;Static Implementations</a><ul class="auto-toc">
+<li><a class="reference internal" href="#c-implementation" id="id24">5.1.1.&nbsp;&nbsp;&nbsp;C implementation</a><ul class="auto-toc">
+<li><a class="reference internal" href="#mkmutest-invocation" id="id25">5.1.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mkmutest</tt> Invocation</a></li>
+<li><a class="reference internal" href="#test-program-invocation" id="id26">5.1.1.2.&nbsp;&nbsp;&nbsp;Test Program Invocation</a></li>
+<li><a class="reference internal" href="#dependencies" id="id27">5.1.1.3.&nbsp;&nbsp;&nbsp;Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a class="reference internal" href="#dynamic-implementations" id="id28">5.2.&nbsp;&nbsp;&nbsp;Dynamic Implementations</a><ul class="auto-toc">
+<li><a class="reference internal" href="#python-implementation" id="id29">5.2.1.&nbsp;&nbsp;&nbsp;Python implementation</a><ul class="auto-toc">
+<li><a class="reference internal" href="#mutest-invocation" id="id30">5.2.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mutest</tt> Invocation</a></li>
+<li><a class="reference internal" href="#id8" id="id31">5.2.1.2.&nbsp;&nbsp;&nbsp;Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a class="reference internal" href="#reference" id="id32">6.&nbsp;&nbsp;&nbsp;Reference</a><ul class="auto-toc">
+<li><a class="reference internal" href="#mu-check" id="id33">6.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_check()</tt></a></li>
+<li><a class="reference internal" href="#mu-ensure" id="id34">6.2.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_ensure()</tt></a></li>
+<li><a class="reference internal" href="#mu-echeck" id="id35">6.3.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_echeck()</tt></a></li>
+<li><a class="reference internal" href="#mu-eensure" id="id36">6.4.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_eensure()</tt></a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#about" id="id37">7.&nbsp;&nbsp;&nbsp;About</a></li>
+</ul>
+</div>
+<div class="section" id="installation">
+<h1><a class="toc-backref" href="#id9">1.&nbsp;&nbsp;&nbsp;Installation</a></h1>
+<p>Download the <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/releases/mutest.tar.gz">latest distribution tarball</a> and uncompress it.</p>
+<p>You can also download any release from the <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/releases/">releases directory</a> or get it
+using <a class="reference external" href="http://git.or.cz/">Git</a> directly from the <a class="reference external" href="http://git.llucax.com.ar/w/software/mutest.git">Git repository</a>.</p>
+<p>You can get <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/manual.html">this manual</a> too, or a <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/manual.pdf">PDF version</a> of it.</p>
+<p>To actually install <em>mutest</em> run:</p>
+<pre class="literal-block">
+$ make install
+</pre>
+<p>Default installation path is <tt class="docutils literal">/usr/local</tt> (because of that, you'll probably
+need superuser privileges to install to the default location). You can override
+that by passing the <tt class="docutils literal">prefix</tt> make variable, for example:</p>
+<pre class="literal-block">
+$ make prefix=/opt/mutest install
+</pre>
+<p>If you want to install just the docs, you can do:</p>
+<pre class="literal-block">
+$ make install-doc
+</pre>
+<p>Or even <tt class="docutils literal"><span class="pre">install-readme</span></tt>, <tt class="docutils literal"><span class="pre">install-html</span></tt> or <tt class="docutils literal"><span class="pre">install-pdf</span></tt> if you are too
+picky.</p>
+<p>If you want to install just one particular <a class="reference internal" href="#implementations">implementation</a>, to can use the
+<tt class="docutils literal"><span class="pre">install-c</span></tt> and <tt class="docutils literal"><span class="pre">install-py</span></tt> targets.</p>
+</div>
+<div class="section" id="quick-sample">
+<h1><a class="toc-backref" href="#id10">2.&nbsp;&nbsp;&nbsp;Quick Sample</a></h1>
+<p>You can find some samples in the <a class="reference external" href="http://git.llucax.com.ar/w/software/mutest.git?a=tree;f=sample;h=d8ad4dd9c3428fef5963107c82ab6a5e34ec6e00;hb=HEAD">sample</a> directory.</p>
+<p>This is an example taken from there. A simple <em>module</em> called <a class="reference internal" href="#factorial-c">factorial.c</a>
+with its corresponding <a class="reference internal" href="#test-suite">test suite</a> (<a class="reference internal" href="#factorial-test-c">factorial_test.c</a>).</p>
+<p>You can see some <a class="reference internal" href="#c-support">C++ support</a> in the <a class="reference internal" href="#exception-test-cpp">exception_test.cpp</a> <a class="reference internal" href="#test-suite">test suite</a>.</p>
+<div class="section" id="factorial-c">
+<h2><a class="toc-backref" href="#id11">2.1.&nbsp;&nbsp;&nbsp;factorial.c</a></h2>
+<pre class="code c literal-block">
+<span class="comment multiline">/*
+ * This file is part of mutest, a simple micro unit testing framework for C.
+ *
+ * mutest was written by Leandro Lucarella &lt;llucax&#64;gmail.com&gt; and is released
+ * under the BOLA license, please see the LICENSE file or visit:
+ * http://blitiri.com.ar/p/bola/
+ *
+ * This is an example module that calculates a factorial.
+ *
+ * Please, read the README file for more details.
+ */</span>
+
+<span class="keyword type">unsigned</span> <span class="name function">factorial</span><span class="punctuation">(</span><span class="keyword type">unsigned</span> <span class="name">x</span><span class="punctuation">)</span> <span class="punctuation">{</span>
+        <span class="keyword">if</span> <span class="punctuation">(</span><span class="name">x</span> <span class="operator">&lt;=</span> <span class="literal number integer">1</span><span class="punctuation">)</span>
+                <span class="keyword">return</span> <span class="literal number integer">1</span><span class="punctuation">;</span>
+        <span class="keyword">return</span> <span class="name">x</span> <span class="operator">*</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="name">x</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">);</span>
+<span class="punctuation">}</span>
+</pre>
+</div>
+<div class="section" id="factorial-test-c">
+<h2><a class="toc-backref" href="#id12">2.2.&nbsp;&nbsp;&nbsp;factorial_test.c</a></h2>
+<pre class="code c literal-block">
+<span class="comment multiline">/*
+ * This file is part of mutest, a simple micro unit testing framework for C.
+ *
+ * mutest was written by Leandro Lucarella &lt;llucax&#64;gmail.com&gt; and is released
+ * under the BOLA license, please see the LICENSE file or visit:
+ * http://blitiri.com.ar/p/bola/
+ *
+ * This is the factorial module test suite. Each (public) function starting
+ * with mu_test will be picked up by mkmutest as a test case.
+ *
+ * Please, read the README file for more details.
+ */</span>
+
+<span class="comment preproc">#include &quot;factorial.h&quot;
+</span>
+<span class="comment preproc">#include &quot;../mutest.h&quot;
+</span>
+<span class="keyword type">void</span> <span class="name function">mu_test_factorial_zero</span><span class="punctuation">()</span> <span class="punctuation">{</span>
+        <span class="keyword type">unsigned</span> <span class="name">x</span> <span class="operator">=</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">);</span>
+        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">x</span> <span class="operator">==</span> <span class="literal number integer">1</span><span class="punctuation">);</span>
+<span class="punctuation">}</span>
+
+<span class="keyword type">void</span> <span class="name function">mu_test_factorial_one</span><span class="punctuation">()</span> <span class="punctuation">{</span>
+        <span class="keyword type">unsigned</span> <span class="name">x</span> <span class="operator">=</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">);</span>
+        <span class="comment multiline">/* this test is wrong on purpose, to see how it fails */</span>
+        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">x</span> <span class="operator">==</span> <span class="literal number integer">2</span><span class="punctuation">);</span>
+<span class="punctuation">}</span>
+
+<span class="keyword type">void</span> <span class="name function">mu_test_factorial_positive</span><span class="punctuation">()</span> <span class="punctuation">{</span>
+        <span class="keyword type">unsigned</span> <span class="name">x</span> <span class="operator">=</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="literal number integer">2</span><span class="punctuation">);</span>
+        <span class="comment multiline">/* this test is wrong on purpose, to see how it fails */</span>
+        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">x</span> <span class="operator">==</span> <span class="literal number integer">3</span><span class="punctuation">);</span>
+
+        <span class="name">x</span> <span class="operator">=</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="literal number integer">3</span><span class="punctuation">);</span>
+        <span class="comment multiline">/* we don't want to continue if this fails, because the next result
+         * depends on this one. This one will succeed. */</span>
+        <span class="name">mu_ensure</span><span class="punctuation">(</span><span class="name">x</span> <span class="operator">==</span> <span class="literal number integer">6</span><span class="punctuation">);</span>
+
+        <span class="name">x</span> <span class="operator">=</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="name">x</span><span class="punctuation">);</span>
+        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">x</span> <span class="operator">==</span> <span class="literal number integer">720</span><span class="punctuation">);</span>
+
+        <span class="name">x</span> <span class="operator">=</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="literal number integer">4</span><span class="punctuation">);</span>
+        <span class="name">mu_ensure</span><span class="punctuation">(</span><span class="name">x</span> <span class="operator">==</span> <span class="literal number integer">6</span><span class="punctuation">);</span> <span class="comment multiline">/* same as before, but this one will fail. */</span>
+
+        <span class="name">x</span> <span class="operator">=</span> <span class="name">factorial</span><span class="punctuation">(</span><span class="name">x</span><span class="operator">-</span><span class="literal number integer">15</span><span class="punctuation">);</span> <span class="comment multiline">/* and this will never be executed */</span>
+        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">x</span> <span class="operator">==</span> <span class="literal number integer">362881</span><span class="punctuation">);</span> <span class="comment multiline">/* but if excecuted, will fail */</span>
+<span class="punctuation">}</span>
+</pre>
+</div>
+<div class="section" id="exception-test-cpp">
+<h2><a class="toc-backref" href="#id13">2.3.&nbsp;&nbsp;&nbsp;exception_test.cpp</a></h2>
+<pre class="code c++ literal-block">
+<span class="comment multiline">/*
+ * This file is part of mutest, a simple micro unit testing framework for C.
+ *
+ * mutest was written by Leandro Lucarella &lt;llucax&#64;gmail.com&gt; and is released
+ * under the BOLA license, please see the LICENSE file or visit:
+ * http://blitiri.com.ar/p/bola/
+ *
+ * This is a C++ module test suite. It shows how to use checks involving
+ * exceptions.
+ *
+ * Please, read the README file for more details.
+ */</span>
+
+<span class="comment preproc">#include &lt;stdexcept&gt; </span><span class="comment single">// std::out_of_range
+</span><span class="comment preproc">#include &lt;vector&gt; </span><span class="comment single">// std::vector
+</span>
+<span class="comment preproc">#include &quot;../mutest.h&quot;
+</span>
+<span class="keyword">extern</span> <span class="literal string">&quot;C&quot;</span> <span class="punctuation">{</span>
+
+<span class="keyword type">void</span> <span class="name">mu_test_exceptions</span><span class="punctuation">()</span> <span class="punctuation">{</span>
+        <span class="name">std</span><span class="operator">::</span><span class="name">vector</span><span class="operator">&lt;</span><span class="keyword type">int</span><span class="operator">&gt;</span> <span class="name">v</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">);</span>
+        <span class="comment single">// ok
+</span>        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">v</span><span class="punctuation">.</span><span class="name">at</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">)</span> <span class="operator">==</span> <span class="literal number integer">0</span><span class="punctuation">);</span>
+        <span class="comment single">// throws! This fails
+</span>        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">v</span><span class="punctuation">.</span><span class="name">at</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">)</span> <span class="operator">==</span> <span class="literal number integer">0</span><span class="punctuation">);</span>
+        <span class="comment single">// ok, we expect the exception to be thrown, and it does
+</span>        <span class="name">mu_echeck</span><span class="punctuation">(</span><span class="name">std</span><span class="operator">::</span><span class="name">out_of_range</span><span class="punctuation">,</span> <span class="name">v</span><span class="punctuation">.</span><span class="name">at</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">));</span>
+        <span class="comment single">// fails! We expect this to throw, but it doesn't
+</span>        <span class="name">mu_echeck</span><span class="punctuation">(</span><span class="name">std</span><span class="operator">::</span><span class="name">out_of_range</span><span class="punctuation">,</span> <span class="name">v</span><span class="punctuation">.</span><span class="name">at</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">));</span>
+        <span class="comment single">// fails again, but this time the show is over (note the &quot;ensure&quot;)
+</span>        <span class="name">mu_eensure</span><span class="punctuation">(</span><span class="name">std</span><span class="operator">::</span><span class="name">out_of_range</span><span class="punctuation">,</span> <span class="name">v</span><span class="punctuation">.</span><span class="name">at</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">));</span>
+        <span class="comment single">// this will never be executed (it should fail if it is)
+</span>        <span class="name">mu_check</span><span class="punctuation">(</span><span class="name">v</span><span class="punctuation">.</span><span class="name">empty</span><span class="punctuation">());</span>
+<span class="punctuation">}</span>
+
+<span class="punctuation">}</span> <span class="comment single">// extern &quot;C&quot;</span>
+</pre>
+</div>
+</div>
+<div class="section" id="concepts">
+<h1><a class="toc-backref" href="#id14">3.&nbsp;&nbsp;&nbsp;Concepts</a></h1>
+<p><em>mutest</em> is about 4 simple concepts: <a class="reference internal" href="#test-program">test program</a>, <a class="reference internal" href="#test-suite">test suite</a>, <a class="reference internal" href="#test-case">test
+case</a> and <a class="reference internal" href="#checks">checks</a>. Well, to be honest you probably will need <a class="reference internal" href="#test-suite">test suite</a>
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> too =)</p>
+<div class="section" id="test-program">
+<h2><a class="toc-backref" href="#id15">3.1.&nbsp;&nbsp;&nbsp;Test Program</a></h2>
+<p>A <strong>test program</strong> is the higher level unit of <em>mutest</em>. The test program is
+the one in charge of running all your tests. Probably one of the more important
+features of <em>mutest</em> is that you are not supposed to bother about the test
+program. So, different <a class="reference internal" href="#implementations">implementations</a> have different ways to tackle this.
+Some need more or less interactions from your part, and each have their pros
+and cons.</p>
+<p>But this is all you need to know for now, for more details see how the test
+program is implemented by your <a class="reference internal" href="#implementations">implementation</a> of choice.</p>
+</div>
+<div class="section" id="test-suite">
+<h2><a class="toc-backref" href="#id16">3.2.&nbsp;&nbsp;&nbsp;Test Suite</a></h2>
+<p>A <strong>test suite</strong> is the higher level unit of <em>mutest</em> that you should
+care about =). Is not much more than a way to group <a class="reference internal" href="#test-case">test cases</a>. Code-wise,
+a test suite is a C (or C++) module (or compilation unit). Not clear enough?
+A unit test is an object file (could be a shared object depending on the
+<a class="reference internal" href="#implementations">implementation</a>). This module should have one or more <a class="reference internal" href="#test-case">test cases</a> and it
+could have any number (including zero) of <a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a>
+functions.</p>
+<p>A test suite, is inspected by the <a class="reference internal" href="#test-program">test program</a> for <a class="reference internal" href="#test-case">test cases</a> and
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions, and run them.</p>
+<p>A test suite fail if one or more <a class="reference internal" href="#test-case">test cases</a> fail, and it's skipped if one or
+more <a class="reference internal" href="#initialization">initialization</a> functions fail (or, depending on the implementation, if
+the test suite can't be loaded at all).</p>
+</div>
+<div class="section" id="test-case">
+<h2><a class="toc-backref" href="#id17">3.3.&nbsp;&nbsp;&nbsp;Test Case</a></h2>
+<p>A <strong>test case</strong> is just a plain function with a special signature and name.
+A test case function name must start with <tt class="docutils literal">mu_test</tt>, and take no arguments
+and return nothing. For example:</p>
+<pre class="literal-block">
+void mu_test_something(void);
+</pre>
+<p>A test case (probably) only make sense if it has <a class="reference internal" href="#checks">checks</a>. A test case succeed
+only if all its checks succeed too.</p>
+<p>Test are executed in an <a class="reference internal" href="#implementations">implementation</a>-dependant order, but usually the
+default order is alphabetical.</p>
+</div>
+<div class="section" id="checks">
+<h2><a class="toc-backref" href="#id18">3.4.&nbsp;&nbsp;&nbsp;Checks</a></h2>
+<p>Checks are assertions that a <a class="reference internal" href="#test-case">test case</a> must pass (a boolean expression that
+must evaluate to <em>true</em>). There are 2 big flavors of checks: <strong>check</strong> and
+<strong>ensure</strong>. <strong>check</strong> just print an error (and <em>mark</em> the <a class="reference internal" href="#test-case">test case</a> as
+failed) and <strong>ensure</strong> halt the <a class="reference internal" href="#test-case">test case</a> execution, jumping to the next
+one.</p>
+<p>For better <a class="reference internal" href="#c-support">C++ support</a> there are check macros that assert that a specified
+exception is thrown (instead of check for a boolean expression to evaluate to
+<em>true</em>).</p>
+<p>You can take a look at the <a class="reference internal" href="#reference">reference</a> to see the different flavors of check
+macros in more detail.</p>
+</div>
+<div class="section" id="initialization">
+<h2><a class="toc-backref" href="#id19">3.5.&nbsp;&nbsp;&nbsp;Initialization</a></h2>
+<p>Sometimes you need to setup some environment shared between all the <a class="reference internal" href="#test-case">test
+cases</a> in a <a class="reference internal" href="#test-suite">test suite</a>. You can use <strong>initialization functions</strong> for this.</p>
+<p>An initialization function, like a <a class="reference internal" href="#test-case">test case</a>, is a plain C function with
+a special name and signature. The name must start with <tt class="docutils literal">mu_init</tt> and it must
+take no arguments, and return an <em>error code</em> (<tt class="docutils literal">0</tt> being success). For
+example:</p>
+<pre class="literal-block">
+int mu_init_something(void);
+</pre>
+<p>All initialization functions are executed before any <a class="reference internal" href="#test-case">test case</a>, in an
+<a class="reference internal" href="#implementations">implementation</a>-dependant order, and if one of them fail (returns non-zero),
+the whole <a class="reference internal" href="#test-suite">test suite</a> is skipped immediately.</p>
+</div>
+<div class="section" id="termination">
+<h2><a class="toc-backref" href="#id20">3.6.&nbsp;&nbsp;&nbsp;Termination</a></h2>
+<p><strong>Termination functions</strong> are just like <a class="reference internal" href="#initialization">initialization</a> functions, but they're
+executed <strong>after</strong> the <a class="reference internal" href="#test-case">test cases</a>, their names start with <tt class="docutils literal">mu_term</tt> and
+they return nothing. For example:</p>
+<pre class="literal-block">
+void mu_term_something(void);
+</pre>
+</div>
+</div>
+<div class="section" id="c-support">
+<h1><a class="toc-backref" href="#id21">4.&nbsp;&nbsp;&nbsp;C++ Support</a></h1>
+<p>You can use <em>mutest</em> with C++, the only care you must take is that, because of
+C++ <a class="reference external" href="http://en.wikipedia.org/wiki/Name_mangling">name mangling</a> (and <em>mutest</em> relaying on function names), you must
+declare your <a class="reference internal" href="#test-case">test cases</a> and <a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions as
+<tt class="docutils literal">extern &quot;C&quot;</tt> (see <a class="reference internal" href="#exception-test-cpp">exception_test.cpp</a> for an example).</p>
+<p><a class="reference internal" href="#checks">Checks</a> become <em>exception-safe</em> when using <em>mutest</em> with a C++ compiler, and
+2 extra <a class="reference internal" href="#checks">checks</a> designed for C++ get defined (<a class="reference internal" href="#mu-echeck">mu_echeck()</a> and
+<a class="reference internal" href="#mu-eensure">mu_eensure()</a>). They assert that an expression throws a particular exception.</p>
+</div>
+<div class="section" id="implementations">
+<h1><a class="toc-backref" href="#id22">5.&nbsp;&nbsp;&nbsp;Implementations</a></h1>
+<p>There are 2 big groups of possible implementations that I can think
+of: <em>static</em> and <em>dynamic</em>.</p>
+<p><em>mutest</em> comes with one implementation of each group.</p>
+<div class="section" id="static-implementations">
+<h2><a class="toc-backref" href="#id23">5.1.&nbsp;&nbsp;&nbsp;Static Implementations</a></h2>
+<p>Static implementations can be only written in C/C++ (or other language that is
+link-compatible with C, like the <a class="reference external" href="http://www.digitalmars.com/d/">D Programming Language</a>, but since one of
+the main goals of <em>mutest</em> is avoid unnecessary dependencies, you probably
+don't want to depend on an extra language/compiler to run your tests =).</p>
+<p>The main advantage is better debugging support, because you can run the <a class="reference internal" href="#test-program">test
+program</a> in a standard debugger and see what happens with <a class="reference internal" href="#test-case">test cases</a> very
+naturally.</p>
+<p>The main disadvantage is, the <a class="reference internal" href="#test-suite">test suites</a> must be figured out in
+<em>compile-time</em>, usually using some kind of code generation (if you want to
+avoid writing repetitive code yourself). There's also a limitation in the <a class="reference internal" href="#test-case">test
+case</a>, <a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions names: they should be unique
+for all the <a class="reference internal" href="#test-program">test program</a>.</p>
+<div class="section" id="c-implementation">
+<h3><a class="toc-backref" href="#id24">5.1.1.&nbsp;&nbsp;&nbsp;C implementation</a></h3>
+<p><em>mutest</em> comes with a C static implementation. Only 3 files are needed:
+<tt class="docutils literal">mutest.c</tt> (the <em>user-independent</em> part of the <a class="reference internal" href="#test-program">test program</a>), <tt class="docutils literal">mkmutest</tt>
+(a bash script for generating the <em>user-dependent</em> part of the <a class="reference internal" href="#test-program">test program</a>)
+and <tt class="docutils literal">mutest.h</tt> (the header file that <a class="reference internal" href="#test-suite">test suites</a> should include).</p>
+<p>You can copy this 3 files to your project or install them at system-level and
+use them globally.</p>
+<p>The procedure is simple, You should compile you <a class="reference internal" href="#test-suite">test suites</a>, <tt class="docutils literal">mutest.c</tt>
+and the generated output of <tt class="docutils literal">mkmutest</tt> as object files and link them
+together.</p>
+<p>For example:</p>
+<pre class="literal-block">
+$ cc -c -o mutest.o mutest.c
+$ cc -c -o test1.o test1.c
+$ cc -c -o test2.o test2.c
+$ mkmutest mutest.h test1.o test2.o | cc -xc -c -o runmutest.o -
+$ cc -o testprg mutest.o test1.o test2.o runmutest.o
+</pre>
+<p>Then you can run the <a class="reference internal" href="#test-program">test program</a> invoking it with no arguments:</p>
+<pre class="literal-block">
+$ ./testprg
+</pre>
+<div class="section" id="mkmutest-invocation">
+<h4><a class="toc-backref" href="#id25">5.1.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mkmutest</tt> Invocation</a></h4>
+<p>This small script take 1 mandatory positional argument: the path to the
+<tt class="docutils literal">mutest.h</tt> file. All remaining positional arguments should be object files
+representing <a class="reference internal" href="#test-suite">test suites</a>.</p>
+</div>
+<div class="section" id="test-program-invocation">
+<h4><a class="toc-backref" href="#id26">5.1.1.2.&nbsp;&nbsp;&nbsp;Test Program Invocation</a></h4>
+<p>The test program can be invoked without arguments, but can take some extra
+options:</p>
+<dl class="docutils">
+<dt><tt class="docutils literal"><span class="pre">-v</span></tt></dt>
+<dd><p class="first">Be verbose. This is accumulative, when you add extra <tt class="docutils literal"><span class="pre">-v</span></tt> you will
+get extra verbosity.</p>
+<p class="last">By default, you just get failed <a class="reference internal" href="#checks">checks</a> printed. If you use a single
+<tt class="docutils literal"><span class="pre">-v</span></tt>, a summary of failed/passed <a class="reference internal" href="#test-suite">test suites</a>, <a class="reference internal" href="#test-case">test cases</a> and
+<a class="reference internal" href="#checks">checks</a> will be printed. If an extra <tt class="docutils literal"><span class="pre">-v</span></tt> is used, you'll see the current
+<a class="reference internal" href="#test-suite">test suite</a> being executed. Another <tt class="docutils literal"><span class="pre">-v</span></tt> and you'll get the current
+<a class="reference internal" href="#test-case">test case</a>, and another one, and you'll get each <a class="reference internal" href="#checks">check</a>.</p>
+</dd>
+</dl>
+</div>
+<div class="section" id="dependencies">
+<h4><a class="toc-backref" href="#id27">5.1.1.3.&nbsp;&nbsp;&nbsp;Dependencies</a></h4>
+<p>Even when dependencies are kept minimal, there always be a few ;)</p>
+<p>To use this implementation you just need:</p>
+<ul class="simple">
+<li>A C compiler (you already needed that, so...)</li>
+<li>The <tt class="docutils literal">nm</tt> program (from <a class="reference external" href="http://www.gnu.org/software/binutils/">GNU Binutils</a>, included in virtually any *NIX)</li>
+<li>The <a class="reference external" href="http://www.gnu.org/software/bash/">GNU Bash</a> shell interpreter (also included in virtually any *NIX)</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="section" id="dynamic-implementations">
+<h2><a class="toc-backref" href="#id28">5.2.&nbsp;&nbsp;&nbsp;Dynamic Implementations</a></h2>
+<p>Dynamic implementations, on the other hand, can be written in any language that
+can access to shared objects. The idea is to inspect a shared object for <a class="reference internal" href="#test-suite">test
+suites</a> and run them, without requiring any information about <a class="reference internal" href="#test-suite">test suites</a>
+at compile time.</p>
+<p>There are several advantages in this kind of implementations. The dynamic
+nature let you completely separate the <a class="reference internal" href="#test-program">test program</a> from the user-written
+<a class="reference internal" href="#test-suite">test suites</a> and you can choose at <em>run-time</em> what <a class="reference internal" href="#test-suite">test suites</a> to execute
+by just selecting the correct shared objects. Also, <a class="reference internal" href="#test-case">test case</a>,
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions names only have to be unique in the
+scope of the <a class="reference internal" href="#test-suite">test suites</a>, because <a class="reference internal" href="#test-suite">test suites</a> are completely isolated in
+separate shared objects.</p>
+<p>But everything comes at a price, and the higher price to pay is
+<em>debuggability</em>. It's a little harder to plug a debugger to a shared object.</p>
+<div class="section" id="python-implementation">
+<h3><a class="toc-backref" href="#id29">5.2.1.&nbsp;&nbsp;&nbsp;Python implementation</a></h3>
+<p>This implementation is much simpler and elegant than the <a class="reference internal" href="#c-implementation">C implementation</a>.
+Only 2 files are needed: <tt class="docutils literal">mutest</tt> (<a class="reference internal" href="#test-program">test program</a> written in <a class="reference external" href="http://www.python.org/">Python</a> using
+<a class="reference external" href="http://docs.python.org/library/ctypes.html">ctypes</a> module to access the shared object symbols) and <tt class="docutils literal">mutest.h</tt> (the
+header file that <a class="reference internal" href="#test-suite">test suites</a> should include).</p>
+<p>Since both implementations provided by <em>mutest</em> share the same <tt class="docutils literal">mutest.h</tt>,
+you should define the <tt class="docutils literal">MUTEST_PY</tt> macro when compiling the <a class="reference internal" href="#test-suite">test suites</a> if
+you will run them using this implementation.</p>
+<p>As with the <a class="reference internal" href="#c-implementation">C implementation</a>, you can copy this 2 files to your project or
+install them at system-level and use them globally.</p>
+<p>The procedure is even simpler than the <a class="reference internal" href="#c-implementation">C implementation</a>: compile and link
+you <a class="reference internal" href="#test-suite">test suites</a> as shared objects and then run the <tt class="docutils literal">mutest</tt> program
+passing the shared objects as arguments. For example:</p>
+<pre class="literal-block">
+$ cc -c -fPIC -DMUTEST_PY -o test1.o test1.c
+$ cc -shared -o test1.so test1.o
+$ cc -c -fPIC -DMUTEST_PY -o test2.o test2.c
+$ cc -shared -o test2.so test2.o
+$ mutest test1.so test2.so
+</pre>
+<p>That's it.</p>
+<div class="section" id="mutest-invocation">
+<h4><a class="toc-backref" href="#id30">5.2.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mutest</tt> Invocation</a></h4>
+<p><tt class="docutils literal">mutest</tt> program takes <a class="reference internal" href="#test-suite">test suites</a> shared objects to run as positional
+arguments. It accepts the same options as the <a class="reference internal" href="#test-program-invocation">C implementation's test
+program</a> and some extra options are accepted too:</p>
+<dl class="docutils">
+<dt><tt class="docutils literal"><span class="pre">--verbose</span></tt></dt>
+<dd>Alias for <tt class="docutils literal"><span class="pre">-v</span></tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">-q</span></tt>, <tt class="docutils literal"><span class="pre">--quiet</span></tt></dt>
+<dd>Be quiet (no output is shown at all).</dd>
+<dt><tt class="docutils literal"><span class="pre">-s</span></tt>, <tt class="docutils literal"><span class="pre">--search</span></tt></dt>
+<dd>Search for <a class="reference internal" href="#test-suite">test suites</a> (*.so) in the current directory and add them
+to the list of <a class="reference internal" href="#test-suite">test suites</a> to run.</dd>
+<dt><tt class="docutils literal"><span class="pre">-h</span></tt>, <tt class="docutils literal"><span class="pre">--help</span></tt></dt>
+<dd>Show a help message and exit.</dd>
+</dl>
+</div>
+<div class="section" id="id8">
+<h4><a class="toc-backref" href="#id31">5.2.1.2.&nbsp;&nbsp;&nbsp;Dependencies</a></h4>
+<p>As with the <a class="reference internal" href="#c-implementation">C implementation</a>, some minor dependencies are needed:</p>
+<ul class="simple">
+<li><a class="reference external" href="http://www.python.org/">Python</a> (2.5 or later)</li>
+<li>The <tt class="docutils literal">nm</tt> program (from <a class="reference external" href="http://www.gnu.org/software/binutils/">GNU Binutils</a>, included in virtually any *NIX)</li>
+</ul>
+<p>You will need a C compiler for building the <a class="reference internal" href="#test-suite">test suites</a> too, but technically
+is not needed by <em>mutest</em> itself ;)</p>
+</div>
+</div>
+</div>
+</div>
+<div class="section" id="reference">
+<h1><a class="toc-backref" href="#id32">6.&nbsp;&nbsp;&nbsp;Reference</a></h1>
+<div class="section" id="mu-check">
+<h2><a class="toc-backref" href="#id33">6.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_check()</tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal">mu_check(expression)</tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal">expression</tt> evaluates to <em>true</em>. Continue with the
+<a class="reference internal" href="#test-case">test case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>Always</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+void mu_test(void)
+{
+    mu_check(5 == 4); /* fail */
+    mu_check(5 == 5); /* excecuted, pass */
+}
+</pre>
+</dd>
+</dl>
+</div>
+<div class="section" id="mu-ensure">
+<h2><a class="toc-backref" href="#id34">6.2.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_ensure()</tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal">mu_ensure(expression)</tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal">expression</tt> evaluates to <em>true</em>. Interrupt the <a class="reference internal" href="#test-case">test
+case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>Always</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+void mu_test(void)
+{
+    mu_ensure(5 == 4); /* fail */
+    mu_check(5 == 5); /* not excecuted */
+}
+</pre>
+</dd>
+</dl>
+</div>
+<div class="section" id="mu-echeck">
+<h2><a class="toc-backref" href="#id35">6.3.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_echeck()</tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal">mu_echeck(class, expression)</tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal">expression</tt> throws a specific exception <tt class="docutils literal">class</tt> (or
+subclass). Continue with the <a class="reference internal" href="#test-case">test case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>C++ only</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+#include &lt;stdexcept&gt;
+
+extern &quot;C&quot;
+{
+    void mu_test(void)
+    {
+        mu_echeck(std::exception, true); /* fail */
+        mu_echeck(std::exception,
+                throw std::runtime_error(&quot;!&quot;)); /* excecuted, pass */
+    }
+}
+</pre>
+</dd>
+</dl>
+</div>
+<div class="section" id="mu-eensure">
+<h2><a class="toc-backref" href="#id36">6.4.&nbsp;&nbsp;&nbsp;<tt class="docutils literal">mu_eensure()</tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal">mu_eensure(class, expression)</tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal">expression</tt> throws a specific exception <tt class="docutils literal">class</tt> (or
+subclass). Interrupt the <a class="reference internal" href="#test-case">test case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>C++ only</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+#include &lt;stdexcept&gt;
+
+extern &quot;C&quot;
+{
+    void mu_test(void)
+    {
+        mu_eensure(std::exception, true); /* fail */
+        mu_echeck(std::exception,
+                throw std::runtime_error(&quot;!&quot;)); /* not excecuted */
+    }
+}
+</pre>
+</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="about">
+<h1><a class="toc-backref" href="#id37">7.&nbsp;&nbsp;&nbsp;About</a></h1>
+<p>This manual was written using <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>.</p>
+<!-- Use section numbers -->
+<!-- Internal Links (aliases): -->
+<!-- External Links: -->
+<!-- Substitutions: -->
+<!-- vim: set filetype=rst expandtab shiftwidth=4 softtabstop=4 : -->
+</div>
+</div>
+</body>
+</html>
diff --git a/source/proj/mutest/manual.pdf b/source/proj/mutest/manual.pdf
new file mode 100644 (file)
index 0000000..4a18909
--- /dev/null
@@ -0,0 +1,6874 @@
+%PDF-1.4\r
+%\93\8c\8b\9e ReportLab Generated PDF document http://www.reportlab.com\r
+% 'BasicFonts': class PDFDictionary \r
+1 0 obj\r
+% The standard fonts dictionary\r
+<< /F1 2 0 R\r
+ /F2 3 0 R\r
+ /F3 4 0 R\r
+ /F4 7 0 R\r
+ /F5 57 0 R\r
+ /F6 171 0 R\r
+ /F7 174 0 R >>\r
+endobj\r
+% 'F1': class PDFType1Font \r
+2 0 obj\r
+% Font Helvetica\r
+<< /BaseFont /Helvetica\r
+ /Encoding /WinAnsiEncoding\r
+ /Name /F1\r
+ /Subtype /Type1\r
+ /Type /Font >>\r
+endobj\r
+% 'F2': class PDFType1Font \r
+3 0 obj\r
+% Font Helvetica-BoldOblique\r
+<< /BaseFont /Helvetica-BoldOblique\r
+ /Encoding /WinAnsiEncoding\r
+ /Name /F2\r
+ /Subtype /Type1\r
+ /Type /Font >>\r
+endobj\r
+% 'F3': class PDFType1Font \r
+4 0 obj\r
+% Font Helvetica-Bold\r
+<< /BaseFont /Helvetica-Bold\r
+ /Encoding /WinAnsiEncoding\r
+ /Name /F3\r
+ /Subtype /Type1\r
+ /Type /Font >>\r
+endobj\r
+% 'Annot.NUMBER1': class PDFDictionary \r
+5 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (mailto:llucax@gmail.com) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 153.7323\r
+ 680.7736\r
+ 526.5827\r
+ 692.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER2': class PDFDictionary \r
+6 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://blitiri.com.ar/p/bola/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 357.1723\r
+ 635.7736\r
+ 386.6323\r
+ 647.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'F4': class PDFType1Font \r
+7 0 obj\r
+% Font Helvetica-Oblique\r
+<< /BaseFont /Helvetica-Oblique\r
+ /Encoding /WinAnsiEncoding\r
+ /Name /F4\r
+ /Subtype /Type1\r
+ /Type /Font >>\r
+endobj\r
+% 'Annot.NUMBER3': class PDFDictionary \r
+8 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://en.wikipedia.org/wiki/Unit_testing) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 141.0429\r
+ 587.7736\r
+ 192.1829\r
+ 599.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER4': class LinkAnnotation \r
+9 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.5236\r
+ 0 ]\r
+ /Rect [ 317.2029\r
+ 587.7736\r
+ 372.2329\r
+ 599.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER5': class LinkAnnotation \r
+10 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 651.5236\r
+ 0 ]\r
+ /Rect [ 91.59291\r
+ 575.7736\r
+ 167.1729\r
+ 587.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER6': class LinkAnnotation \r
+11 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 441.7529\r
+ 575.7736\r
+ 489.5529\r
+ 587.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER7': class LinkAnnotation \r
+12 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 73.25291\r
+ 563.7736\r
+ 121.0529\r
+ 575.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER8': class LinkAnnotation \r
+13 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 223.8629\r
+ 539.7736\r
+ 263.8829\r
+ 551.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER9': class LinkAnnotation \r
+14 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 333.9229\r
+ 539.7736\r
+ 376.7229\r
+ 551.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER10': class LinkAnnotation \r
+15 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 527.7736\r
+ 102.7129\r
+ 539.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER11': class LinkAnnotation \r
+16 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 105.4929\r
+ 527.7736\r
+ 159.9529\r
+ 539.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER12': class LinkAnnotation \r
+17 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 181.6236\r
+ 0 ]\r
+ /Rect [ 179.4129\r
+ 527.7736\r
+ 228.8729\r
+ 539.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER13': class LinkAnnotation \r
+18 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 363.3729\r
+ 527.7736\r
+ 394.4929\r
+ 539.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER14': class LinkAnnotation \r
+19 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 400.0529\r
+ 527.7736\r
+ 436.1729\r
+ 539.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER15': class LinkAnnotation \r
+20 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 348.9529\r
+ 515.7736\r
+ 391.7529\r
+ 527.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER16': class LinkAnnotation \r
+21 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 503.7736\r
+ 121.6029\r
+ 515.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER17': class LinkAnnotation \r
+22 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 168.2929\r
+ 503.7736\r
+ 216.0929\r
+ 515.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER18': class LinkAnnotation \r
+23 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 450.0729\r
+ 503.7736\r
+ 492.8729\r
+ 515.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page1': class PDFPage \r
+24 0 obj\r
+% Page dictionary\r
+<< /Annots [ 5 0 R\r
+ 6 0 R\r
+ 8 0 R\r
+ 9 0 R\r
+ 10 0 R\r
+ 11 0 R\r
+ 12 0 R\r
+ 13 0 R\r
+ 14 0 R\r
+ 15 0 R\r
+ 16 0 R\r
+ 17 0 R\r
+ 18 0 R\r
+ 19 0 R\r
+ 20 0 R\r
+ 21 0 R\r
+ 22 0 R\r
+ 23 0 R ]\r
+ /Contents 255 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Annot.NUMBER19': class LinkAnnotation \r
+25 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 99 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 204.0236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 723.7736\r
+ 132.1629\r
+ 735.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER20': class LinkAnnotation \r
+26 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 99 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 204.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 723.7736\r
+ 532.5827\r
+ 735.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER21': class LinkAnnotation \r
+27 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 108 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 559.4236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 705.7736\r
+ 145.5129\r
+ 717.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER22': class LinkAnnotation \r
+28 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 108 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 559.4236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 705.7736\r
+ 532.5827\r
+ 717.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER23': class LinkAnnotation \r
+29 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 108 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 460.4236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 687.7736\r
+ 150.5029\r
+ 699.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER24': class LinkAnnotation \r
+30 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 108 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 460.4236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 687.7736\r
+ 532.5827\r
+ 699.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER25': class LinkAnnotation \r
+31 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 109 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 669.7736\r
+ 172.1829\r
+ 681.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER26': class LinkAnnotation \r
+32 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 109 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 669.7736\r
+ 532.5827\r
+ 681.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER27': class LinkAnnotation \r
+33 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 651.7736\r
+ 191.0929\r
+ 663.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER28': class LinkAnnotation \r
+34 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 651.7736\r
+ 532.5827\r
+ 663.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER29': class LinkAnnotation \r
+35 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 269.8236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 633.7736\r
+ 124.9329\r
+ 645.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER30': class LinkAnnotation \r
+36 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 269.8236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 633.7736\r
+ 532.5827\r
+ 645.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER31': class LinkAnnotation \r
+37 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 206.8236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 615.7736\r
+ 168.2829\r
+ 627.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER32': class LinkAnnotation \r
+38 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 206.8236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 615.7736\r
+ 532.5827\r
+ 627.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER33': class LinkAnnotation \r
+39 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 597.7736\r
+ 152.7329\r
+ 609.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER34': class LinkAnnotation \r
+40 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 597.7736\r
+ 532.5827\r
+ 609.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER35': class LinkAnnotation \r
+41 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 609.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 579.7736\r
+ 153.2829\r
+ 591.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER36': class LinkAnnotation \r
+42 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 609.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 579.7736\r
+ 532.5827\r
+ 591.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER37': class LinkAnnotation \r
+43 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 465.8236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 561.7736\r
+ 141.0529\r
+ 573.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER38': class LinkAnnotation \r
+44 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 465.8236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 561.7736\r
+ 532.5827\r
+ 573.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER39': class LinkAnnotation \r
+45 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 345.8236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 543.7736\r
+ 159.9529\r
+ 555.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER40': class LinkAnnotation \r
+46 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 345.8236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 543.7736\r
+ 532.5827\r
+ 555.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER41': class LinkAnnotation \r
+47 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 178.6236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 525.7736\r
+ 160.5029\r
+ 537.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER42': class LinkAnnotation \r
+48 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 178.6236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 525.7736\r
+ 532.5827\r
+ 537.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER43': class LinkAnnotation \r
+49 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 507.7736\r
+ 139.3829\r
+ 519.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER44': class LinkAnnotation \r
+50 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 507.7736\r
+ 532.5827\r
+ 519.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER45': class LinkAnnotation \r
+51 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 648.0236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 489.7736\r
+ 158.8329\r
+ 501.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER46': class LinkAnnotation \r
+52 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 648.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 489.7736\r
+ 532.5827\r
+ 501.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER47': class LinkAnnotation \r
+53 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 579.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 471.7736\r
+ 208.8629\r
+ 483.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER48': class LinkAnnotation \r
+54 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 579.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 471.7736\r
+ 532.5827\r
+ 483.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER49': class LinkAnnotation \r
+55 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 435.0236\r
+ 0 ]\r
+ /Rect [ 102.6929\r
+ 453.7736\r
+ 213.8529\r
+ 465.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER50': class LinkAnnotation \r
+56 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 435.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 453.7736\r
+ 532.5827\r
+ 465.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'F5': class PDFType1Font \r
+57 0 obj\r
+% Font Courier\r
+<< /BaseFont /Courier\r
+ /Encoding /WinAnsiEncoding\r
+ /Name /F5\r
+ /Subtype /Type1\r
+ /Type /Font >>\r
+endobj\r
+% 'Annot.NUMBER51': class LinkAnnotation \r
+58 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 165.6236\r
+ 0 ]\r
+ /Rect [ 122.6929\r
+ 435.7736\r
+ 164.3929\r
+ 447.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER52': class LinkAnnotation \r
+59 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 165.6236\r
+ 0 ]\r
+ /Rect [ 164.3929\r
+ 435.7736\r
+ 218.3929\r
+ 447.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER53': class LinkAnnotation \r
+60 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 165.6236\r
+ 0 ]\r
+ /Rect [ 218.3929\r
+ 435.7736\r
+ 263.9729\r
+ 447.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER54': class LinkAnnotation \r
+61 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 165.6236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 435.7736\r
+ 532.5827\r
+ 447.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER55': class LinkAnnotation \r
+62 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 111.6236\r
+ 0 ]\r
+ /Rect [ 122.6929\r
+ 417.7736\r
+ 273.3229\r
+ 429.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER56': class LinkAnnotation \r
+63 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 111.6236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 417.7736\r
+ 532.5827\r
+ 429.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER57': class LinkAnnotation \r
+64 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 672.0236\r
+ 0 ]\r
+ /Rect [ 122.6929\r
+ 399.7736\r
+ 228.3129\r
+ 411.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER58': class LinkAnnotation \r
+65 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 672.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 399.7736\r
+ 532.5827\r
+ 411.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER59': class LinkAnnotation \r
+66 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 558.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 381.7736\r
+ 222.7429\r
+ 393.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER60': class LinkAnnotation \r
+67 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 558.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 381.7736\r
+ 532.5827\r
+ 393.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER61': class LinkAnnotation \r
+68 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 390.0236\r
+ 0 ]\r
+ /Rect [ 102.6929\r
+ 363.7736\r
+ 237.7629\r
+ 375.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER62': class LinkAnnotation \r
+69 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 390.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 363.7736\r
+ 532.5827\r
+ 375.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER63': class LinkAnnotation \r
+70 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 129.8236\r
+ 0 ]\r
+ /Rect [ 122.6929\r
+ 345.7736\r
+ 164.3929\r
+ 357.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER64': class LinkAnnotation \r
+71 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 129.8236\r
+ 0 ]\r
+ /Rect [ 164.3929\r
+ 345.7736\r
+ 206.3929\r
+ 357.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER65': class LinkAnnotation \r
+72 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 129.8236\r
+ 0 ]\r
+ /Rect [ 206.3929\r
+ 345.7736\r
+ 251.9729\r
+ 357.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER66': class LinkAnnotation \r
+73 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 129.8236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 345.7736\r
+ 532.5827\r
+ 357.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER67': class LinkAnnotation \r
+74 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 633.0236\r
+ 0 ]\r
+ /Rect [ 122.6929\r
+ 327.7736\r
+ 228.3129\r
+ 339.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER68': class LinkAnnotation \r
+75 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 633.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 327.7736\r
+ 532.5827\r
+ 339.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER69': class LinkAnnotation \r
+76 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 537.0236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 309.7736\r
+ 127.7229\r
+ 321.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER70': class LinkAnnotation \r
+77 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 537.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 309.7736\r
+ 532.5827\r
+ 321.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER71': class LinkAnnotation \r
+78 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 504.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 291.7736\r
+ 107.7129\r
+ 303.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER72': class LinkAnnotation \r
+79 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 504.0236\r
+ 0 ]\r
+ /Rect [ 107.7129\r
+ 291.7736\r
+ 167.7129\r
+ 303.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER73': class LinkAnnotation \r
+80 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 504.0236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 291.7736\r
+ 532.5827\r
+ 303.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER74': class LinkAnnotation \r
+81 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 286.8236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 273.7736\r
+ 107.7129\r
+ 285.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER75': class LinkAnnotation \r
+82 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 286.8236\r
+ 0 ]\r
+ /Rect [ 107.7129\r
+ 273.7736\r
+ 173.7129\r
+ 285.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER76': class LinkAnnotation \r
+83 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 286.8236\r
+ 0 ]\r
+ /Rect [ 527.0227\r
+ 273.7736\r
+ 532.5827\r
+ 285.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER77': class LinkAnnotation \r
+84 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 255.7736\r
+ 107.7129\r
+ 267.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER78': class LinkAnnotation \r
+85 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 107.7129\r
+ 255.7736\r
+ 173.7129\r
+ 267.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER79': class LinkAnnotation \r
+86 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Rect [ 521.4627\r
+ 255.7736\r
+ 532.5827\r
+ 267.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER80': class LinkAnnotation \r
+87 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 463.8236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 237.7736\r
+ 107.7129\r
+ 249.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER81': class LinkAnnotation \r
+88 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 463.8236\r
+ 0 ]\r
+ /Rect [ 107.7129\r
+ 237.7736\r
+ 179.7129\r
+ 249.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER82': class LinkAnnotation \r
+89 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 463.8236\r
+ 0 ]\r
+ /Rect [ 521.4627\r
+ 237.7736\r
+ 532.5827\r
+ 249.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER83': class LinkAnnotation \r
+90 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 162.6236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 219.7736\r
+ 108.2529\r
+ 231.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER84': class LinkAnnotation \r
+91 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 162.6236\r
+ 0 ]\r
+ /Rect [ 521.4627\r
+ 219.7736\r
+ 532.5827\r
+ 231.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER85': class PDFDictionary \r
+92 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://proj.llucax.com.ar/home/mutest/releases/mutest.tar.gz) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 126.6129\r
+ 165.7736\r
+ 234.4329\r
+ 177.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER86': class PDFDictionary \r
+93 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://proj.llucax.com.ar/home/mutest/releases/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 273.0328\r
+ 147.7736\r
+ 357.2828\r
+ 159.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER87': class PDFDictionary \r
+94 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://git.or.cz/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 425.2127\r
+ 147.7736\r
+ 442.0527\r
+ 159.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER88': class PDFDictionary \r
+95 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://git.llucax.com.ar/w/software/mutest.git) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 519.8027\r
+ 147.7736\r
+ 531.3027\r
+ 159.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER89': class PDFDictionary \r
+96 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://git.llucax.com.ar/w/software/mutest.git) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 135.7736\r
+ 106.5929\r
+ 147.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER90': class PDFDictionary \r
+97 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://proj.llucax.com.ar/home/mutest/manual.html) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 118.8429\r
+ 117.7736\r
+ 172.7529\r
+ 129.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER91': class PDFDictionary \r
+98 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://proj.llucax.com.ar/home/mutest/manual.pdf) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 212.2229\r
+ 117.7736\r
+ 270.0129\r
+ 129.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page2': class PDFPage \r
+99 0 obj\r
+% Page dictionary\r
+<< /Annots [ 25 0 R\r
+ 26 0 R\r
+ 27 0 R\r
+ 28 0 R\r
+ 29 0 R\r
+ 30 0 R\r
+ 31 0 R\r
+ 32 0 R\r
+ 33 0 R\r
+ 34 0 R\r
+ 35 0 R\r
+ 36 0 R\r
+ 37 0 R\r
+ 38 0 R\r
+ 39 0 R\r
+ 40 0 R\r
+ 41 0 R\r
+ 42 0 R\r
+ 43 0 R\r
+ 44 0 R\r
+ 45 0 R\r
+ 46 0 R\r
+ 47 0 R\r
+ 48 0 R\r
+ 49 0 R\r
+ 50 0 R\r
+ 51 0 R\r
+ 52 0 R\r
+ 53 0 R\r
+ 54 0 R\r
+ 55 0 R\r
+ 56 0 R\r
+ 58 0 R\r
+ 59 0 R\r
+ 60 0 R\r
+ 61 0 R\r
+ 62 0 R\r
+ 63 0 R\r
+ 64 0 R\r
+ 65 0 R\r
+ 66 0 R\r
+ 67 0 R\r
+ 68 0 R\r
+ 69 0 R\r
+ 70 0 R\r
+ 71 0 R\r
+ 72 0 R\r
+ 73 0 R\r
+ 74 0 R\r
+ 75 0 R\r
+ 76 0 R\r
+ 77 0 R\r
+ 78 0 R\r
+ 79 0 R\r
+ 80 0 R\r
+ 81 0 R\r
+ 82 0 R\r
+ 83 0 R\r
+ 84 0 R\r
+ 85 0 R\r
+ 86 0 R\r
+ 87 0 R\r
+ 88 0 R\r
+ 89 0 R\r
+ 90 0 R\r
+ 91 0 R\r
+ 92 0 R\r
+ 93 0 R\r
+ 94 0 R\r
+ 95 0 R\r
+ 96 0 R\r
+ 97 0 R\r
+ 98 0 R ]\r
+ /Contents 256 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Annot.NUMBER92': class LinkAnnotation \r
+100 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 651.5236\r
+ 0 ]\r
+ /Rect [ 243.4995\r
+ 584.1736\r
+ 311.2995\r
+ 596.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER93': class PDFDictionary \r
+101 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://git.llucax.com.ar/w/software/mutest.git?a=tree;f=sample;h=d8ad4dd9c3428fef5963107c82ab6a5e34ec6e00;hb=HEAD) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 215.5429\r
+ 521.1736\r
+ 250.5529\r
+ 533.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER94': class LinkAnnotation \r
+102 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 108 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 463.4236\r
+ 0 ]\r
+ /Rect [ 342.9128\r
+ 503.1736\r
+ 389.4027\r
+ 515.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER95': class LinkAnnotation \r
+103 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 491.6427\r
+ 503.1736\r
+ 531.6627\r
+ 515.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER96': class LinkAnnotation \r
+104 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 109 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 66.02291\r
+ 491.1736\r
+ 130.4929\r
+ 503.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER97': class LinkAnnotation \r
+105 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.5236\r
+ 0 ]\r
+ /Rect [ 148.2929\r
+ 473.1736\r
+ 206.1029\r
+ 485.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER98': class LinkAnnotation \r
+106 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 233.3429\r
+ 473.1736\r
+ 316.7229\r
+ 485.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER99': class LinkAnnotation \r
+107 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 319.5029\r
+ 473.1736\r
+ 359.5229\r
+ 485.1736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page3': class PDFPage \r
+108 0 obj\r
+% Page dictionary\r
+<< /Annots [ 100 0 R\r
+ 101 0 R\r
+ 102 0 R\r
+ 103 0 R\r
+ 104 0 R\r
+ 105 0 R\r
+ 106 0 R\r
+ 107 0 R ]\r
+ /Contents 257 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Page4': class PDFPage \r
+109 0 obj\r
+% Page dictionary\r
+<< /Contents 258 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Annot.NUMBER100': class LinkAnnotation \r
+110 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 221.7262\r
+ 231.5736\r
+ 278.3317\r
+ 243.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER101': class LinkAnnotation \r
+111 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 284.3673\r
+ 231.5736\r
+ 324.8628\r
+ 243.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER102': class LinkAnnotation \r
+112 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 330.8983\r
+ 231.5736\r
+ 374.6494\r
+ 243.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER103': class LinkAnnotation \r
+113 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 394.585\r
+ 231.5736\r
+ 425.705\r
+ 243.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER104': class LinkAnnotation \r
+114 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 145.5029\r
+ 219.5736\r
+ 185.5229\r
+ 231.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER105': class LinkAnnotation \r
+115 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 188.3029\r
+ 219.5736\r
+ 242.7629\r
+ 231.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER106': class LinkAnnotation \r
+116 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 181.6236\r
+ 0 ]\r
+ /Rect [ 262.2229\r
+ 219.5736\r
+ 314.4629\r
+ 231.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER107': class LinkAnnotation \r
+117 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 651.5236\r
+ 0 ]\r
+ /Rect [ 197.8378\r
+ 147.5736\r
+ 273.4328\r
+ 159.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER108': class LinkAnnotation \r
+118 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 651.5236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 105.5736\r
+ 133.2729\r
+ 117.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page5': class PDFPage \r
+119 0 obj\r
+% Page dictionary\r
+<< /Annots [ 110 0 R\r
+ 111 0 R\r
+ 112 0 R\r
+ 113 0 R\r
+ 114 0 R\r
+ 115 0 R\r
+ 116 0 R\r
+ 117 0 R\r
+ 118 0 R ]\r
+ /Contents 259 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Annot.NUMBER109': class LinkAnnotation \r
+120 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 106.454\r
+ 717.7736\r
+ 153.6195\r
+ 729.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER110': class LinkAnnotation \r
+121 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 651.5236\r
+ 0 ]\r
+ /Rect [ 435.7486\r
+ 705.7736\r
+ 503.5486\r
+ 717.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER111': class LinkAnnotation \r
+122 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 213.5022\r
+ 693.7736\r
+ 261.9187\r
+ 705.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER112': class LinkAnnotation \r
+123 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 480.9027\r
+ 693.7736\r
+ 532.2745\r
+ 705.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER113': class LinkAnnotation \r
+124 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 181.6236\r
+ 0 ]\r
+ /Rect [ 82.15291\r
+ 681.7736\r
+ 134.3929\r
+ 693.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER114': class LinkAnnotation \r
+125 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 203.4134\r
+ 663.7736\r
+ 262.3493\r
+ 675.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER115': class LinkAnnotation \r
+126 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 276.8122\r
+ 663.7736\r
+ 324.638\r
+ 675.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER116': class LinkAnnotation \r
+127 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 344.111\r
+ 663.7736\r
+ 398.5839\r
+ 675.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER117': class LinkAnnotation \r
+128 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 181.6236\r
+ 0 ]\r
+ /Rect [ 418.0568\r
+ 663.7736\r
+ 470.3097\r
+ 675.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER118': class LinkAnnotation \r
+129 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 197.9404\r
+ 633.7736\r
+ 246.4823\r
+ 645.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER119': class LinkAnnotation \r
+130 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 403.6499\r
+ 633.7736\r
+ 458.4808\r
+ 645.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER120': class LinkAnnotation \r
+131 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 276.5178\r
+ 508.5736\r
+ 307.6378\r
+ 520.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER121': class LinkAnnotation \r
+132 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 651.5236\r
+ 0 ]\r
+ /Rect [ 169.9729\r
+ 478.5736\r
+ 237.7729\r
+ 490.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER122': class LinkAnnotation \r
+133 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 192.2605\r
+ 430.5736\r
+ 235.0875\r
+ 442.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER123': class LinkAnnotation \r
+134 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 448.9277\r
+ 418.5736\r
+ 491.9177\r
+ 430.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER124': class LinkAnnotation \r
+135 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 153.3029\r
+ 406.5736\r
+ 196.1029\r
+ 418.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER125': class LinkAnnotation \r
+136 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.5236\r
+ 0 ]\r
+ /Rect [ 109.3076\r
+ 388.5736\r
+ 167.6023\r
+ 400.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER126': class LinkAnnotation \r
+137 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 540.5236\r
+ 0 ]\r
+ /Rect [ 181.1029\r
+ 358.5736\r
+ 226.1229\r
+ 370.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER127': class LinkAnnotation \r
+138 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 396.7492\r
+ 310.5736\r
+ 446.4704\r
+ 322.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER128': class LinkAnnotation \r
+139 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 467.2915\r
+ 310.5736\r
+ 508.2721\r
+ 322.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER129': class LinkAnnotation \r
+140 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 205.5656\r
+ 280.5736\r
+ 246.9262\r
+ 292.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER130': class LinkAnnotation \r
+141 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 286.2378\r
+ 203.3736\r
+ 326.5113\r
+ 215.3736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER131': class LinkAnnotation \r
+142 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 651.5236\r
+ 0 ]\r
+ /Rect [ 357.292\r
+ 203.3736\r
+ 425.092\r
+ 215.3736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER132': class LinkAnnotation \r
+143 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 265.0029\r
+ 191.3736\r
+ 307.8029\r
+ 203.3736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER133': class LinkAnnotation \r
+144 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 225.6293\r
+ 143.3736\r
+ 280.4485\r
+ 155.3736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER134': class LinkAnnotation \r
+145 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 461.8341\r
+ 143.3736\r
+ 507.2134\r
+ 155.3736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page6': class PDFPage \r
+146 0 obj\r
+% Page dictionary\r
+<< /Annots [ 120 0 R\r
+ 121 0 R\r
+ 122 0 R\r
+ 123 0 R\r
+ 124 0 R\r
+ 125 0 R\r
+ 126 0 R\r
+ 127 0 R\r
+ 128 0 R\r
+ 129 0 R\r
+ 130 0 R\r
+ 131 0 R\r
+ 132 0 R\r
+ 133 0 R\r
+ 134 0 R\r
+ 135 0 R\r
+ 136 0 R\r
+ 137 0 R\r
+ 138 0 R\r
+ 139 0 R\r
+ 140 0 R\r
+ 141 0 R\r
+ 142 0 R\r
+ 143 0 R\r
+ 144 0 R\r
+ 145 0 R ]\r
+ /Contents 260 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Annot.NUMBER135': class PDFDictionary \r
+147 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://en.wikipedia.org/wiki/Name_mangling) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 440.1822\r
+ 726.7736\r
+ 512.5727\r
+ 738.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER136': class LinkAnnotation \r
+148 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 335.8999\r
+ 714.7736\r
+ 386.117\r
+ 726.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER137': class LinkAnnotation \r
+149 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 406.7856\r
+ 714.7736\r
+ 462.4541\r
+ 726.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER138': class LinkAnnotation \r
+150 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 181.6236\r
+ 0 ]\r
+ /Rect [ 483.1227\r
+ 714.7736\r
+ 531.3741\r
+ 726.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER139': class LinkAnnotation \r
+151 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 207.0629\r
+ 702.7736\r
+ 293.2229\r
+ 714.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER140': class LinkAnnotation \r
+152 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 684.7736\r
+ 99.19956\r
+ 696.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER141': class LinkAnnotation \r
+153 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 442.8794\r
+ 684.7736\r
+ 477.166\r
+ 696.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER142': class LinkAnnotation \r
+154 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 144.6382\r
+ 672.7736\r
+ 206.7667\r
+ 684.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER143': class LinkAnnotation \r
+155 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 466.8236\r
+ 0 ]\r
+ /Rect [ 227.7851\r
+ 672.7736\r
+ 290.0251\r
+ 684.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER144': class PDFDictionary \r
+156 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://www.digitalmars.com/d/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 82.83356\r
+ 531.7736\r
+ 207.0249\r
+ 543.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER145': class LinkAnnotation \r
+157 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 410.8127\r
+ 501.7736\r
+ 472.2477\r
+ 513.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER146': class LinkAnnotation \r
+158 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 231.6829\r
+ 489.7736\r
+ 279.4829\r
+ 501.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER147': class LinkAnnotation \r
+159 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 201.0699\r
+ 471.7736\r
+ 249.7487\r
+ 483.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER148': class LinkAnnotation \r
+160 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 516.4627\r
+ 459.7736\r
+ 532.0268\r
+ 471.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER149': class LinkAnnotation \r
+161 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 447.7736\r
+ 83.81291\r
+ 459.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER150': class LinkAnnotation \r
+162 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 89.37291\r
+ 447.7736\r
+ 143.8329\r
+ 459.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER151': class LinkAnnotation \r
+163 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 181.6236\r
+ 0 ]\r
+ /Rect [ 163.2929\r
+ 447.7736\r
+ 215.5329\r
+ 459.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER152': class LinkAnnotation \r
+164 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 438.4329\r
+ 447.7736\r
+ 494.5629\r
+ 459.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER153': class LinkAnnotation \r
+165 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 114.6935\r
+ 390.7736\r
+ 172.2204\r
+ 402.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER154': class LinkAnnotation \r
+166 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 516.4627\r
+ 390.7736\r
+ 531.1858\r
+ 402.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER155': class LinkAnnotation \r
+167 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 378.7736\r
+ 99.92291\r
+ 390.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER156': class LinkAnnotation \r
+168 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 268.4329\r
+ 378.7736\r
+ 316.2329\r
+ 390.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER157': class LinkAnnotation \r
+169 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 295.2208\r
+ 342.7736\r
+ 341.6568\r
+ 354.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER158': class LinkAnnotation \r
+170 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 159.9729\r
+ 211.5736\r
+ 218.8829\r
+ 223.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'F6': class PDFType1Font \r
+171 0 obj\r
+% Font Courier-BoldOblique\r
+<< /BaseFont /Courier-BoldOblique\r
+ /Encoding /WinAnsiEncoding\r
+ /Name /F6\r
+ /Subtype /Type1\r
+ /Type /Font >>\r
+endobj\r
+% 'Annot.NUMBER159': class LinkAnnotation \r
+172 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 312.2529\r
+ 124.3736\r
+ 357.2729\r
+ 136.3736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page7': class PDFPage \r
+173 0 obj\r
+% Page dictionary\r
+<< /Annots [ 147 0 R\r
+ 148 0 R\r
+ 149 0 R\r
+ 150 0 R\r
+ 151 0 R\r
+ 152 0 R\r
+ 153 0 R\r
+ 154 0 R\r
+ 155 0 R\r
+ 156 0 R\r
+ 157 0 R\r
+ 158 0 R\r
+ 159 0 R\r
+ 160 0 R\r
+ 161 0 R\r
+ 162 0 R\r
+ 163 0 R\r
+ 164 0 R\r
+ 165 0 R\r
+ 166 0 R\r
+ 167 0 R\r
+ 168 0 R\r
+ 169 0 R\r
+ 170 0 R\r
+ 172 0 R ]\r
+ /Contents 261 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'F7': class PDFType1Font \r
+174 0 obj\r
+% Font Courier-Bold\r
+<< /BaseFont /Courier-Bold\r
+ /Encoding /WinAnsiEncoding\r
+ /Name /F7\r
+ /Subtype /Type1\r
+ /Type /Font >>\r
+endobj\r
+% 'Annot.NUMBER160': class LinkAnnotation \r
+175 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 215.6962\r
+ 720.7736\r
+ 249.9917\r
+ 732.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER161': class LinkAnnotation \r
+176 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 516.4627\r
+ 720.7736\r
+ 532.1871\r
+ 732.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER162': class LinkAnnotation \r
+177 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 708.7736\r
+ 108.8129\r
+ 720.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER163': class LinkAnnotation \r
+178 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 115.0634\r
+ 708.7736\r
+ 164.2445\r
+ 720.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER164': class LinkAnnotation \r
+179 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 184.395\r
+ 708.7736\r
+ 218.9855\r
+ 720.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER165': class LinkAnnotation \r
+180 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 491.8722\r
+ 708.7736\r
+ 531.8922\r
+ 720.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER166': class LinkAnnotation \r
+181 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 324.7428\r
+ 696.7736\r
+ 364.8628\r
+ 708.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER167': class LinkAnnotation \r
+182 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 468.8236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 684.7736\r
+ 108.8129\r
+ 696.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER168': class PDFDictionary \r
+183 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://www.gnu.org/software/binutils/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 189.8229\r
+ 585.7736\r
+ 247.0529\r
+ 597.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER169': class PDFDictionary \r
+184 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://www.gnu.org/software/bash/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 105.7029\r
+ 567.7736\r
+ 156.2729\r
+ 579.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER170': class LinkAnnotation \r
+185 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 309.4145\r
+ 510.7736\r
+ 362.5369\r
+ 522.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER171': class LinkAnnotation \r
+186 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 142.7329\r
+ 498.7736\r
+ 190.5329\r
+ 510.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER172': class LinkAnnotation \r
+187 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 124.4966\r
+ 468.7736\r
+ 186.8404\r
+ 480.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER173': class LinkAnnotation \r
+188 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 286.4609\r
+ 468.7736\r
+ 337.6947\r
+ 480.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER174': class LinkAnnotation \r
+189 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 516.4627\r
+ 468.7736\r
+ 530.8658\r
+ 480.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER175': class LinkAnnotation \r
+190 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 62.69291\r
+ 456.7736\r
+ 91.8309\r
+ 468.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER176': class LinkAnnotation \r
+191 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 362.6707\r
+ 456.7736\r
+ 402.9287\r
+ 468.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER177': class LinkAnnotation \r
+192 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 348.8236\r
+ 0 ]\r
+ /Rect [ 408.7267\r
+ 456.7736\r
+ 463.4247\r
+ 468.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER178': class LinkAnnotation \r
+193 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 181.6236\r
+ 0 ]\r
+ /Rect [ 483.1227\r
+ 456.7736\r
+ 532.3447\r
+ 468.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER179': class LinkAnnotation \r
+194 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 327.7961\r
+ 444.7736\r
+ 372.9505\r
+ 456.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER180': class LinkAnnotation \r
+195 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 419.3594\r
+ 444.7736\r
+ 467.4282\r
+ 456.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER181': class LinkAnnotation \r
+196 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 437.5236\r
+ 0 ]\r
+ /Rect [ 334.6208\r
+ 357.7736\r
+ 413.9194\r
+ 369.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER182': class LinkAnnotation \r
+197 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 209.8236\r
+ 0 ]\r
+ /Rect [ 108.9742\r
+ 345.7736\r
+ 169.7869\r
+ 357.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER183': class PDFDictionary \r
+198 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://www.python.org/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 214.4795\r
+ 345.7736\r
+ 249.3408\r
+ 357.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER184': class PDFDictionary \r
+199 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://docs.python.org/library/ctypes.html) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 276.9721\r
+ 345.7736\r
+ 309.6035\r
+ 357.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER185': class LinkAnnotation \r
+200 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 205.6329\r
+ 333.7736\r
+ 253.4329\r
+ 345.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER186': class LinkAnnotation \r
+201 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 241.6229\r
+ 303.7736\r
+ 289.4229\r
+ 315.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER187': class LinkAnnotation \r
+202 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 437.5236\r
+ 0 ]\r
+ /Rect [ 115.7408\r
+ 285.7736\r
+ 193.9934\r
+ 297.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER188': class LinkAnnotation \r
+203 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 437.5236\r
+ 0 ]\r
+ /Rect [ 249.9341\r
+ 255.7736\r
+ 329.3128\r
+ 267.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER189': class LinkAnnotation \r
+204 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 436.1365\r
+ 255.7736\r
+ 487.0939\r
+ 267.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER190': class LinkAnnotation \r
+205 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 175.9009\r
+ 100.5736\r
+ 226.7128\r
+ 112.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER191': class LinkAnnotation \r
+206 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 113.6236\r
+ 0 ]\r
+ /Rect [ 127.7329\r
+ 88.57362\r
+ 274.1329\r
+ 100.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page8': class PDFPage \r
+207 0 obj\r
+% Page dictionary\r
+<< /Annots [ 175 0 R\r
+ 176 0 R\r
+ 177 0 R\r
+ 178 0 R\r
+ 179 0 R\r
+ 180 0 R\r
+ 181 0 R\r
+ 182 0 R\r
+ 183 0 R\r
+ 184 0 R\r
+ 185 0 R\r
+ 186 0 R\r
+ 187 0 R\r
+ 188 0 R\r
+ 189 0 R\r
+ 190 0 R\r
+ 191 0 R\r
+ 192 0 R\r
+ 193 0 R\r
+ 194 0 R\r
+ 195 0 R\r
+ 196 0 R\r
+ 197 0 R\r
+ 198 0 R\r
+ 199 0 R\r
+ 200 0 R\r
+ 201 0 R\r
+ 202 0 R\r
+ 203 0 R\r
+ 204 0 R\r
+ 205 0 R\r
+ 206 0 R ]\r
+ /Contents 262 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Annot.NUMBER192': class LinkAnnotation \r
+208 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 131.6029\r
+ 676.7736\r
+ 179.4029\r
+ 688.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER193': class LinkAnnotation \r
+209 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 426.1829\r
+ 676.7736\r
+ 473.9829\r
+ 688.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER194': class LinkAnnotation \r
+210 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 437.5236\r
+ 0 ]\r
+ /Rect [ 114.3829\r
+ 603.7736\r
+ 192.1829\r
+ 615.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER195': class PDFDictionary \r
+211 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://www.python.org/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 85.69291\r
+ 582.7736\r
+ 119.6029\r
+ 594.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER196': class PDFDictionary \r
+212 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://www.gnu.org/software/binutils/) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 189.8229\r
+ 564.7736\r
+ 247.0529\r
+ 576.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER197': class LinkAnnotation \r
+213 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 768.0236\r
+ 0 ]\r
+ /Rect [ 252.2129\r
+ 549.7736\r
+ 300.0129\r
+ 561.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER198': class LinkAnnotation \r
+214 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 375.4829\r
+ 422.7736\r
+ 418.2829\r
+ 434.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER199': class LinkAnnotation \r
+215 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 352.1429\r
+ 205.5736\r
+ 394.9429\r
+ 217.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page9': class PDFPage \r
+216 0 obj\r
+% Page dictionary\r
+<< /Annots [ 208 0 R\r
+ 209 0 R\r
+ 210 0 R\r
+ 211 0 R\r
+ 212 0 R\r
+ 213 0 R\r
+ 214 0 R\r
+ 215 0 R ]\r
+ /Contents 263 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'Annot.NUMBER200': class LinkAnnotation \r
+217 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 671.7736\r
+ 125.4929\r
+ 683.7736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER201': class LinkAnnotation \r
+218 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 516.4627\r
+ 382.5736\r
+ 530.8327\r
+ 394.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER202': class LinkAnnotation \r
+219 0 obj\r
+<< /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Contents ()\r
+ /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 612.0236\r
+ 0 ]\r
+ /Rect [ 82.69291\r
+ 370.5736\r
+ 106.5929\r
+ 382.5736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Annot.NUMBER203': class PDFDictionary \r
+220 0 obj\r
+<< /A << /S /URI\r
+ /Type /Action\r
+ /URI (http://docutils.sourceforge.net/rst.html) >>\r
+ /Border [ 0\r
+ 0\r
+ 0 ]\r
+ /Rect [ 199.4029\r
+ 124.3736\r
+ 273.8729\r
+ 136.3736 ]\r
+ /Subtype /Link\r
+ /Type /Annot >>\r
+endobj\r
+% 'Page10': class PDFPage \r
+221 0 obj\r
+% Page dictionary\r
+<< /Annots [ 217 0 R\r
+ 218 0 R\r
+ 219 0 R\r
+ 220 0 R ]\r
+ /Contents 264 0 R\r
+ /MediaBox [ 0\r
+ 0\r
+ 595.2756\r
+ 841.8898 ]\r
+ /Parent 254 0 R\r
+ /Resources << /Font 1 0 R\r
+ /ProcSet [ /PDF\r
+ /Text\r
+ /ImageB\r
+ /ImageC\r
+ /ImageI ] >>\r
+ /Rotate 0\r
+ /Trans <<  >>\r
+ /Type /Page >>\r
+endobj\r
+% 'R222': class PDFCatalog \r
+222 0 obj\r
+% Document Root\r
+<< /Outlines 224 0 R\r
+ /PageLabels 265 0 R\r
+ /PageMode /UseNone\r
+ /Pages 254 0 R\r
+ /Type /Catalog >>\r
+endobj\r
+% 'R223': class PDFInfo \r
+223 0 obj\r
+<< /Author (Leandro Lucarella)\r
+ /CreationDate (D:20130217192608-01'00')\r
+ /Creator (\(unspecified\))\r
+ /Keywords ()\r
+ /Producer (ReportLab PDF Library - www.reportlab.com)\r
+ /Subject (\(unspecified\))\r
+ /Title (mutest - A simple micro unit testing framework for C) >>\r
+endobj\r
+% 'R224': class PDFOutlines \r
+224 0 obj\r
+<< /Count 37\r
+ /First 225 0 R\r
+ /Last 253 0 R\r
+ /Type /Outlines >>\r
+endobj\r
+% 'Outline.0': class OutlineEntryObject \r
+225 0 obj\r
+<< /Dest [ 99 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 204.0236\r
+ 0 ]\r
+ /Next 226 0 R\r
+ /Parent 224 0 R\r
+ /Title (\376\377\0001\000.\000\240\000\240\000\240\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.1': class OutlineEntryObject \r
+226 0 obj\r
+<< /Count 3\r
+ /Dest [ 108 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 559.4236\r
+ 0 ]\r
+ /First 227 0 R\r
+ /Last 229 0 R\r
+ /Next 230 0 R\r
+ /Parent 224 0 R\r
+ /Prev 225 0 R\r
+ /Title (\376\377\0002\000.\000\240\000\240\000\240\000Q\000u\000i\000c\000k\000 \000S\000a\000m\000p\000l\000e) >>\r
+endobj\r
+% 'Outline.30.0': class OutlineEntryObject \r
+227 0 obj\r
+<< /Dest [ 108 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 460.4236\r
+ 0 ]\r
+ /Next 228 0 R\r
+ /Parent 226 0 R\r
+ /Title (\376\377\0002\000.\0001\000.\000\240\000\240\000\240\000f\000a\000c\000t\000o\000r\000i\000a\000l\000.\000c) >>\r
+endobj\r
+% 'Outline.30.1': class OutlineEntryObject \r
+228 0 obj\r
+<< /Dest [ 109 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Next 229 0 R\r
+ /Parent 226 0 R\r
+ /Prev 227 0 R\r
+ /Title (\376\377\0002\000.\0002\000.\000\240\000\240\000\240\000f\000a\000c\000t\000o\000r\000i\000a\000l\000_\000t\000e\000s\000t\000.\000c) >>\r
+endobj\r
+% 'Outline.30.2': class OutlineEntryObject \r
+229 0 obj\r
+<< /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Parent 226 0 R\r
+ /Prev 228 0 R\r
+ /Title (\376\377\0002\000.\0003\000.\000\240\000\240\000\240\000e\000x\000c\000e\000p\000t\000i\000o\000n\000_\000t\000e\000s\000t\000.\000c\000p\000p) >>\r
+endobj\r
+% 'Outline.2': class OutlineEntryObject \r
+230 0 obj\r
+<< /Count 6\r
+ /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 269.8236\r
+ 0 ]\r
+ /First 231 0 R\r
+ /Last 236 0 R\r
+ /Next 237 0 R\r
+ /Parent 224 0 R\r
+ /Prev 226 0 R\r
+ /Title (\376\377\0003\000.\000\240\000\240\000\240\000C\000o\000n\000c\000e\000p\000t\000s) >>\r
+endobj\r
+% 'Outline.31.0': class OutlineEntryObject \r
+231 0 obj\r
+<< /Dest [ 119 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 206.8236\r
+ 0 ]\r
+ /Next 232 0 R\r
+ /Parent 230 0 R\r
+ /Title (\376\377\0003\000.\0001\000.\000\240\000\240\000\240\000T\000e\000s\000t\000 \000P\000r\000o\000g\000r\000a\000m) >>\r
+endobj\r
+% 'Outline.31.1': class OutlineEntryObject \r
+232 0 obj\r
+<< /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Next 233 0 R\r
+ /Parent 230 0 R\r
+ /Prev 231 0 R\r
+ /Title (\376\377\0003\000.\0002\000.\000\240\000\240\000\240\000T\000e\000s\000t\000 \000S\000u\000i\000t\000e) >>\r
+endobj\r
+% 'Outline.31.2': class OutlineEntryObject \r
+233 0 obj\r
+<< /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 609.0236\r
+ 0 ]\r
+ /Next 234 0 R\r
+ /Parent 230 0 R\r
+ /Prev 232 0 R\r
+ /Title (\376\377\0003\000.\0003\000.\000\240\000\240\000\240\000T\000e\000s\000t\000 \000C\000a\000s\000e) >>\r
+endobj\r
+% 'Outline.31.3': class OutlineEntryObject \r
+234 0 obj\r
+<< /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 465.8236\r
+ 0 ]\r
+ /Next 235 0 R\r
+ /Parent 230 0 R\r
+ /Prev 233 0 R\r
+ /Title (\376\377\0003\000.\0004\000.\000\240\000\240\000\240\000C\000h\000e\000c\000k\000s) >>\r
+endobj\r
+% 'Outline.31.4': class OutlineEntryObject \r
+235 0 obj\r
+<< /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 345.8236\r
+ 0 ]\r
+ /Next 236 0 R\r
+ /Parent 230 0 R\r
+ /Prev 234 0 R\r
+ /Title (\376\377\0003\000.\0005\000.\000\240\000\240\000\240\000I\000n\000i\000t\000i\000a\000l\000i\000z\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.31.5': class OutlineEntryObject \r
+236 0 obj\r
+<< /Dest [ 146 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 178.6236\r
+ 0 ]\r
+ /Parent 230 0 R\r
+ /Prev 235 0 R\r
+ /Title (\376\377\0003\000.\0006\000.\000\240\000\240\000\240\000T\000e\000r\000m\000i\000n\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.3': class OutlineEntryObject \r
+237 0 obj\r
+<< /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Next 238 0 R\r
+ /Parent 224 0 R\r
+ /Prev 230 0 R\r
+ /Title (\376\377\0004\000.\000\240\000\240\000\240\000C\000+\000+\000 \000S\000u\000p\000p\000o\000r\000t) >>\r
+endobj\r
+% 'Outline.4': class OutlineEntryObject \r
+238 0 obj\r
+<< /Count 9\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 648.0236\r
+ 0 ]\r
+ /First 239 0 R\r
+ /Last 244 0 R\r
+ /Next 248 0 R\r
+ /Parent 224 0 R\r
+ /Prev 237 0 R\r
+ /Title (\376\377\0005\000.\000\240\000\240\000\240\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000s) >>\r
+endobj\r
+% 'Outline.32.0': class OutlineEntryObject \r
+239 0 obj\r
+<< /Count 4\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 579.0236\r
+ 0 ]\r
+ /First 240 0 R\r
+ /Last 240 0 R\r
+ /Next 244 0 R\r
+ /Parent 238 0 R\r
+ /Title (\376\377\0005\000.\0001\000.\000\240\000\240\000\240\000S\000t\000a\000t\000i\000c\000 \000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000s) >>\r
+endobj\r
+% 'Outline.33.0': class OutlineEntryObject \r
+240 0 obj\r
+<< /Count 3\r
+ /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 435.0236\r
+ 0 ]\r
+ /First 241 0 R\r
+ /Last 243 0 R\r
+ /Parent 239 0 R\r
+ /Title (\376\377\0005\000.\0001\000.\0001\000.\000\240\000\240\000\240\000C\000 \000i\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.34.0': class OutlineEntryObject \r
+241 0 obj\r
+<< /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 165.6236\r
+ 0 ]\r
+ /Next 242 0 R\r
+ /Parent 240 0 R\r
+ /Title (\376\377\0005\000.\0001\000.\0001\000.\0001\000.\000\240\000\240\000\240\000m\000k\000m\000u\000t\000e\000s\000t\000 \000I\000n\000v\000o\000c\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.34.1': class OutlineEntryObject \r
+242 0 obj\r
+<< /Dest [ 173 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 111.6236\r
+ 0 ]\r
+ /Next 243 0 R\r
+ /Parent 240 0 R\r
+ /Prev 241 0 R\r
+ /Title (\376\377\0005\000.\0001\000.\0001\000.\0002\000.\000\240\000\240\000\240\000T\000e\000s\000t\000 \000P\000r\000o\000g\000r\000a\000m\000 \000I\000n\000v\000o\000c\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.34.2': class OutlineEntryObject \r
+243 0 obj\r
+<< /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 672.0236\r
+ 0 ]\r
+ /Parent 240 0 R\r
+ /Prev 242 0 R\r
+ /Title (\376\377\0005\000.\0001\000.\0001\000.\0003\000.\000\240\000\240\000\240\000D\000e\000p\000e\000n\000d\000e\000n\000c\000i\000e\000s) >>\r
+endobj\r
+% 'Outline.32.1': class OutlineEntryObject \r
+244 0 obj\r
+<< /Count 3\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 558.0236\r
+ 0 ]\r
+ /First 245 0 R\r
+ /Last 245 0 R\r
+ /Parent 238 0 R\r
+ /Prev 239 0 R\r
+ /Title (\376\377\0005\000.\0002\000.\000\240\000\240\000\240\000D\000y\000n\000a\000m\000i\000c\000 \000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000s) >>\r
+endobj\r
+% 'Outline.35.0': class OutlineEntryObject \r
+245 0 obj\r
+<< /Count 2\r
+ /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 390.0236\r
+ 0 ]\r
+ /First 246 0 R\r
+ /Last 247 0 R\r
+ /Parent 244 0 R\r
+ /Title (\376\377\0005\000.\0002\000.\0001\000.\000\240\000\240\000\240\000P\000y\000t\000h\000o\000n\000 \000i\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.36.0': class OutlineEntryObject \r
+246 0 obj\r
+<< /Dest [ 207 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 129.8236\r
+ 0 ]\r
+ /Next 247 0 R\r
+ /Parent 245 0 R\r
+ /Title (\376\377\0005\000.\0002\000.\0001\000.\0001\000.\000\240\000\240\000\240\000m\000u\000t\000e\000s\000t\000 \000I\000n\000v\000o\000c\000a\000t\000i\000o\000n) >>\r
+endobj\r
+% 'Outline.36.1': class OutlineEntryObject \r
+247 0 obj\r
+<< /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 633.0236\r
+ 0 ]\r
+ /Parent 245 0 R\r
+ /Prev 246 0 R\r
+ /Title (\376\377\0005\000.\0002\000.\0001\000.\0002\000.\000\240\000\240\000\240\000D\000e\000p\000e\000n\000d\000e\000n\000c\000i\000e\000s) >>\r
+endobj\r
+% 'Outline.5': class OutlineEntryObject \r
+248 0 obj\r
+<< /Count 4\r
+ /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 537.0236\r
+ 0 ]\r
+ /First 249 0 R\r
+ /Last 252 0 R\r
+ /Next 253 0 R\r
+ /Parent 224 0 R\r
+ /Prev 238 0 R\r
+ /Title (\376\377\0006\000.\000\240\000\240\000\240\000R\000e\000f\000e\000r\000e\000n\000c\000e) >>\r
+endobj\r
+% 'Outline.37.0': class OutlineEntryObject \r
+249 0 obj\r
+<< /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 504.0236\r
+ 0 ]\r
+ /Next 250 0 R\r
+ /Parent 248 0 R\r
+ /Title (\376\377\0006\000.\0001\000.\000\240\000\240\000\240\000m\000u\000_\000c\000h\000e\000c\000k\000\(\000\)) >>\r
+endobj\r
+% 'Outline.37.1': class OutlineEntryObject \r
+250 0 obj\r
+<< /Dest [ 216 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 286.8236\r
+ 0 ]\r
+ /Next 251 0 R\r
+ /Parent 248 0 R\r
+ /Prev 249 0 R\r
+ /Title (\376\377\0006\000.\0002\000.\000\240\000\240\000\240\000m\000u\000_\000e\000n\000s\000u\000r\000e\000\(\000\)) >>\r
+endobj\r
+% 'Outline.37.2': class OutlineEntryObject \r
+251 0 obj\r
+<< /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 765.0236\r
+ 0 ]\r
+ /Next 252 0 R\r
+ /Parent 248 0 R\r
+ /Prev 250 0 R\r
+ /Title (\376\377\0006\000.\0003\000.\000\240\000\240\000\240\000m\000u\000_\000e\000c\000h\000e\000c\000k\000\(\000\)) >>\r
+endobj\r
+% 'Outline.37.3': class OutlineEntryObject \r
+252 0 obj\r
+<< /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 463.8236\r
+ 0 ]\r
+ /Parent 248 0 R\r
+ /Prev 251 0 R\r
+ /Title (\376\377\0006\000.\0004\000.\000\240\000\240\000\240\000m\000u\000_\000e\000e\000n\000s\000u\000r\000e\000\(\000\)) >>\r
+endobj\r
+% 'Outline.6': class OutlineEntryObject \r
+253 0 obj\r
+<< /Dest [ 221 0 R\r
+ /XYZ\r
+ 62.69291\r
+ 162.6236\r
+ 0 ]\r
+ /Parent 224 0 R\r
+ /Prev 248 0 R\r
+ /Title (\376\377\0007\000.\000\240\000\240\000\240\000A\000b\000o\000u\000t) >>\r
+endobj\r
+% 'R254': class PDFPages \r
+254 0 obj\r
+% page tree\r
+<< /Count 10\r
+ /Kids [ 24 0 R\r
+ 99 0 R\r
+ 108 0 R\r
+ 109 0 R\r
+ 119 0 R\r
+ 146 0 R\r
+ 173 0 R\r
+ 207 0 R\r
+ 216 0 R\r
+ 221 0 R ]\r
+ /Type /Pages >>\r
+endobj\r
+% 'R255': class PDFStream \r
+255 0 obj\r
+% page stream\r
+<< /Length 4021 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 717.0236 cm\r
+q\r
+BT 1 0 0 1 0 28 Tm 11.56488 0 Td 24 TL /F2 20 Tf 0 0 0 rg (mutest ) Tj /F3 20 Tf (- A simple micro unit testing framework) Tj T* 200.05 0 Td (for C) Tj T* -211.6149 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 692.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 36.93937 0 Td (Author:) Tj T* -36.93937 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 91.03937 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Leandro Lucarella) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 677.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 32.48937 0 Td (Contact:) Tj T* -32.48937 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 91.03937 3 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (llucax@gmail.com) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 662.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 33.02937 0 Td (Version:) Tj T* -33.02937 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 91.03937 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (1.0) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 647.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 48.03937 0 Td (Date:) Tj T* -48.03937 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 91.03937 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (2013-02-17) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 632.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 22.48937 0 Td (Copyright:) Tj T* -22.48937 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 91.03937 3 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Leandro Lucarella \(2008\), released under the ) Tj 0 0 .501961 rg (BOLA ) Tj 0 0 0 rg (license) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 605.0236 cm\r
+q\r
+BT 1 0 0 1 0 2.5 Tm 15 TL /F2 12.5 Tf 0 0 0 rg (Abstract) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 551.0236 cm\r
+q\r
+BT 1 0 0 1 0 38 Tm 12 TL /F4 10 Tf 0 0 0 rg (mutest ) Tj /F1 10 Tf (is a micro ) Tj 0 0 .501961 rg (unit testing ) Tj 0 0 0 rg (framework for C \(with some ) Tj 0 0 .501961 rg (C++ support) Tj 0 0 0 rg (\). It's mostly an idea \(it even comes) Tj T* (with 2 ) Tj 0 0 .501961 rg (implementations ) Tj 0 0 0 rg (of the idea!\) with the goal of being easy to use \(just write your ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (grouped) Tj T* (in ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (and you're set\) and so small and simple that you don't mind to copy the files to your project) Tj T* (and just use it \(i.e., no dependencies\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 503.0236 cm\r
+q\r
+BT 1 0 0 1 0 38 Tm 12 TL /F1 10 Tf 0 0 0 rg (The idea is simple: a source file is a ) Tj 0 0 .501961 rg (test suite) Tj 0 0 0 rg (, a function is a ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (\(special functions can be used for) Tj T* 0 0 .501961 rg (test suite) Tj 0 0 0 rg ( ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (termination) Tj 0 0 0 rg (\), which can can have several ) Tj 0 0 .501961 rg (checks) Tj 0 0 0 rg (. ) Tj 0 0 .501961 rg (Checks ) Tj 0 0 0 rg (comes in 2 flavors,) Tj T* (one that only prints an error, and one that terminates the current ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (too. A \(normally\) automated) Tj T* 0 0 .501961 rg (test program ) Tj 0 0 0 rg (run all the ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (and print some stats. It fails \(returns non-zero\) if any ) Tj 0 0 .501961 rg (test suite ) Tj 0 0 0 rg (fails.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 467.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm 12 TL /F1 10 Tf 0 0 0 rg (<) Tj (div style="width: 220px; height: 270px; float: right; margin-left: 1em; margin-top: 1em") Tj (> <) Tj (iframe) Tj T* (width="220" height="270" style="border: none; outline: none") Tj T* (src="http://tools.flattr.net/widgets/thing.html?thing=1141711") Tj (>) Tj (<) Tj (/iframe) Tj (> <) Tj (/div) Tj (>) Tj T* ET\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R256': class PDFStream \r
+256 0 obj\r
+% page stream\r
+<< /Length 8831 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 744.0236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (Contents) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 216.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 0 507 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 .501961 rg (1.   Installation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 507 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 66.44 0 Td (2) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 489 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 .501961 rg (2.   Quick Sample) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 489 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 471 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (2.1.   factorial.c) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 471 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 453 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (2.2.   factorial_test.c) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 453 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (4) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 435 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (2.3.   exception_test.cpp) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 435 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 417 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 .501961 rg (3.   Concepts) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 417 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 399 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.1.   Test Program) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 399 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 381 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.2.   Test Suite) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 381 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 363 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.3.   Test Case) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 363 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 345 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.4.   Checks) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 345 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 327 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.5.   Initialization) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 327 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 309 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (3.6.   Termination) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 309 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 291 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 .501961 rg (4.   C++ Support) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 291 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 273 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 .501961 rg (5.   Implementations) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 273 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 255 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1.   Static Implementations) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 255 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 237 cm\r
+q\r
+BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1.1.   C implementation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 237 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 219 cm\r
+q\r
+BT 1 0 0 1 60 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1.1.1.   ) Tj /F5 10 Tf 0 0 0 rg (mkmutest ) Tj /F1 10 Tf 0 0 .501961 rg (Invocation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 219 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 201 cm\r
+q\r
+BT 1 0 0 1 60 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1.1.2.   Test Program Invocation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 201 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 183 cm\r
+q\r
+BT 1 0 0 1 60 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1.1.3.   Dependencies) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 183 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 165 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.2.   Dynamic Implementations) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 165 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 147 cm\r
+q\r
+BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.2.1.   Python implementation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 147 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 129 cm\r
+q\r
+BT 1 0 0 1 60 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.2.1.1.   ) Tj /F5 10 Tf 0 0 0 rg (mutest ) Tj /F1 10 Tf 0 0 .501961 rg (Invocation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 129 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (8) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 111 cm\r
+q\r
+BT 1 0 0 1 60 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.2.1.2.   Dependencies) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 111 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (9) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 93 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 .501961 rg (6.   Reference) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 93 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 66.44 0 Td (9) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 75 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (6.1.   ) Tj /F5 10 Tf 0 0 0 rg (mu_check\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 75 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (9) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 57 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (6.2.   ) Tj /F5 10 Tf 0 0 0 rg (mu_ensure\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 57 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (9) Tj T* -66.44 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 39 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (6.3.   ) Tj /F5 10 Tf 0 0 0 rg (mu_echeck\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 39 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 21 cm\r
+q\r
+BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (6.4.   ) Tj /F5 10 Tf 0 0 0 rg (mu_eensure\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 21 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 0 3 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 .501961 rg (7.   About) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 397.8898 3 cm\r
+q\r
+0 0 .501961 rg\r
+0 0 .501961 RG\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 183.0236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (1.   Installation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 165.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Download the ) Tj 0 0 .501961 rg (latest distribution tarball ) Tj 0 0 0 rg (and uncompress it.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 135.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.279987 Tw 12 TL /F1 10 Tf 0 0 0 rg (You can also download any release from the ) Tj 0 0 .501961 rg (releases directory ) Tj 0 0 0 rg (or get it using ) Tj 0 0 .501961 rg (Git ) Tj 0 0 0 rg (directly from the ) Tj 0 0 .501961 rg (Git) Tj T* 0 Tw (repository) Tj 0 0 0 rg (.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 117.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (You can get ) Tj 0 0 .501961 rg (this manual ) Tj 0 0 0 rg (too, or a ) Tj 0 0 .501961 rg (PDF version ) Tj 0 0 0 rg (of it.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 99.02362 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (To actually install ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (run:) Tj T* ET\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R257': class PDFStream \r
+257 0 obj\r
+% page stream\r
+<< /Length 4497 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 739.8236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 24 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL ($ make install) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 707.8236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.377674 Tw 12 TL /F1 10 Tf 0 0 0 rg (Default installation path is ) Tj /F5 10 Tf (/usr/local ) Tj /F1 10 Tf (\(because of that, you'll probably need superuser privileges to) Tj T* 0 Tw (install to the default location\). You can override that by passing the ) Tj /F5 10 Tf (prefix ) Tj /F1 10 Tf (make variable, for example:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 674.6236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 24 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL ($ make prefix=/opt/mutest install) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 654.6236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (If you want to install just the docs, you can do:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 621.4236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 24 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL ($ make install-doc) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 601.4236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Or even ) Tj /F5 10 Tf (install-readme) Tj /F1 10 Tf (, ) Tj /F5 10 Tf (install-html ) Tj /F1 10 Tf (or ) Tj /F5 10 Tf (install-pdf ) Tj /F1 10 Tf (if you are too picky.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 571.4236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.063318 Tw 12 TL /F1 10 Tf 0 0 0 rg (If you want to install just one particular ) Tj 0 0 .501961 rg (implementation) Tj 0 0 0 rg (, to can use the ) Tj /F5 10 Tf (install-c ) Tj /F1 10 Tf (and ) Tj /F5 10 Tf (install-py) Tj T* 0 Tw /F1 10 Tf (targets.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 538.4236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (2.   Quick Sample) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 520.4236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (You can find some samples in the ) Tj 0 0 .501961 rg (sample ) Tj 0 0 0 rg (directory.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 490.4236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .919985 Tw 12 TL /F1 10 Tf 0 0 0 rg (This is an example taken from there. A simple ) Tj /F4 10 Tf (module ) Tj /F1 10 Tf (called ) Tj 0 0 .501961 rg (factorial.c ) Tj 0 0 0 rg (with its corresponding ) Tj 0 0 .501961 rg (test suite) Tj T* 0 Tw 0 0 0 rg (\() Tj 0 0 .501961 rg (factorial_test.c) Tj 0 0 0 rg (\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 472.4236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (You can see some ) Tj 0 0 .501961 rg (C++ support ) Tj 0 0 0 rg (in the ) Tj 0 0 .501961 rg (exception_test.cpp) Tj 0 0 0 rg ( ) Tj 0 0 .501961 rg (test suite) Tj 0 0 0 rg (.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 442.4236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (2.1.   factorial.c) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 217.2236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 216 re B*\r
+Q\r
+q\r
+BT 1 0 0 1 0 194 Tm 12 TL /F1 10 Tf 0 0 0 rg (/*) Tj T* ( * This file is part of mutest, a simple micro unit testing framework for C.) Tj T* ( *) Tj T* ( * mutest was written by Leandro Lucarella ) Tj (<) Tj (llucax@gmail.com) Tj (>) Tj ( and is released) Tj T* ( * under the BOLA license, please see the LICENSE file or visit:) Tj T* ( * http://blitiri.com.ar/p/bola/) Tj T* ( *) Tj T* ( * This is an example module that calculates a factorial.) Tj T* ( *) Tj T* ( * Please, read the README file for more details.) Tj T* ( */) Tj /F5 10 Tf  T*  T* /F1 10 Tf (unsigned) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj (unsigned) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (x) Tj (\)) Tj /F5 10 Tf ( ) Tj /F1 10 Tf ({) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (if) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (<) Tj (=) Tj /F5 10 Tf ( ) Tj (1) Tj /F1 10 Tf (\)) Tj /F5 10 Tf  T* (                ) Tj /F1 10 Tf (return) Tj /F5 10 Tf ( ) Tj (1) Tj /F1 10 Tf (;) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (return) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (*) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj (x) Tj (-) Tj /F5 10 Tf (1) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* /F1 10 Tf (}) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R258': class PDFStream \r
+258 0 obj\r
+% page stream\r
+<< /Length 4506 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 747.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (2.2.   factorial_test.c) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 161.8236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 576 re B*\r
+Q\r
+q\r
+BT 1 0 0 1 0 554 Tm 12 TL /F1 10 Tf 0 0 0 rg (/*) Tj T* ( * This file is part of mutest, a simple micro unit testing framework for C.) Tj T* ( *) Tj T* ( * mutest was written by Leandro Lucarella ) Tj (<) Tj (llucax@gmail.com) Tj (>) Tj ( and is released) Tj T* ( * under the BOLA license, please see the LICENSE file or visit:) Tj T* ( * http://blitiri.com.ar/p/bola/) Tj T* ( *) Tj T* ( * This is the factorial module test suite. Each \(public\) function starting) Tj T* ( * with mu_test will be picked up by mkmutest as a test case.) Tj T* ( *) Tj T* ( * Please, read the README file for more details.) Tj T* ( */) Tj /F5 10 Tf  T*  T* /F1 10 Tf (#include "factorial.h") Tj T* /F5 10 Tf  T* /F1 10 Tf (#include "../mutest.h") Tj T* /F5 10 Tf  T* /F1 10 Tf (void) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (mu_test_factorial_zero) Tj (\(\)) Tj /F5 10 Tf ( ) Tj /F1 10 Tf ({) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (unsigned) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (=) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj /F5 10 Tf (0) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (1) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* /F1 10 Tf (}) Tj /F5 10 Tf  T*  T* /F1 10 Tf (void) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (mu_test_factorial_one) Tj (\(\)) Tj /F5 10 Tf ( ) Tj /F1 10 Tf ({) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (unsigned) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (=) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj /F5 10 Tf (1) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (/* this test is wrong on purpose, to see how it fails */) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (2) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* /F1 10 Tf (}) Tj /F5 10 Tf  T*  T* /F1 10 Tf (void) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (mu_test_factorial_positive) Tj (\(\)) Tj /F5 10 Tf ( ) Tj /F1 10 Tf ({) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (unsigned) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (=) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj /F5 10 Tf (2) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (/* this test is wrong on purpose, to see how it fails */) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (3) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T*  T* (        ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (=) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj /F5 10 Tf (3) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (/* we don't want to continue if this fails, because the next result) Tj T* (         * depends on this one. This one will succeed. */) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (mu_ensure) Tj (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (6) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T*  T* (        ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (=) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj (x) Tj (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (720) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T*  T* (        ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (=) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj /F5 10 Tf (4) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (mu_ensure) Tj (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (6) Tj /F1 10 Tf (\);) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (/* same as before, but this one will fail. */) Tj /F5 10 Tf  T*  T* (        ) Tj /F1 10 Tf (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (=) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (factorial) Tj (\() Tj (x) Tj (-) Tj /F5 10 Tf (15) Tj /F1 10 Tf (\);) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (/* and this will never be executed */) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (x) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (362881) Tj /F1 10 Tf (\);) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (/* but if excecuted, will fail */) Tj /F5 10 Tf  T* /F1 10 Tf (}) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R259': class PDFStream \r
+259 0 obj\r
+% page stream\r
+<< /Length 5051 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 747.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (2.3.   exception_test.cpp) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 281.8236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 456 re B*\r
+Q\r
+q\r
+BT 1 0 0 1 0 434 Tm 12 TL /F1 10 Tf 0 0 0 rg (/*) Tj T* ( * This file is part of mutest, a simple micro unit testing framework for C.) Tj T* ( *) Tj T* ( * mutest was written by Leandro Lucarella ) Tj (<) Tj (llucax@gmail.com) Tj (>) Tj ( and is released) Tj T* ( * under the BOLA license, please see the LICENSE file or visit:) Tj T* ( * http://blitiri.com.ar/p/bola/) Tj T* ( *) Tj T* ( * This is a C++ module test suite. It shows how to use checks involving) Tj T* ( * exceptions.) Tj T* ( *) Tj T* ( * Please, read the README file for more details.) Tj T* ( */) Tj /F5 10 Tf  T*  T* /F1 10 Tf (#include ) Tj (<) Tj (stdexcept) Tj (>) Tj ( ) Tj (// std::out_of_range) Tj T* (#include ) Tj (<) Tj (vector) Tj (>) Tj ( ) Tj (// std::vector) Tj T* /F5 10 Tf  T* /F1 10 Tf (#include "../mutest.h") Tj T* /F5 10 Tf  T* /F1 10 Tf (extern) Tj /F5 10 Tf ( ) Tj ("C") Tj ( ) Tj /F1 10 Tf ({) Tj /F5 10 Tf  T*  T* /F1 10 Tf (void) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (mu_test_exceptions) Tj (\(\)) Tj /F5 10 Tf ( ) Tj /F1 10 Tf ({) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (std) Tj (::) Tj (vector) Tj (<) Tj (int) Tj (>) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (v) Tj (\() Tj /F5 10 Tf (1) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (// ok) Tj T* /F5 10 Tf (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (v) Tj (.) Tj (at) Tj (\() Tj /F5 10 Tf (0) Tj /F1 10 Tf (\)) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (0) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (// throws! This fails) Tj T* /F5 10 Tf (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (v) Tj (.) Tj (at) Tj (\() Tj /F5 10 Tf (1) Tj /F1 10 Tf (\)) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (==) Tj /F5 10 Tf ( ) Tj (0) Tj /F1 10 Tf (\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (// ok, we expect the exception to be thrown, and it does) Tj T* /F5 10 Tf (        ) Tj /F1 10 Tf (mu_echeck) Tj (\() Tj (std) Tj (::) Tj (out_of_range) Tj (,) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (v) Tj (.) Tj (at) Tj (\() Tj /F5 10 Tf (1) Tj /F1 10 Tf (\)\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (// fails! We expect this to throw, but it doesn't) Tj T* /F5 10 Tf (        ) Tj /F1 10 Tf (mu_echeck) Tj (\() Tj (std) Tj (::) Tj (out_of_range) Tj (,) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (v) Tj (.) Tj (at) Tj (\() Tj /F5 10 Tf (0) Tj /F1 10 Tf (\)\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (// fails again, but this time the show is over \(note the "ensure"\)) Tj T* /F5 10 Tf (        ) Tj /F1 10 Tf (mu_eensure) Tj (\() Tj (std) Tj (::) Tj (out_of_range) Tj (,) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (v) Tj (.) Tj (at) Tj (\() Tj /F5 10 Tf (0) Tj /F1 10 Tf (\)\);) Tj /F5 10 Tf  T* (        ) Tj /F1 10 Tf (// this will never be executed \(it should fail if it is\)) Tj T* /F5 10 Tf (        ) Tj /F1 10 Tf (mu_check) Tj (\() Tj (v) Tj (.) Tj (empty) Tj (\(\)\);) Tj /F5 10 Tf  T* /F1 10 Tf (}) Tj /F5 10 Tf  T*  T* /F1 10 Tf (}) Tj /F5 10 Tf ( ) Tj /F1 10 Tf (// extern "C") Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 248.8236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (3.   Concepts) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 218.8236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .475542 Tw 12 TL /F4 10 Tf 0 0 0 rg (mutest ) Tj /F1 10 Tf (is about 4 simple concepts: ) Tj 0 0 .501961 rg (test program) Tj 0 0 0 rg (, ) Tj 0 0 .501961 rg (test suite) Tj 0 0 0 rg (, ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (checks) Tj 0 0 0 rg (. Well, to be honest you) Tj T* 0 Tw (probably will need ) Tj 0 0 .501961 rg (test suite) Tj 0 0 0 rg ( ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (termination ) Tj 0 0 0 rg (too =\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 188.8236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (3.1.   Test Program) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 134.8236 cm\r
+q\r
+BT 1 0 0 1 0 38 Tm .090941 Tw 12 TL /F1 10 Tf 0 0 0 rg (A ) Tj /F3 10 Tf (test program ) Tj /F1 10 Tf (is the higher level unit of ) Tj /F4 10 Tf (mutest) Tj /F1 10 Tf (. The test program is the one in charge of running all your) Tj T* 0 Tw .28832 Tw (tests. Probably one of the more important features of ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (is that you are not supposed to bother about) Tj T* 0 Tw .014985 Tw (the test program. So, different ) Tj 0 0 .501961 rg (implementations ) Tj 0 0 0 rg (have different ways to tackle this. Some need more or less) Tj T* 0 Tw (interactions from your part, and each have their pros and cons.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 104.8236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .064751 Tw 12 TL /F1 10 Tf 0 0 0 rg (But this is all you need to know for now, for more details see how the test program is implemented by your) Tj T* 0 Tw 0 0 .501961 rg (implementation ) Tj 0 0 0 rg (of choice.) Tj T* ET\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R260': class PDFStream \r
+260 0 obj\r
+% page stream\r
+<< /Length 7052 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 747.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (3.2.   Test Suite) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 681.0236 cm\r
+q\r
+BT 1 0 0 1 0 50 Tm .300444 Tw 12 TL /F1 10 Tf 0 0 0 rg (A ) Tj /F3 10 Tf (test suite ) Tj /F1 10 Tf (is the higher level unit of ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (that you should care about =\). Is not much more than a way) Tj T* 0 Tw 2.145542 Tw (to group ) Tj 0 0 .501961 rg (test cases) Tj 0 0 0 rg (. Code-wise, a test suite is a C \(or C++\) module \(or compilation unit\). Not clear) Tj T* 0 Tw 1.254104 Tw (enough? A unit test is an object file \(could be a shared object depending on the ) Tj 0 0 .501961 rg (implementation) Tj 0 0 0 rg (\). This) Tj T* 0 Tw .308221 Tw (module should have one or more ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (and it could have any number \(including zero\) of ) Tj 0 0 .501961 rg (initialization) Tj T* 0 Tw 0 0 0 rg (and ) Tj 0 0 .501961 rg (termination ) Tj 0 0 0 rg (functions.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 651.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .012927 Tw 12 TL /F1 10 Tf 0 0 0 rg (A test suite, is inspected by the ) Tj 0 0 .501961 rg (test program ) Tj 0 0 0 rg (for ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (termination ) Tj 0 0 0 rg (functions, and) Tj T* 0 Tw (run them.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 621.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .370941 Tw 12 TL /F1 10 Tf 0 0 0 rg (A test suite fail if one or more ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (fail, and it's skipped if one or more ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (functions fail \(or,) Tj T* 0 Tw (depending on the implementation, if the test suite can't be loaded at all\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 591.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (3.3.   Test Case) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 561.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.064724 Tw 12 TL /F1 10 Tf 0 0 0 rg (A ) Tj /F3 10 Tf (test case ) Tj /F1 10 Tf (is just a plain function with a special signature and name. A test case function name must) Tj T* 0 Tw (start with ) Tj /F5 10 Tf (mu_test) Tj /F1 10 Tf (, and take no arguments and return nothing. For example:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 527.8236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 24 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL (void mu_test_something\(void\);) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 495.8236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .151488 Tw 12 TL /F1 10 Tf 0 0 0 rg (A test case \(probably\) only make sense if it has ) Tj 0 0 .501961 rg (checks) Tj 0 0 0 rg (. A test case succeed only if all its checks succeed) Tj T* 0 Tw (too.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 477.8236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Test are executed in an ) Tj 0 0 .501961 rg (implementation) Tj 0 0 0 rg (-dependant order, but usually the default order is alphabetical.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 447.8236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (3.4.   Checks) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 405.8236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm .013516 Tw 12 TL /F1 10 Tf 0 0 0 rg (Checks are assertions that a ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (must pass \(a boolean expression that must evaluate to ) Tj /F4 10 Tf (true) Tj /F1 10 Tf (\). There) Tj T* 0 Tw .094988 Tw (are 2 big flavors of checks: ) Tj /F3 10 Tf (check ) Tj /F1 10 Tf (and ) Tj /F3 10 Tf (ensure) Tj /F1 10 Tf (. ) Tj /F3 10 Tf (check ) Tj /F1 10 Tf (just print an error \(and ) Tj /F4 10 Tf (mark ) Tj /F1 10 Tf (the ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (as failed\)) Tj T* 0 Tw (and ) Tj /F3 10 Tf (ensure ) Tj /F1 10 Tf (halt the ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (execution, jumping to the next one.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 375.8236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .242339 Tw 12 TL /F1 10 Tf 0 0 0 rg (For better ) Tj 0 0 .501961 rg (C++ support ) Tj 0 0 0 rg (there are check macros that assert that a specified exception is thrown \(instead of) Tj T* 0 Tw (check for a boolean expression to evaluate to ) Tj /F4 10 Tf (true) Tj /F1 10 Tf (\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 357.8236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (You can take a look at the ) Tj 0 0 .501961 rg (reference ) Tj 0 0 0 rg (to see the different flavors of check macros in more detail.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 327.8236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (3.5.   Initialization) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 297.8236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .960574 Tw 12 TL /F1 10 Tf 0 0 0 rg (Sometimes you need to setup some environment shared between all the ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (in a ) Tj 0 0 .501961 rg (test suite) Tj 0 0 0 rg (. You) Tj T* 0 Tw (can use ) Tj /F3 10 Tf (initialization functions ) Tj /F1 10 Tf (for this.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 255.8236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm 1.340542 Tw 12 TL /F1 10 Tf 0 0 0 rg (An initialization function, like a ) Tj 0 0 .501961 rg (test case) Tj 0 0 0 rg (, is a plain C function with a special name and signature. The) Tj T* 0 Tw 2.140574 Tw (name must start with ) Tj /F5 10 Tf (mu_init ) Tj /F1 10 Tf (and it must take no arguments, and return an ) Tj /F4 10 Tf (error code ) Tj /F1 10 Tf (\() Tj /F5 10 Tf (0 ) Tj /F1 10 Tf (being) Tj T* 0 Tw (success\). For example:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 222.6236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 24 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL (int mu_init_something\(void\);) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 190.6236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .253555 Tw 12 TL /F1 10 Tf 0 0 0 rg (All initialization functions are executed before any ) Tj 0 0 .501961 rg (test case) Tj 0 0 0 rg (, in an ) Tj 0 0 .501961 rg (implementation) Tj 0 0 0 rg (-dependant order, and if) Tj T* 0 Tw (one of them fail \(returns non-zero\), the whole ) Tj 0 0 .501961 rg (test suite ) Tj 0 0 0 rg (is skipped immediately.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 160.6236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (3.6.   Termination) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 130.6236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .359269 Tw 12 TL /F3 10 Tf 0 0 0 rg (Termination functions ) Tj /F1 10 Tf (are just like ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (functions, but they're executed ) Tj /F3 10 Tf (after ) Tj /F1 10 Tf (the ) Tj 0 0 .501961 rg (test cases) Tj 0 0 0 rg (, their) Tj T* 0 Tw (names start with ) Tj /F5 10 Tf (mu_term ) Tj /F1 10 Tf (and they return nothing. For example:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 97.42362 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 24 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL (void mu_term_something\(void\);) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R261': class PDFStream \r
+261 0 obj\r
+% page stream\r
+<< /Length 6908 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 744.0236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (4.   C++ Support) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 702.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm .625251 Tw 12 TL /F1 10 Tf 0 0 0 rg (You can use ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (with C++, the only care you must take is that, because of C++ ) Tj 0 0 .501961 rg (name mangling ) Tj 0 0 0 rg (\(and) Tj T* 0 Tw 1.208555 Tw /F4 10 Tf (mutest ) Tj /F1 10 Tf (relaying on function names\), you must declare your ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (termination) Tj T* 0 Tw 0 0 0 rg (functions as ) Tj /F5 10 Tf (extern) Tj ( ) Tj ("C" ) Tj /F1 10 Tf (\(see ) Tj 0 0 .501961 rg (exception_test.cpp ) Tj 0 0 0 rg (for an example\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 660.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm .386651 Tw 12 TL /F1 10 Tf 0 0 .501961 rg (Checks ) Tj 0 0 0 rg (become ) Tj /F4 10 Tf (exception-safe ) Tj /F1 10 Tf (when using ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (with a C++ compiler, and 2 extra ) Tj 0 0 .501961 rg (checks ) Tj 0 0 0 rg (designed for) Tj T* 0 Tw 1.558443 Tw (C++ get defined \() Tj 0 0 .501961 rg (mu_echeck\(\) ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (mu_eensure\(\)) Tj 0 0 0 rg (\). They assert that an expression throws a particular) Tj T* 0 Tw (exception.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 627.0236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (5.   Implementations) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 609.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (There are 2 big groups of possible implementations that I can think of: ) Tj /F4 10 Tf (static ) Tj /F1 10 Tf (and ) Tj /F4 10 Tf (dynamic) Tj /F1 10 Tf (.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 591.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F4 10 Tf 0 0 0 rg (mutest ) Tj /F1 10 Tf (comes with one implementation of each group.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 561.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (5.1.   Static Implementations) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 519.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm .398735 Tw 12 TL /F1 10 Tf 0 0 0 rg (Static implementations can be only written in C/C++ \(or other language that is link-compatible with C, like) Tj T* 0 Tw 3.460651 Tw (the ) Tj 0 0 .501961 rg (D Programming Language) Tj 0 0 0 rg (, but since one of the main goals of ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (is avoid unnecessary) Tj T* 0 Tw (dependencies, you probably don't want to depend on an extra language/compiler to run your tests =\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 489.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.262485 Tw 12 TL /F1 10 Tf 0 0 0 rg (The main advantage is better debugging support, because you can run the ) Tj 0 0 .501961 rg (test program ) Tj 0 0 0 rg (in a standard) Tj T* 0 Tw (debugger and see what happens with ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (very naturally.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 447.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm .439398 Tw 12 TL /F1 10 Tf 0 0 0 rg (The main disadvantage is, the ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (must be figured out in ) Tj /F4 10 Tf (compile-time) Tj /F1 10 Tf (, usually using some kind of) Tj T* 0 Tw .555868 Tw (code generation \(if you want to avoid writing repetitive code yourself\). There's also a limitation in the ) Tj 0 0 .501961 rg (test) Tj T* 0 Tw (case) Tj 0 0 0 rg (, ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (termination ) Tj 0 0 0 rg (functions names: they should be unique for all the ) Tj 0 0 .501961 rg (test program) Tj 0 0 0 rg (.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 420.0236 cm\r
+q\r
+BT 1 0 0 1 0 2.5 Tm 15 TL /F2 12.5 Tf 0 0 0 rg (5.1.1.   C implementation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 378.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm .44784 Tw 12 TL /F4 10 Tf 0 0 0 rg (mutest ) Tj /F1 10 Tf (comes with a C static implementation. Only 3 files are needed: ) Tj /F5 10 Tf (mutest.c ) Tj /F1 10 Tf (\(the ) Tj /F4 10 Tf (user-independent) Tj T* 0 Tw 1.39686 Tw /F1 10 Tf (part of the ) Tj 0 0 .501961 rg (test program) Tj 0 0 0 rg (\), ) Tj /F5 10 Tf (mkmutest ) Tj /F1 10 Tf (\(a bash script for generating the ) Tj /F4 10 Tf (user-dependent ) Tj /F1 10 Tf (part of the ) Tj 0 0 .501961 rg (test) Tj T* 0 Tw (program) Tj 0 0 0 rg (\) and ) Tj /F5 10 Tf (mutest.h ) Tj /F1 10 Tf (\(the header file that ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (should include\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 360.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (You can copy this 3 files to your project or install them at system-level and use them globally.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 330.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.415984 Tw 12 TL /F1 10 Tf 0 0 0 rg (The procedure is simple, You should compile you ) Tj 0 0 .501961 rg (test suites) Tj 0 0 0 rg (, ) Tj /F5 10 Tf (mutest.c ) Tj /F1 10 Tf (and the generated output of) Tj T* 0 Tw /F5 10 Tf (mkmutest ) Tj /F1 10 Tf (as object files and link them together.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 312.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (For example:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 230.8236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 72 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 50 Tm /F5 10 Tf 12 TL ($ cc -c -o mutest.o mutest.c) Tj T* ($ cc -c -o test1.o test1.c) Tj T* ($ cc -c -o test2.o test2.c) Tj T* ($ mkmutest mutest.h test1.o test2.o | cc -xc -c -o runmutest.o -) Tj T* ($ cc -o testprg mutest.o test1.o test2.o runmutest.o) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 210.8236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Then you can run the ) Tj 0 0 .501961 rg (test program ) Tj 0 0 0 rg (invoking it with no arguments:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 177.6236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 24 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL ($ ./testprg) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 153.6236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 0 rg (5.1.1.1.   ) Tj /F6 10 Tf (mkmutest ) Tj /F2 10 Tf (Invocation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 123.6236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.715318 Tw 12 TL /F1 10 Tf 0 0 0 rg (This small script take 1 mandatory positional argument: the path to the ) Tj /F5 10 Tf (mutest.h ) Tj /F1 10 Tf (file. All remaining) Tj T* 0 Tw (positional arguments should be object files representing ) Tj 0 0 .501961 rg (test suites) Tj 0 0 0 rg (.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 99.62362 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 0 rg (5.1.1.2.   Test Program Invocation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 81.62362 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The test program can be invoked without arguments, but can take some extra options:) Tj T* ET\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R262': class PDFStream \r
+262 0 obj\r
+% page stream\r
+<< /Length 7873 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 753.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F7 10 Tf 12 TL (-v) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 684.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 56 Tm  T* ET\r
+q\r
+1 0 0 1 20 54 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Be verbose. This is accumulative, when you add extra ) Tj /F5 10 Tf (-v ) Tj /F1 10 Tf (you will get extra verbosity.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 38 Tm .395542 Tw 12 TL /F1 10 Tf 0 0 0 rg (By default, you just get failed ) Tj 0 0 .501961 rg (checks ) Tj 0 0 0 rg (printed. If you use a single ) Tj /F5 10 Tf (-v) Tj /F1 10 Tf (, a summary of failed/passed ) Tj 0 0 .501961 rg (test) Tj T* 0 Tw .690514 Tw (suites) Tj 0 0 0 rg (, ) Tj 0 0 .501961 rg (test cases ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (checks ) Tj 0 0 0 rg (will be printed. If an extra ) Tj /F5 10 Tf (-v ) Tj /F1 10 Tf (is used, you'll see the current ) Tj 0 0 .501961 rg (test suite) Tj T* 0 Tw .099986 Tw 0 0 0 rg (being executed. Another ) Tj /F5 10 Tf (-v ) Tj /F1 10 Tf (and you'll get the current ) Tj 0 0 .501961 rg (test case) Tj 0 0 0 rg (, and another one, and you'll get each) Tj T* 0 Tw 0 0 .501961 rg (check) Tj 0 0 0 rg (.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 660.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 0 rg (5.1.1.3.   Dependencies) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 642.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Even when dependencies are kept minimal, there always be a few ;\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 624.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (To use this implementation you just need:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 618.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 618.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 606.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 -3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 23 -3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (A C compiler \(you already needed that, so...\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 600.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 588.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 -3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 23 -3 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (The ) Tj /F5 10 Tf (nm ) Tj /F1 10 Tf (program \(from ) Tj 0 0 .501961 rg (GNU Binutils) Tj 0 0 0 rg (, included in virtually any *NIX\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 582.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 570.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 -3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 23 -3 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (The ) Tj 0 0 .501961 rg (GNU Bash ) Tj 0 0 0 rg (shell interpreter \(also included in virtually any *NIX\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 570.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 540.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (5.2.   Dynamic Implementations) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 498.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm .84686 Tw 12 TL /F1 10 Tf 0 0 0 rg (Dynamic implementations, on the other hand, can be written in any language that can access to shared) Tj T* 0 Tw 2.661163 Tw (objects. The idea is to inspect a shared object for ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (and run them, without requiring any) Tj T* 0 Tw (information about ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (at compile time.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 432.0236 cm\r
+q\r
+BT 1 0 0 1 0 50 Tm 1.684983 Tw 12 TL /F1 10 Tf 0 0 0 rg (There are several advantages in this kind of implementations. The dynamic nature let you completely) Tj T* 0 Tw 1.71686 Tw (separate the ) Tj 0 0 .501961 rg (test program ) Tj 0 0 0 rg (from the user-written ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (and you can choose at ) Tj /F4 10 Tf (run-time ) Tj /F1 10 Tf (what ) Tj 0 0 .501961 rg (test) Tj T* 0 Tw .237984 Tw (suites ) Tj 0 0 0 rg (to execute by just selecting the correct shared objects. Also, ) Tj 0 0 .501961 rg (test case) Tj 0 0 0 rg (, ) Tj 0 0 .501961 rg (initialization ) Tj 0 0 0 rg (and ) Tj 0 0 .501961 rg (termination) Tj T* 0 Tw .134431 Tw 0 0 0 rg (functions names only have to be unique in the scope of the ) Tj 0 0 .501961 rg (test suites) Tj 0 0 0 rg (, because ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (are completely) Tj T* 0 Tw (isolated in separate shared objects.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 402.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .720988 Tw 12 TL /F1 10 Tf 0 0 0 rg (But everything comes at a price, and the higher price to pay is ) Tj /F4 10 Tf (debuggability) Tj /F1 10 Tf (. It's a little harder to plug a) Tj T* 0 Tw (debugger to a shared object.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 375.0236 cm\r
+q\r
+BT 1 0 0 1 0 2.5 Tm 15 TL /F2 12.5 Tf 0 0 0 rg (5.2.1.   Python implementation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 333.0236 cm\r
+q\r
+BT 1 0 0 1 0 26 Tm 1.498651 Tw 12 TL /F1 10 Tf 0 0 0 rg (This implementation is much simpler and elegant than the ) Tj 0 0 .501961 rg (C implementation) Tj 0 0 0 rg (. Only 2 files are needed:) Tj T* 0 Tw .951318 Tw /F5 10 Tf (mutest ) Tj /F1 10 Tf (\() Tj 0 0 .501961 rg (test program ) Tj 0 0 0 rg (written in ) Tj 0 0 .501961 rg (Python ) Tj 0 0 0 rg (using ) Tj 0 0 .501961 rg (ctypes ) Tj 0 0 0 rg (module to access the shared object symbols\) and) Tj T* 0 Tw /F5 10 Tf (mutest.h ) Tj /F1 10 Tf (\(the header file that ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (should include\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 303.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 2.823059 Tw 12 TL /F1 10 Tf 0 0 0 rg (Since both implementations provided by ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (share the same ) Tj /F5 10 Tf (mutest.h) Tj /F1 10 Tf (, you should define the) Tj T* 0 Tw /F5 10 Tf (MUTEST_PY ) Tj /F1 10 Tf (macro when compiling the ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (if you will run them using this implementation.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 273.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm .452619 Tw 12 TL /F1 10 Tf 0 0 0 rg (As with the ) Tj 0 0 .501961 rg (C implementation) Tj 0 0 0 rg (, you can copy this 2 files to your project or install them at system-level and) Tj T* 0 Tw (use them globally.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 243.0236 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.578735 Tw 12 TL /F1 10 Tf 0 0 0 rg (The procedure is even simpler than the ) Tj 0 0 .501961 rg (C implementation) Tj 0 0 0 rg (: compile and link you ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (as shared) Tj T* 0 Tw (objects and then run the ) Tj /F5 10 Tf (mutest ) Tj /F1 10 Tf (program passing the shared objects as arguments. For example:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 161.8236 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 468.6898 72 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 50 Tm /F5 10 Tf 12 TL ($ cc -c -fPIC -DMUTEST_PY -o test1.o test1.c) Tj T* ($ cc -shared -o test1.so test1.o) Tj T* ($ cc -c -fPIC -DMUTEST_PY -o test2.o test2.c) Tj T* ($ cc -shared -o test2.so test2.o) Tj T* ($ mutest test1.so test2.so) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 141.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (That's it.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 117.8236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 0 rg (5.2.1.1.   ) Tj /F6 10 Tf (mutest ) Tj /F2 10 Tf (Invocation) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 87.82362 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.505984 Tw 12 TL /F5 10 Tf 0 0 0 rg (mutest ) Tj /F1 10 Tf (program takes ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (shared objects to run as positional arguments. It accepts the same) Tj T* 0 Tw (options as the ) Tj 0 0 .501961 rg (C implementation's test program ) Tj 0 0 0 rg (and some extra options are accepted too:) Tj T* ET\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R263': class PDFStream \r
+263 0 obj\r
+% page stream\r
+<< /Length 6814 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 753.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F7 10 Tf 12 TL (--verbose) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 738.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Alias for ) Tj /F5 10 Tf (-v) Tj /F1 10 Tf (.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 722.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F7 10 Tf 0 0 0 rg (-q) Tj /F3 10 Tf (, ) Tj /F7 10 Tf (--quiet) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 707.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Be quiet \(no output is shown at all\).) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 691.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F7 10 Tf 0 0 0 rg (-s) Tj /F3 10 Tf (, ) Tj /F7 10 Tf (--search) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 676.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Search for ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (\(*.so\) in the current directory and add them to the list of ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (to run.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 660.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F7 10 Tf 0 0 0 rg (-h) Tj /F3 10 Tf (, ) Tj /F7 10 Tf (--help) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 645.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Show a help message and exit.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 621.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 0 rg (5.2.1.2.   Dependencies) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 603.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (As with the ) Tj 0 0 .501961 rg (C implementation) Tj 0 0 0 rg (, some minor dependencies are needed:) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 597.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 597.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 585.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 -3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 23 -3 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (Python ) Tj 0 0 0 rg (\(2.5 or later\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 579.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 567.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+q\r
+1 0 0 1 6 -3 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 23 -3 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (The ) Tj /F5 10 Tf (nm ) Tj /F1 10 Tf (program \(from ) Tj 0 0 .501961 rg (GNU Binutils) Tj 0 0 0 rg (, included in virtually any *NIX\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 567.0236 cm\r
+Q\r
+q\r
+1 0 0 1 62.69291 549.0236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (You will need a C compiler for building the ) Tj 0 0 .501961 rg (test suites ) Tj 0 0 0 rg (too, but technically is not needed by ) Tj /F4 10 Tf (mutest ) Tj /F1 10 Tf (itself ;\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 516.0236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (6.   Reference) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 486.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (6.1.   ) Tj /F7 15 Tf (mu_check\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 468.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Synopsis) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 453.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL (mu_check\(expression\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 437.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Description) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 422.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Check that the ) Tj /F5 10 Tf (expression ) Tj /F1 10 Tf (evaluates to ) Tj /F4 10 Tf (true) Tj /F1 10 Tf (. Continue with the ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (if fail.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 406.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Availability) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 391.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Always) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 375.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Example) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 298.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 63.2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 448.6898 72 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 50 Tm /F5 10 Tf 12 TL (void mu_test\(void\)) Tj T* ({) Tj T* (    mu_check\(5 == 4\); /* fail */) Tj T* (    mu_check\(5 == 5\); /* excecuted, pass */) Tj T* (}) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 268.8236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (6.2.   ) Tj /F7 15 Tf (mu_ensure\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 250.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Synopsis) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 235.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F5 10 Tf 12 TL (mu_ensure\(expression\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 219.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Description) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 204.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Check that the ) Tj /F5 10 Tf (expression ) Tj /F1 10 Tf (evaluates to ) Tj /F4 10 Tf (true) Tj /F1 10 Tf (. Interrupt the ) Tj 0 0 .501961 rg (test case ) Tj 0 0 0 rg (if fail.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 188.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Availability) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 173.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Always) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 157.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Example) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 81.62362 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 63.2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 448.6898 72 re B*\r
+Q\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 50 Tm /F5 10 Tf 12 TL (void mu_test\(void\)) Tj T* ({) Tj T* (    mu_ensure\(5 == 4\); /* fail */) Tj T* (    mu_check\(5 == 5\); /* not excecuted */) Tj T* (}) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R264': class PDFStream \r
+264 0 obj\r
+% page stream\r
+<< /Length 4504 >>\r
+stream\r
+1 0 0 1 0 0 cm  BT /F1 12 Tf 14.4 TL ET\r
+q\r
+1 0 0 1 62.69291 747.0236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (6.3.   ) Tj /F7 15 Tf (mu_echeck\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 729.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Synopsis) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 714.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F5 10 Tf 0 0 0 rg (mu_echeck\(class,) Tj ( ) Tj (expression\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 698.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Description) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 671.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 14 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.408443 Tw 12 TL /F1 10 Tf 0 0 0 rg (Check that the ) Tj /F5 10 Tf (expression ) Tj /F1 10 Tf (throws a specific exception ) Tj /F5 10 Tf (class ) Tj /F1 10 Tf (\(or subclass\). Continue with the) Tj T* 0 Tw 0 0 .501961 rg (test case ) Tj 0 0 0 rg (if fail.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 655.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Availability) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 640.0236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (C++ only) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 624.0236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Example) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 475.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 135.2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 448.6898 144 re B*\r
+Q\r
+q\r
+BT 1 0 0 1 0 122 Tm 12 TL /F5 10 Tf 0 0 0 rg (#include ) Tj (<) Tj (stdexcept) Tj (>) Tj  T*  T* (extern "C") Tj T* ({) Tj T* (    void mu_test\(void\)) Tj T* (    {) Tj T* (        mu_echeck\(std::exception, true\); /* fail */) Tj T* (        mu_echeck\(std::exception,) Tj T* (                throw std::runtime_error\("!"\)\); /* excecuted, pass */) Tj T* (    }) Tj T* (}) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 445.8236 cm\r
+q\r
+BT 1 0 0 1 0 3 Tm 18 TL /F3 15 Tf 0 0 0 rg (6.4.   ) Tj /F7 15 Tf (mu_eensure\(\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 427.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Synopsis) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 412.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F5 10 Tf 0 0 0 rg (mu_eensure\(class,) Tj ( ) Tj (expression\)) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 396.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Description) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 369.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 14 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+BT 1 0 0 1 0 14 Tm 1.749982 Tw 12 TL /F1 10 Tf 0 0 0 rg (Check that the ) Tj /F5 10 Tf (expression ) Tj /F1 10 Tf (throws a specific exception ) Tj /F5 10 Tf (class ) Tj /F1 10 Tf (\(or subclass\). Interrupt the ) Tj 0 0 .501961 rg (test) Tj T* 0 Tw (case ) Tj 0 0 0 rg (if fail.) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 353.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Availability) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 338.8236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (C++ only) Tj T* ET\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 322.8236 cm\r
+q\r
+0 0 0 rg\r
+BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (Example) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 174.6236 cm\r
+0 0 0 rg\r
+BT /F1 10 Tf 12 TL ET\r
+BT 1 0 0 1 0 135.2 Tm  T* ET\r
+q\r
+1 0 0 1 20 0 cm\r
+q\r
+q\r
+1 0 0 1 0 0 cm\r
+q\r
+1 0 0 1 6.6 6.6 cm\r
+q\r
+.662745 .662745 .662745 RG\r
+.5 w\r
+.960784 .960784 .862745 rg\r
+n -6 -6 448.6898 144 re B*\r
+Q\r
+q\r
+BT 1 0 0 1 0 122 Tm 12 TL /F5 10 Tf 0 0 0 rg (#include ) Tj (<) Tj (stdexcept) Tj (>) Tj  T*  T* (extern "C") Tj T* ({) Tj T* (    void mu_test\(void\)) Tj T* (    {) Tj T* (        mu_eensure\(std::exception, true\); /* fail */) Tj T* (        mu_echeck\(std::exception,) Tj T* (                throw std::runtime_error\("!"\)\); /* not excecuted */) Tj T* (    }) Tj T* (}) Tj T* ET\r
+Q\r
+Q\r
+Q\r
+Q\r
+Q\r
+q\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 141.6236 cm\r
+q\r
+BT 1 0 0 1 0 3.5 Tm 21 TL /F3 17.5 Tf 0 0 0 rg (7.   About) Tj T* ET\r
+Q\r
+Q\r
+q\r
+1 0 0 1 62.69291 123.6236 cm\r
+q\r
+BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (This manual was written using ) Tj 0 0 .501961 rg (reStructuredText) Tj 0 0 0 rg (.) Tj T* ET\r
+Q\r
+Q\r
\r
+endstream\r
+endobj\r
+% 'R265': class PDFPageLabels \r
+265 0 obj\r
+% Document Root\r
+<< /Nums [ 0\r
+ 266 0 R\r
+ 1\r
+ 267 0 R\r
+ 2\r
+ 268 0 R\r
+ 3\r
+ 269 0 R\r
+ 4\r
+ 270 0 R\r
+ 5\r
+ 271 0 R\r
+ 6\r
+ 272 0 R\r
+ 7\r
+ 273 0 R\r
+ 8\r
+ 274 0 R\r
+ 9\r
+ 275 0 R ] >>\r
+endobj\r
+% 'R266': class PDFPageLabel \r
+266 0 obj\r
+% None\r
+<< /S /D\r
+ /St 1 >>\r
+endobj\r
+% 'R267': class PDFPageLabel \r
+267 0 obj\r
+% None\r
+<< /S /D\r
+ /St 2 >>\r
+endobj\r
+% 'R268': class PDFPageLabel \r
+268 0 obj\r
+% None\r
+<< /S /D\r
+ /St 3 >>\r
+endobj\r
+% 'R269': class PDFPageLabel \r
+269 0 obj\r
+% None\r
+<< /S /D\r
+ /St 4 >>\r
+endobj\r
+% 'R270': class PDFPageLabel \r
+270 0 obj\r
+% None\r
+<< /S /D\r
+ /St 5 >>\r
+endobj\r
+% 'R271': class PDFPageLabel \r
+271 0 obj\r
+% None\r
+<< /S /D\r
+ /St 6 >>\r
+endobj\r
+% 'R272': class PDFPageLabel \r
+272 0 obj\r
+% None\r
+<< /S /D\r
+ /St 7 >>\r
+endobj\r
+% 'R273': class PDFPageLabel \r
+273 0 obj\r
+% None\r
+<< /S /D\r
+ /St 8 >>\r
+endobj\r
+% 'R274': class PDFPageLabel \r
+274 0 obj\r
+% None\r
+<< /S /D\r
+ /St 9 >>\r
+endobj\r
+% 'R275': class PDFPageLabel \r
+275 0 obj\r
+% None\r
+<< /S /D\r
+ /St 10 >>\r
+endobj\r
+xref\r
+0 276\r
+0000000000 65535 f\r
+0000000113 00000 n\r
+0000000286 00000 n\r
+0000000451 00000 n\r
+0000000640 00000 n\r
+0000000827 00000 n\r
+0000001068 00000 n\r
+0000001303 00000 n\r
+0000001496 00000 n\r
+0000001756 00000 n\r
+0000001998 00000 n\r
+0000002241 00000 n\r
+0000002484 00000 n\r
+0000002727 00000 n\r
+0000002970 00000 n\r
+0000003214 00000 n\r
+0000003458 00000 n\r
+0000003702 00000 n\r
+0000003946 00000 n\r
+0000004190 00000 n\r
+0000004434 00000 n\r
+0000004678 00000 n\r
+0000004922 00000 n\r
+0000005166 00000 n\r
+0000005394 00000 n\r
+0000005862 00000 n\r
+0000006105 00000 n\r
+0000006348 00000 n\r
+0000006592 00000 n\r
+0000006836 00000 n\r
+0000007080 00000 n\r
+0000007324 00000 n\r
+0000007568 00000 n\r
+0000007812 00000 n\r
+0000008056 00000 n\r
+0000008300 00000 n\r
+0000008544 00000 n\r
+0000008788 00000 n\r
+0000009032 00000 n\r
+0000009276 00000 n\r
+0000009520 00000 n\r
+0000009764 00000 n\r
+0000010008 00000 n\r
+0000010252 00000 n\r
+0000010496 00000 n\r
+0000010740 00000 n\r
+0000010984 00000 n\r
+0000011228 00000 n\r
+0000011472 00000 n\r
+0000011716 00000 n\r
+0000011960 00000 n\r
+0000012204 00000 n\r
+0000012448 00000 n\r
+0000012692 00000 n\r
+0000012936 00000 n\r
+0000013180 00000 n\r
+0000013424 00000 n\r
+0000013654 00000 n\r
+0000013830 00000 n\r
+0000014074 00000 n\r
+0000014318 00000 n\r
+0000014562 00000 n\r
+0000014806 00000 n\r
+0000015050 00000 n\r
+0000015294 00000 n\r
+0000015538 00000 n\r
+0000015782 00000 n\r
+0000016026 00000 n\r
+0000016270 00000 n\r
+0000016514 00000 n\r
+0000016758 00000 n\r
+0000017002 00000 n\r
+0000017246 00000 n\r
+0000017490 00000 n\r
+0000017734 00000 n\r
+0000017978 00000 n\r
+0000018222 00000 n\r
+0000018466 00000 n\r
+0000018710 00000 n\r
+0000018954 00000 n\r
+0000019198 00000 n\r
+0000019442 00000 n\r
+0000019686 00000 n\r
+0000019930 00000 n\r
+0000020174 00000 n\r
+0000020418 00000 n\r
+0000020662 00000 n\r
+0000020906 00000 n\r
+0000021150 00000 n\r
+0000021394 00000 n\r
+0000021638 00000 n\r
+0000021882 00000 n\r
+0000022125 00000 n\r
+0000022405 00000 n\r
+0000022672 00000 n\r
+0000022909 00000 n\r
+0000023175 00000 n\r
+0000023441 00000 n\r
+0000023710 00000 n\r
+0000023963 00000 n\r
+0000024930 00000 n\r
+0000025174 00000 n\r
+0000025509 00000 n\r
+0000025754 00000 n\r
+0000025999 00000 n\r
+0000026244 00000 n\r
+0000026489 00000 n\r
+0000026734 00000 n\r
+0000026963 00000 n\r
+0000027338 00000 n\r
+0000027638 00000 n\r
+0000027884 00000 n\r
+0000028130 00000 n\r
+0000028376 00000 n\r
+0000028620 00000 n\r
+0000028866 00000 n\r
+0000029112 00000 n\r
+0000029358 00000 n\r
+0000029604 00000 n\r
+0000029833 00000 n\r
+0000030235 00000 n\r
+0000030480 00000 n\r
+0000030726 00000 n\r
+0000030972 00000 n\r
+0000031218 00000 n\r
+0000031464 00000 n\r
+0000031710 00000 n\r
+0000031955 00000 n\r
+0000032200 00000 n\r
+0000032446 00000 n\r
+0000032692 00000 n\r
+0000032938 00000 n\r
+0000033184 00000 n\r
+0000033430 00000 n\r
+0000033676 00000 n\r
+0000033922 00000 n\r
+0000034168 00000 n\r
+0000034414 00000 n\r
+0000034660 00000 n\r
+0000034906 00000 n\r
+0000035152 00000 n\r
+0000035398 00000 n\r
+0000035644 00000 n\r
+0000035888 00000 n\r
+0000036134 00000 n\r
+0000036380 00000 n\r
+0000036609 00000 n\r
+0000037180 00000 n\r
+0000037445 00000 n\r
+0000037690 00000 n\r
+0000037936 00000 n\r
+0000038182 00000 n\r
+0000038428 00000 n\r
+0000038674 00000 n\r
+0000038919 00000 n\r
+0000039165 00000 n\r
+0000039410 00000 n\r
+0000039662 00000 n\r
+0000039908 00000 n\r
+0000040154 00000 n\r
+0000040400 00000 n\r
+0000040646 00000 n\r
+0000040892 00000 n\r
+0000041138 00000 n\r
+0000041384 00000 n\r
+0000041630 00000 n\r
+0000041876 00000 n\r
+0000042122 00000 n\r
+0000042368 00000 n\r
+0000042614 00000 n\r
+0000042860 00000 n\r
+0000043091 00000 n\r
+0000043293 00000 n\r
+0000043522 00000 n\r
+0000044069 00000 n\r
+0000044257 00000 n\r
+0000044503 00000 n\r
+0000044749 00000 n\r
+0000044995 00000 n\r
+0000045241 00000 n\r
+0000045486 00000 n\r
+0000045732 00000 n\r
+0000045978 00000 n\r
+0000046223 00000 n\r
+0000046482 00000 n\r
+0000046738 00000 n\r
+0000046984 00000 n\r
+0000047230 00000 n\r
+0000047476 00000 n\r
+0000047722 00000 n\r
+0000047968 00000 n\r
+0000048213 00000 n\r
+0000048459 00000 n\r
+0000048705 00000 n\r
+0000048951 00000 n\r
+0000049197 00000 n\r
+0000049443 00000 n\r
+0000049689 00000 n\r
+0000049934 00000 n\r
+0000050178 00000 n\r
+0000050443 00000 n\r
+0000050689 00000 n\r
+0000050935 00000 n\r
+0000051181 00000 n\r
+0000051427 00000 n\r
+0000051673 00000 n\r
+0000051919 00000 n\r
+0000052148 00000 n\r
+0000052780 00000 n\r
+0000053026 00000 n\r
+0000053272 00000 n\r
+0000053517 00000 n\r
+0000053761 00000 n\r
+0000054021 00000 n\r
+0000054267 00000 n\r
+0000054513 00000 n\r
+0000054742 00000 n\r
+0000055134 00000 n\r
+0000055380 00000 n\r
+0000055626 00000 n\r
+0000055871 00000 n\r
+0000056118 00000 n\r
+0000056455 00000 n\r
+0000056619 00000 n\r
+0000056938 00000 n\r
+0000057067 00000 n\r
+0000057333 00000 n\r
+0000057663 00000 n\r
+0000057938 00000 n\r
+0000058254 00000 n\r
+0000058561 00000 n\r
+0000058871 00000 n\r
+0000059151 00000 n\r
+0000059437 00000 n\r
+0000059718 00000 n\r
+0000059984 00000 n\r
+0000060290 00000 n\r
+0000060562 00000 n\r
+0000060840 00000 n\r
+0000061185 00000 n\r
+0000061559 00000 n\r
+0000061897 00000 n\r
+0000062232 00000 n\r
+0000062603 00000 n\r
+0000062903 00000 n\r
+0000063282 00000 n\r
+0000063645 00000 n\r
+0000063970 00000 n\r
+0000064267 00000 n\r
+0000064582 00000 n\r
+0000064854 00000 n\r
+0000065147 00000 n\r
+0000065440 00000 n\r
+0000065719 00000 n\r
+0000065936 00000 n\r
+0000066136 00000 n\r
+0000070258 00000 n\r
+0000079190 00000 n\r
+0000083788 00000 n\r
+0000088395 00000 n\r
+0000093547 00000 n\r
+0000100700 00000 n\r
+0000107709 00000 n\r
+0000115683 00000 n\r
+0000122598 00000 n\r
+0000127207 00000 n\r
+0000127429 00000 n\r
+0000127508 00000 n\r
+0000127587 00000 n\r
+0000127666 00000 n\r
+0000127745 00000 n\r
+0000127824 00000 n\r
+0000127903 00000 n\r
+0000127982 00000 n\r
+0000128061 00000 n\r
+0000128140 00000 n\r
+trailer\r
+<< /ID \r
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com) \r
+ [(\010\207@\355\312B{y\207\001\310\013\021\257\346z) (\010\207@\355\312B{y\207\001\310\013\021\257\346z)] \r
+\r
+ /Info 223 0 R\r
+ /Root 222 0 R\r
+ /Size 276 >>\r
+startxref\r
+128189\r
+%%EOF\r
diff --git a/source/proj/mutest/releases/.htaccess b/source/proj/mutest/releases/.htaccess
new file mode 100644 (file)
index 0000000..e1d2560
--- /dev/null
@@ -0,0 +1 @@
+Options +Indexes
diff --git a/source/proj/mutest/releases/manual-1.0.html b/source/proj/mutest/releases/manual-1.0.html
new file mode 100644 (file)
index 0000000..a2fa903
--- /dev/null
@@ -0,0 +1,873 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
+<title>mutest - A simple micro unit testing framework for C</title>
+<meta name="author" content="Leandro Lucarella" />
+<meta name="date" content="2008-12-25" />
+<meta name="copyright" content="Leandro Lucarella (2008), released under the BOLA license" />
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left {
+  clear: left }
+
+img.align-right {
+  clear: right }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font-family: serif ;
+  font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="mutest-a-simple-micro-unit-testing-framework-for-c">
+<h1 class="title"><em>mutest</em> - A simple micro unit testing framework for C</h1>
+<table class="docinfo" frame="void" rules="none">
+<col class="docinfo-name" />
+<col class="docinfo-content" />
+<tbody valign="top">
+<tr><th class="docinfo-name">Author:</th>
+<td>Leandro Lucarella</td></tr>
+<tr><th class="docinfo-name">Contact:</th>
+<td><a class="first last reference external" href="mailto:llucax&#64;gmail.com">llucax&#64;gmail.com</a></td></tr>
+<tr><th class="docinfo-name">Version:</th>
+<td>1.0</td></tr>
+<tr><th class="docinfo-name">Date:</th>
+<td>2008-12-25</td></tr>
+<tr><th class="docinfo-name">Copyright:</th>
+<td>Leandro Lucarella (2008), released under the <a class="reference external" href="http://blitiri.com.ar/p/bola/">BOLA</a> license</td></tr>
+</tbody>
+</table>
+<div class="abstract topic">
+<p class="topic-title first">Abstract</p>
+<p><em>mutest</em> is a micro <a class="reference external" href="http://en.wikipedia.org/wiki/Unit_testing">unit testing</a> framework for C (with some
+<a class="reference internal" href="#c-support">C++ support</a>). It's mostly an idea (it even comes with
+2 <a class="reference internal" href="#implementations">implementations</a> of the idea!) with the goal of being easy to use
+(just write your <a class="reference internal" href="#test-case">test cases</a> grouped in <a class="reference internal" href="#test-suite">test suites</a> and you're
+set) and so small and simple that you don't mind to copy the files to
+your project and just use it (i.e., no dependencies).</p>
+<p>The idea is simple: a source file is a <a class="reference internal" href="#test-suite">test suite</a>, a function is
+a <a class="reference internal" href="#test-case">test case</a> (special functions can be used for <a class="reference internal" href="#test-suite">test suite</a>
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a>), which can can have several <a class="reference internal" href="#checks">checks</a>.
+<a class="reference internal" href="#checks">Checks</a> comes in 2 flavors, one that only prints an error, and one that
+terminates the current <a class="reference internal" href="#test-case">test case</a> too. A (normally) automated <a class="reference internal" href="#test-program">test
+program</a> run all the <a class="reference internal" href="#test-suite">test suites</a> and print some stats. It fails
+(returns non-zero) if any <a class="reference internal" href="#test-suite">test suite</a> fails.</p>
+</div>
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="auto-toc simple">
+<li><a class="reference internal" href="#installation" id="id9">1.&nbsp;&nbsp;&nbsp;Installation</a></li>
+<li><a class="reference internal" href="#quick-sample" id="id10">2.&nbsp;&nbsp;&nbsp;Quick Sample</a><ul class="auto-toc">
+<li><a class="reference internal" href="#factorial-c" id="id11">2.1.&nbsp;&nbsp;&nbsp;factorial.c</a></li>
+<li><a class="reference internal" href="#factorial-test-c" id="id12">2.2.&nbsp;&nbsp;&nbsp;factorial_test.c</a></li>
+<li><a class="reference internal" href="#exception-test-cpp" id="id13">2.3.&nbsp;&nbsp;&nbsp;exception_test.cpp</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#concepts" id="id14">3.&nbsp;&nbsp;&nbsp;Concepts</a><ul class="auto-toc">
+<li><a class="reference internal" href="#test-program" id="id15">3.1.&nbsp;&nbsp;&nbsp;Test Program</a></li>
+<li><a class="reference internal" href="#test-suite" id="id16">3.2.&nbsp;&nbsp;&nbsp;Test Suite</a></li>
+<li><a class="reference internal" href="#test-case" id="id17">3.3.&nbsp;&nbsp;&nbsp;Test Case</a></li>
+<li><a class="reference internal" href="#checks" id="id18">3.4.&nbsp;&nbsp;&nbsp;Checks</a></li>
+<li><a class="reference internal" href="#initialization" id="id19">3.5.&nbsp;&nbsp;&nbsp;Initialization</a></li>
+<li><a class="reference internal" href="#termination" id="id20">3.6.&nbsp;&nbsp;&nbsp;Termination</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#c-support" id="id21">4.&nbsp;&nbsp;&nbsp;C++ Support</a></li>
+<li><a class="reference internal" href="#implementations" id="id22">5.&nbsp;&nbsp;&nbsp;Implementations</a><ul class="auto-toc">
+<li><a class="reference internal" href="#static-implementations" id="id23">5.1.&nbsp;&nbsp;&nbsp;Static Implementations</a><ul class="auto-toc">
+<li><a class="reference internal" href="#c-implementation" id="id24">5.1.1.&nbsp;&nbsp;&nbsp;C implementation</a><ul class="auto-toc">
+<li><a class="reference internal" href="#mkmutest-invocation" id="id25">5.1.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mkmutest</span></tt> Invocation</a></li>
+<li><a class="reference internal" href="#test-program-invocation" id="id26">5.1.1.2.&nbsp;&nbsp;&nbsp;Test Program Invocation</a></li>
+<li><a class="reference internal" href="#dependencies" id="id27">5.1.1.3.&nbsp;&nbsp;&nbsp;Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a class="reference internal" href="#dynamic-implementations" id="id28">5.2.&nbsp;&nbsp;&nbsp;Dynamic Implementations</a><ul class="auto-toc">
+<li><a class="reference internal" href="#python-implementation" id="id29">5.2.1.&nbsp;&nbsp;&nbsp;Python implementation</a><ul class="auto-toc">
+<li><a class="reference internal" href="#mutest-invocation" id="id30">5.2.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mutest</span></tt> Invocation</a></li>
+<li><a class="reference internal" href="#id8" id="id31">5.2.1.2.&nbsp;&nbsp;&nbsp;Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a class="reference internal" href="#reference" id="id32">6.&nbsp;&nbsp;&nbsp;Reference</a><ul class="auto-toc">
+<li><a class="reference internal" href="#mu-check" id="id33">6.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_check()</span></tt></a></li>
+<li><a class="reference internal" href="#mu-ensure" id="id34">6.2.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_ensure()</span></tt></a></li>
+<li><a class="reference internal" href="#mu-echeck" id="id35">6.3.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_echeck()</span></tt></a></li>
+<li><a class="reference internal" href="#mu-eensure" id="id36">6.4.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_eensure()</span></tt></a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#about" id="id37">7.&nbsp;&nbsp;&nbsp;About</a></li>
+</ul>
+</div>
+<div class="section" id="installation">
+<h1><a class="toc-backref" href="#id9">1.&nbsp;&nbsp;&nbsp;Installation</a></h1>
+<p>Download the <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/releases/mutest.tar.gz">latest distribution tarball</a> and uncompress it.</p>
+<p>You can also download any release from the <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/releases/">releases directory</a> or get it
+using <a class="reference external" href="http://git.or.cz/">Git</a> directly from the <a class="reference external" href="http://git.llucax.com.ar/w/software/mutest.git">Git repository</a>.</p>
+<p>You can get <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/manual.html">this manual</a> too, or a <a class="reference external" href="http://proj.llucax.com.ar/home/mutest/manual.pdf">PDF version</a> of it.</p>
+<p>To actually install <em>mutest</em> run:</p>
+<pre class="literal-block">
+$ make install
+</pre>
+<p>Default installation path is <tt class="docutils literal"><span class="pre">/usr/local</span></tt> (because of that, you'll probably
+need superuser privileges to install to the default location). You can override
+that by passing the <tt class="docutils literal"><span class="pre">prefix</span></tt> make variable, for example:</p>
+<pre class="literal-block">
+$ make prefix=/opt/mutest install
+</pre>
+<p>If you want to install just the docs, you can do:</p>
+<pre class="literal-block">
+$ make install-doc
+</pre>
+<p>Or even <tt class="docutils literal"><span class="pre">install-readme</span></tt>, <tt class="docutils literal"><span class="pre">install-html</span></tt> or <tt class="docutils literal"><span class="pre">install-pdf</span></tt> if you are too
+picky.</p>
+<p>If you want to install just one particular <a class="reference internal" href="#implementations">implementation</a>, to can use the
+<tt class="docutils literal"><span class="pre">install-c</span></tt> and <tt class="docutils literal"><span class="pre">install-py</span></tt> targets.</p>
+</div>
+<div class="section" id="quick-sample">
+<h1><a class="toc-backref" href="#id10">2.&nbsp;&nbsp;&nbsp;Quick Sample</a></h1>
+<p>You can find some samples in the <a class="reference external" href="http://git.llucax.com.ar/w/software/mutest.git?a=tree;f=sample;h=d8ad4dd9c3428fef5963107c82ab6a5e34ec6e00;hb=HEAD">sample</a> directory.</p>
+<p>This is an example taken from there. A simple <em>module</em> called <a class="reference internal" href="#factorial-c">factorial.c</a>
+with its corresponding <a class="reference internal" href="#test-suite">test suite</a> (<a class="reference internal" href="#factorial-test-c">factorial_test.c</a>).</p>
+<p>You can see some <a class="reference internal" href="#c-support">C++ support</a> in the <a class="reference internal" href="#exception-test-cpp">exception_test.cpp</a> <a class="reference internal" href="#test-suite">test suite</a>.</p>
+<div class="section" id="factorial-c">
+<h2><a class="toc-backref" href="#id11">2.1.&nbsp;&nbsp;&nbsp;factorial.c</a></h2>
+<pre class="literal-block">
+/*
+ * This file is part of mutest, a simple micro unit testing framework for C.
+ *
+ * mutest was written by Leandro Lucarella &lt;llucax&#64;gmail.com&gt; and is released
+ * under the BOLA license, please see the LICENSE file or visit:
+ * http://blitiri.com.ar/p/bola/
+ *
+ * This is an example module that calculates a factorial.
+ *
+ * Please, read the README file for more details.
+ */
+
+unsigned factorial(unsigned x) {
+       if (x &lt;= 1)
+               return 1;
+       return x * factorial(x-1);
+}
+
+
+</pre>
+</div>
+<div class="section" id="factorial-test-c">
+<h2><a class="toc-backref" href="#id12">2.2.&nbsp;&nbsp;&nbsp;factorial_test.c</a></h2>
+<pre class="literal-block">
+/*
+ * This file is part of mutest, a simple micro unit testing framework for C.
+ *
+ * mutest was written by Leandro Lucarella &lt;llucax&#64;gmail.com&gt; and is released
+ * under the BOLA license, please see the LICENSE file or visit:
+ * http://blitiri.com.ar/p/bola/
+ *
+ * This is the factorial module test suite. Each (public) function starting
+ * with mu_test will be picked up by mkmutest as a test case.
+ *
+ * Please, read the README file for more details.
+ */
+
+#include &quot;factorial.h&quot;
+
+#include &quot;../mutest.h&quot;
+
+void mu_test_factorial_zero() {
+       unsigned x = factorial(0);
+       mu_check(x == 1);
+}
+
+void mu_test_factorial_one() {
+       unsigned x = factorial(1);
+       /* this test is wrong on purpose, to see how it fails */
+       mu_check(x == 2);
+}
+
+void mu_test_factorial_positive() {
+       unsigned x = factorial(2);
+       /* this test is wrong on purpose, to see how it fails */
+       mu_check(x == 3);
+
+       x = factorial(3);
+       /* we don't want to continue if this fails, because the next result
+        * depends on this one. This one will succeed. */
+       mu_ensure(x == 6);
+
+       x = factorial(x);
+       mu_check(x == 720);
+
+       x = factorial(4);
+       mu_ensure(x == 6); /* same as before, but this one will fail. */
+
+       x = factorial(x-15); /* and this will never be executed */
+       mu_check(x == 362881); /* but if excecuted, will fail */
+}
+
+
+</pre>
+</div>
+<div class="section" id="exception-test-cpp">
+<h2><a class="toc-backref" href="#id13">2.3.&nbsp;&nbsp;&nbsp;exception_test.cpp</a></h2>
+<pre class="literal-block">
+/*
+ * This file is part of mutest, a simple micro unit testing framework for C.
+ *
+ * mutest was written by Leandro Lucarella &lt;llucax&#64;gmail.com&gt; and is released
+ * under the BOLA license, please see the LICENSE file or visit:
+ * http://blitiri.com.ar/p/bola/
+ *
+ * This is a C++ module test suite. It shows how to use checks involving
+ * exceptions.
+ *
+ * Please, read the README file for more details.
+ */
+
+#include &lt;stdexcept&gt; // std::out_of_range
+#include &lt;vector&gt; // std::vector
+
+#include &quot;../mutest.h&quot;
+
+extern &quot;C&quot; {
+
+void mu_test_exceptions() {
+       std::vector&lt;int&gt; v(1);
+       // ok
+       mu_check(v.at(0) == 0);
+       // throws! This fails
+       mu_check(v.at(1) == 0);
+       // ok, we expect the exception to be thrown, and it does
+       mu_echeck(std::out_of_range, v.at(1));
+       // fails! We expect this to throw, but it doesn't
+       mu_echeck(std::out_of_range, v.at(0));
+       // fails again, but this time the show is over (note the &quot;ensure&quot;)
+       mu_eensure(std::out_of_range, v.at(0));
+       // this will never be executed (it should fail if it is)
+       mu_check(v.empty());
+}
+
+} // extern &quot;C&quot;
+
+
+</pre>
+</div>
+</div>
+<div class="section" id="concepts">
+<h1><a class="toc-backref" href="#id14">3.&nbsp;&nbsp;&nbsp;Concepts</a></h1>
+<p><em>mutest</em> is about 4 simple concepts: <a class="reference internal" href="#test-program">test program</a>, <a class="reference internal" href="#test-suite">test suite</a>, <a class="reference internal" href="#test-case">test
+case</a> and <a class="reference internal" href="#checks">checks</a>. Well, to be honest you probably will need <a class="reference internal" href="#test-suite">test suite</a>
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> too =)</p>
+<div class="section" id="test-program">
+<h2><a class="toc-backref" href="#id15">3.1.&nbsp;&nbsp;&nbsp;Test Program</a></h2>
+<p>A <strong>test program</strong> is the higher level unit of <em>mutest</em>. The test program is
+the one in charge of running all your tests. Probably one of the more important
+features of <em>mutest</em> is that you are not supposed to bother about the test
+program. So, different <a class="reference internal" href="#implementations">implementations</a> have different ways to tackle this.
+Some need more or less interactions from your part, and each have their pros
+and cons.</p>
+<p>But this is all you need to know for now, for more details see how the test
+program is implemented by your <a class="reference internal" href="#implementations">implementation</a> of choice.</p>
+</div>
+<div class="section" id="test-suite">
+<h2><a class="toc-backref" href="#id16">3.2.&nbsp;&nbsp;&nbsp;Test Suite</a></h2>
+<p>A <strong>test suite</strong> is the higher level unit of <em>mutest</em> that you should
+care about =). Is not much more than a way to group <a class="reference internal" href="#test-case">test cases</a>. Code-wise,
+a test suite is a C (or C++) module (or compilation unit). Not clear enough?
+A unit test is an object file (could be a shared object depending on the
+<a class="reference internal" href="#implementations">implementation</a>). This module should have one or more <a class="reference internal" href="#test-case">test cases</a> and it
+could have any number (including zero) of <a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a>
+functions.</p>
+<p>A test suite, is inspected by the <a class="reference internal" href="#test-program">test program</a> for <a class="reference internal" href="#test-case">test cases</a> and
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions, and run them.</p>
+<p>A test suite fail if one or more <a class="reference internal" href="#test-case">test cases</a> fail, and it's skipped if one or
+more <a class="reference internal" href="#initialization">initialization</a> functions fail (or, depending on the implementation, if
+the test suite can't be loaded at all).</p>
+</div>
+<div class="section" id="test-case">
+<h2><a class="toc-backref" href="#id17">3.3.&nbsp;&nbsp;&nbsp;Test Case</a></h2>
+<p>A <strong>test case</strong> is just a plain function with a special signature and name.
+A test case function name must start with <tt class="docutils literal"><span class="pre">mu_test</span></tt>, and take no arguments
+and return nothing. For example:</p>
+<pre class="literal-block">
+void mu_test_something(void);
+</pre>
+<p>A test case (probably) only make sense if it has <a class="reference internal" href="#checks">checks</a>. A test case succeed
+only if all its checks succeed too.</p>
+<p>Test are executed in an <a class="reference internal" href="#implementations">implementation</a>-dependant order, but usually the
+default order is alphabetical.</p>
+</div>
+<div class="section" id="checks">
+<h2><a class="toc-backref" href="#id18">3.4.&nbsp;&nbsp;&nbsp;Checks</a></h2>
+<p>Checks are assertions that a <a class="reference internal" href="#test-case">test case</a> must pass (a boolean expression that
+must evaluate to <em>true</em>). There are 2 big flavors of checks: <strong>check</strong> and
+<strong>ensure</strong>. <strong>check</strong> just print an error (and <em>mark</em> the <a class="reference internal" href="#test-case">test case</a> as
+failed) and <strong>ensure</strong> halt the <a class="reference internal" href="#test-case">test case</a> execution, jumping to the next
+one.</p>
+<p>For better <a class="reference internal" href="#c-support">C++ support</a> there are check macros that assert that a specified
+exception is thrown (instead of check for a boolean expression to evaluate to
+<em>true</em>).</p>
+<p>You can take a look at the <a class="reference internal" href="#reference">reference</a> to see the different flavors of check
+macros in more detail.</p>
+</div>
+<div class="section" id="initialization">
+<h2><a class="toc-backref" href="#id19">3.5.&nbsp;&nbsp;&nbsp;Initialization</a></h2>
+<p>Sometimes you need to setup some environment shared between all the <a class="reference internal" href="#test-case">test
+cases</a> in a <a class="reference internal" href="#test-suite">test suite</a>. You can use <strong>initialization functions</strong> for this.</p>
+<p>An initialization function, like a <a class="reference internal" href="#test-case">test case</a>, is a plain C function with
+a special name and signature. The name must start with <tt class="docutils literal"><span class="pre">mu_init</span></tt> and it must
+take no arguments, and return an <em>error code</em> (<tt class="docutils literal"><span class="pre">0</span></tt> being success). For
+example:</p>
+<pre class="literal-block">
+int mu_init_something(void);
+</pre>
+<p>All initialization functions are executed before any <a class="reference internal" href="#test-case">test case</a>, in an
+<a class="reference internal" href="#implementations">implementation</a>-dependant order, and if one of them fail (returns non-zero),
+the whole <a class="reference internal" href="#test-suite">test suite</a> is skipped immediately.</p>
+</div>
+<div class="section" id="termination">
+<h2><a class="toc-backref" href="#id20">3.6.&nbsp;&nbsp;&nbsp;Termination</a></h2>
+<p><strong>Termination functions</strong> are just like <a class="reference internal" href="#initialization">initialization</a> functions, but they're
+executed <strong>after</strong> the <a class="reference internal" href="#test-case">test cases</a>, their names start with <tt class="docutils literal"><span class="pre">mu_term</span></tt> and
+they return nothing. For example:</p>
+<pre class="literal-block">
+void mu_term_something(void);
+</pre>
+</div>
+</div>
+<div class="section" id="c-support">
+<h1><a class="toc-backref" href="#id21">4.&nbsp;&nbsp;&nbsp;C++ Support</a></h1>
+<p>You can use <em>mutest</em> with C++, the only care you must take is that, because of
+C++ <a class="reference external" href="http://en.wikipedia.org/wiki/Name_mangling">name mangling</a> (and <em>mutest</em> relaying on function names), you must
+declare your <a class="reference internal" href="#test-case">test cases</a> and <a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions as
+<tt class="docutils literal"><span class="pre">extern</span> <span class="pre">&quot;C&quot;</span></tt> (see <a class="reference internal" href="#exception-test-cpp">exception_test.cpp</a> for an example).</p>
+<p><a class="reference internal" href="#checks">Checks</a> become <em>exception-safe</em> when using <em>mutest</em> with a C++ compiler, and
+2 extra <a class="reference internal" href="#checks">checks</a> designed for C++ get defined (<a class="reference internal" href="#mu-echeck">mu_echeck()</a> and
+<a class="reference internal" href="#mu-eensure">mu_eensure()</a>). They assert that an expression throws a particular exception.</p>
+</div>
+<div class="section" id="implementations">
+<h1><a class="toc-backref" href="#id22">5.&nbsp;&nbsp;&nbsp;Implementations</a></h1>
+<p>There are 2 big groups of possible implementations that I can think
+of: <em>static</em> and <em>dynamic</em>.</p>
+<p><em>mutest</em> comes with one implementation of each group.</p>
+<div class="section" id="static-implementations">
+<h2><a class="toc-backref" href="#id23">5.1.&nbsp;&nbsp;&nbsp;Static Implementations</a></h2>
+<p>Static implementations can be only written in C/C++ (or other language that is
+link-compatible with C, like the <a class="reference external" href="http://www.digitalmars.com/d/">D Programming Language</a>, but since one of
+the main goals of <em>mutest</em> is avoid unnecessary dependencies, you probably
+don't want to depend on an extra language/compiler to run your tests =).</p>
+<p>The main advantage is better debugging support, because you can run the <a class="reference internal" href="#test-program">test
+program</a> in a standard debugger and see what happens with <a class="reference internal" href="#test-case">test cases</a> very
+naturally.</p>
+<p>The main disadvantage is, the <a class="reference internal" href="#test-suite">test suites</a> must be figured out in
+<em>compile-time</em>, usually using some kind of code generation (if you want to
+avoid writing repetitive code yourself). There's also a limitation in the <a class="reference internal" href="#test-case">test
+case</a>, <a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions names: they should be unique
+for all the <a class="reference internal" href="#test-program">test program</a>.</p>
+<div class="section" id="c-implementation">
+<h3><a class="toc-backref" href="#id24">5.1.1.&nbsp;&nbsp;&nbsp;C implementation</a></h3>
+<p><em>mutest</em> comes with a C static implementation. Only 3 files are needed:
+<tt class="docutils literal"><span class="pre">mutest.c</span></tt> (the <em>user-independent</em> part of the <a class="reference internal" href="#test-program">test program</a>), <tt class="docutils literal"><span class="pre">mkmutest</span></tt>
+(a bash script for generating the <em>user-dependent</em> part of the <a class="reference internal" href="#test-program">test program</a>)
+and <tt class="docutils literal"><span class="pre">mutest.h</span></tt> (the header file that <a class="reference internal" href="#test-suite">test suites</a> should include).</p>
+<p>You can copy this 3 files to your project or install them at system-level and
+use them globally.</p>
+<p>The procedure is simple, You should compile you <a class="reference internal" href="#test-suite">test suites</a>, <tt class="docutils literal"><span class="pre">mutest.c</span></tt>
+and the generated output of <tt class="docutils literal"><span class="pre">mkmutest</span></tt> as object files and link them
+together.</p>
+<p>For example:</p>
+<pre class="literal-block">
+$ cc -c -o mutest.o mutest.c
+$ cc -c -o test1.o test1.c
+$ cc -c -o test2.o test2.c
+$ mkmutest mutest.h test1.o test2.o | cc -xc -c -o runmutest.o -
+$ cc -o testprg mutest.o test1.o test2.o runmutest.o
+</pre>
+<p>Then you can run the <a class="reference internal" href="#test-program">test program</a> invoking it with no arguments:</p>
+<pre class="literal-block">
+$ ./testprg
+</pre>
+<div class="section" id="mkmutest-invocation">
+<h4><a class="toc-backref" href="#id25">5.1.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mkmutest</span></tt> Invocation</a></h4>
+<p>This small script take 1 mandatory positional argument: the path to the
+<tt class="docutils literal"><span class="pre">mutest.h</span></tt> file. All remaining positional arguments should be object files
+representing <a class="reference internal" href="#test-suite">test suites</a>.</p>
+</div>
+<div class="section" id="test-program-invocation">
+<h4><a class="toc-backref" href="#id26">5.1.1.2.&nbsp;&nbsp;&nbsp;Test Program Invocation</a></h4>
+<p>The test program can be invoked without arguments, but can take some extra
+options:</p>
+<dl class="docutils">
+<dt><tt class="docutils literal"><span class="pre">-v</span></tt></dt>
+<dd><p class="first">Be verbose. This is accumulative, when you add extra <tt class="docutils literal"><span class="pre">-v</span></tt> you will
+get extra verbosity.</p>
+<p class="last">By default, you just get failed <a class="reference internal" href="#checks">checks</a> printed. If you use a single
+<tt class="docutils literal"><span class="pre">-v</span></tt>, a summary of failed/passed <a class="reference internal" href="#test-suite">test suites</a>, <a class="reference internal" href="#test-case">test cases</a> and
+<a class="reference internal" href="#checks">checks</a> will be printed. If an extra <tt class="docutils literal"><span class="pre">-v</span></tt> is used, you'll see the current
+<a class="reference internal" href="#test-suite">test suite</a> being executed. Another <tt class="docutils literal"><span class="pre">-v</span></tt> and you'll get the current
+<a class="reference internal" href="#test-case">test case</a>, and another one, and you'll get each <a class="reference internal" href="#checks">check</a>.</p>
+</dd>
+</dl>
+</div>
+<div class="section" id="dependencies">
+<h4><a class="toc-backref" href="#id27">5.1.1.3.&nbsp;&nbsp;&nbsp;Dependencies</a></h4>
+<p>Even when dependencies are kept minimal, there always be a few ;)</p>
+<p>To use this implementation you just need:</p>
+<ul class="simple">
+<li>A C compiler (you already needed that, so...)</li>
+<li>The <tt class="docutils literal"><span class="pre">nm</span></tt> program (from <a class="reference external" href="http://www.gnu.org/software/binutils/">GNU Binutils</a>, included in virtually any *NIX)</li>
+<li>The <a class="reference external" href="http://www.gnu.org/software/bash/">GNU Bash</a> shell interpreter (also included in virtually any *NIX)</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="section" id="dynamic-implementations">
+<h2><a class="toc-backref" href="#id28">5.2.&nbsp;&nbsp;&nbsp;Dynamic Implementations</a></h2>
+<p>Dynamic implementations, on the other hand, can be written in any language that
+can access to shared objects. The idea is to inspect a shared object for <a class="reference internal" href="#test-suite">test
+suites</a> and run them, without requiring any information about <a class="reference internal" href="#test-suite">test suites</a>
+at compile time.</p>
+<p>There are several advantages in this kind of implementations. The dynamic
+nature let you completely separate the <a class="reference internal" href="#test-program">test program</a> from the user-written
+<a class="reference internal" href="#test-suite">test suites</a> and you can choose at <em>run-time</em> what <a class="reference internal" href="#test-suite">test suites</a> to execute
+by just selecting the correct shared objects. Also, <a class="reference internal" href="#test-case">test case</a>,
+<a class="reference internal" href="#initialization">initialization</a> and <a class="reference internal" href="#termination">termination</a> functions names only have to be unique in the
+scope of the <a class="reference internal" href="#test-suite">test suites</a>, because <a class="reference internal" href="#test-suite">test suites</a> are completely isolated in
+separate shared objects.</p>
+<p>But everything comes at a price, and the higher price to pay is
+<em>debuggability</em>. It's a little harder to plug a debugger to a shared object.</p>
+<div class="section" id="python-implementation">
+<h3><a class="toc-backref" href="#id29">5.2.1.&nbsp;&nbsp;&nbsp;Python implementation</a></h3>
+<p>This implementation is much simpler and elegant than the <a class="reference internal" href="#c-implementation">C implementation</a>.
+Only 2 files are needed: <tt class="docutils literal"><span class="pre">mutest</span></tt> (<a class="reference internal" href="#test-program">test program</a> written in <a class="reference external" href="http://www.python.org/">Python</a> using
+<a class="reference external" href="http://docs.python.org/library/ctypes.html">ctypes</a> module to access the shared object symbols) and <tt class="docutils literal"><span class="pre">mutest.h</span></tt> (the
+header file that <a class="reference internal" href="#test-suite">test suites</a> should include).</p>
+<p>Since both implementations provided by <em>mutest</em> share the same <tt class="docutils literal"><span class="pre">mutest.h</span></tt>,
+you should define the <tt class="docutils literal"><span class="pre">MUTEST_PY</span></tt> macro when compiling the <a class="reference internal" href="#test-suite">test suites</a> if
+you will run them using this implementation.</p>
+<p>As with the <a class="reference internal" href="#c-implementation">C implementation</a>, you can copy this 2 files to your project or
+install them at system-level and use them globally.</p>
+<p>The procedure is even simpler than the <a class="reference internal" href="#c-implementation">C implementation</a>: compile and link
+you <a class="reference internal" href="#test-suite">test suites</a> as shared objects and then run the <tt class="docutils literal"><span class="pre">mutest</span></tt> program
+passing the shared objects as arguments. For example:</p>
+<pre class="literal-block">
+$ cc -c -fPIC -DMUTEST_PY -o test1.o test1.c
+$ cc -shared -o test1.so test1.o
+$ cc -c -fPIC -DMUTEST_PY -o test2.o test2.c
+$ cc -shared -o test2.so test2.o
+$ mutest test1.so test2.so
+</pre>
+<p>That's it.</p>
+<div class="section" id="mutest-invocation">
+<h4><a class="toc-backref" href="#id30">5.2.1.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mutest</span></tt> Invocation</a></h4>
+<p><tt class="docutils literal"><span class="pre">mutest</span></tt> program takes <a class="reference internal" href="#test-suite">test suites</a> shared objects to run as positional
+arguments. It accepts the same options as the <a class="reference internal" href="#test-program-invocation">C implementation's test
+program</a> and some extra options are accepted too:</p>
+<dl class="docutils">
+<dt><tt class="docutils literal"><span class="pre">--verbose</span></tt></dt>
+<dd>Alias for <tt class="docutils literal"><span class="pre">-v</span></tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">-q</span></tt>, <tt class="docutils literal"><span class="pre">--quiet</span></tt></dt>
+<dd>Be quiet (no output is shown at all).</dd>
+<dt><tt class="docutils literal"><span class="pre">-s</span></tt>, <tt class="docutils literal"><span class="pre">--search</span></tt></dt>
+<dd>Search for <a class="reference internal" href="#test-suite">test suites</a> (*.so) in the current directory and add them
+to the list of <a class="reference internal" href="#test-suite">test suites</a> to run.</dd>
+<dt><tt class="docutils literal"><span class="pre">-h</span></tt>, <tt class="docutils literal"><span class="pre">--help</span></tt></dt>
+<dd>Show a help message and exit.</dd>
+</dl>
+</div>
+<div class="section" id="id8">
+<h4><a class="toc-backref" href="#id31">5.2.1.2.&nbsp;&nbsp;&nbsp;Dependencies</a></h4>
+<p>As with the <a class="reference internal" href="#c-implementation">C implementation</a>, some minor dependencies are needed:</p>
+<ul class="simple">
+<li><a class="reference external" href="http://www.python.org/">Python</a> (2.5 or later)</li>
+<li>The <tt class="docutils literal"><span class="pre">nm</span></tt> program (from <a class="reference external" href="http://www.gnu.org/software/binutils/">GNU Binutils</a>, included in virtually any *NIX)</li>
+</ul>
+<p>You will need a C compiler for building the <a class="reference internal" href="#test-suite">test suites</a> too, but technically
+is not needed by <em>mutest</em> itself ;)</p>
+</div>
+</div>
+</div>
+</div>
+<div class="section" id="reference">
+<h1><a class="toc-backref" href="#id32">6.&nbsp;&nbsp;&nbsp;Reference</a></h1>
+<div class="section" id="mu-check">
+<h2><a class="toc-backref" href="#id33">6.1.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_check()</span></tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal"><span class="pre">mu_check(expression)</span></tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal"><span class="pre">expression</span></tt> evaluates to <em>true</em>. Continue with the
+<a class="reference internal" href="#test-case">test case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>Always</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+void mu_test(void)
+{
+    mu_check(5 == 4); /* fail */
+    mu_check(5 == 5); /* excecuted, pass */
+}
+</pre>
+</dd>
+</dl>
+</div>
+<div class="section" id="mu-ensure">
+<h2><a class="toc-backref" href="#id34">6.2.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_ensure()</span></tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal"><span class="pre">mu_ensure(expression)</span></tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal"><span class="pre">expression</span></tt> evaluates to <em>true</em>. Interrupt the <a class="reference internal" href="#test-case">test
+case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>Always</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+void mu_test(void)
+{
+    mu_ensure(5 == 4); /* fail */
+    mu_check(5 == 5); /* not excecuted */
+}
+</pre>
+</dd>
+</dl>
+</div>
+<div class="section" id="mu-echeck">
+<h2><a class="toc-backref" href="#id35">6.3.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_echeck()</span></tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal"><span class="pre">mu_echeck(class,</span> <span class="pre">expression)</span></tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal"><span class="pre">expression</span></tt> throws a specific exception <tt class="docutils literal"><span class="pre">class</span></tt> (or
+subclass). Continue with the <a class="reference internal" href="#test-case">test case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>C++ only</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+#include &lt;stdexcept&gt;
+
+extern &quot;C&quot;
+{
+    void mu_test(void)
+    {
+        mu_echeck(std::exception, true); /* fail */
+        mu_echeck(std::exception,
+                throw std::runtime_error(&quot;!&quot;)); /* excecuted, pass */
+    }
+}
+</pre>
+</dd>
+</dl>
+</div>
+<div class="section" id="mu-eensure">
+<h2><a class="toc-backref" href="#id36">6.4.&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">mu_eensure()</span></tt></a></h2>
+<dl class="docutils">
+<dt>Synopsis</dt>
+<dd><tt class="docutils literal"><span class="pre">mu_eensure(class,</span> <span class="pre">expression)</span></tt></dd>
+<dt>Description</dt>
+<dd>Check that the <tt class="docutils literal"><span class="pre">expression</span></tt> throws a specific exception <tt class="docutils literal"><span class="pre">class</span></tt> (or
+subclass). Interrupt the <a class="reference internal" href="#test-case">test case</a> if fail.</dd>
+<dt>Availability</dt>
+<dd>C++ only</dd>
+<dt>Example</dt>
+<dd><pre class="first last literal-block">
+#include &lt;stdexcept&gt;
+
+extern &quot;C&quot;
+{
+    void mu_test(void)
+    {
+        mu_eensure(std::exception, true); /* fail */
+        mu_echeck(std::exception,
+                throw std::runtime_error(&quot;!&quot;)); /* not excecuted */
+    }
+}
+</pre>
+</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="about">
+<h1><a class="toc-backref" href="#id37">7.&nbsp;&nbsp;&nbsp;About</a></h1>
+<p>This manual was written using <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>.</p>
+<!-- Use section numbers -->
+<!-- Internal Links (aliases): -->
+<!-- External Links: -->
+<!-- Substitutions: -->
+<!-- vim: set filetype=rst expandtab shiftwidth=4 softtabstop=4 : -->
+</div>
+</div>
+</body>
+</html>
diff --git a/source/proj/mutest/releases/manual-1.0.pdf b/source/proj/mutest/releases/manual-1.0.pdf
new file mode 100644 (file)
index 0000000..f28169b
Binary files /dev/null and b/source/proj/mutest/releases/manual-1.0.pdf differ
diff --git a/source/proj/mutest/releases/manual.html b/source/proj/mutest/releases/manual.html
new file mode 120000 (symlink)
index 0000000..6658b45
--- /dev/null
@@ -0,0 +1 @@
+manual-1.0.html
\ No newline at end of file
diff --git a/source/proj/mutest/releases/manual.pdf b/source/proj/mutest/releases/manual.pdf
new file mode 120000 (symlink)
index 0000000..a4a3038
--- /dev/null
@@ -0,0 +1 @@
+manual-1.0.pdf
\ No newline at end of file
diff --git a/source/proj/mutest/releases/mutest-1.0.tar.gz b/source/proj/mutest/releases/mutest-1.0.tar.gz
new file mode 100644 (file)
index 0000000..95a1c35
Binary files /dev/null and b/source/proj/mutest/releases/mutest-1.0.tar.gz differ
diff --git a/source/proj/mutest/releases/mutest.tar.gz b/source/proj/mutest/releases/mutest.tar.gz
new file mode 120000 (symlink)
index 0000000..a065ef5
--- /dev/null
@@ -0,0 +1 @@
+mutest-1.0.tar.gz
\ No newline at end of file