commit - 2417f237d54f9807fde5da34c86d136373b676bb
commit + 3de17a6d16e524d8417650a238cb76c8929b08ad
blob - bc6c754120b828f70baba3052e5680475ff9acf7
blob + 9bf28a2b020b993929c1427670a0c48e49cb39c1
--- examples/sqlite-list-append.lua.html
+++ examples/sqlite-list-append.lua.html
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><strong>sqlite-list-append.lua</strong></li>
</ul>
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<div id="content">
- <h2>sqlite-list-append.lua</h2>
-<pre>
+ <pre>
<span class="comment">-- https://www.sqlite.org/isolation.html
</span><span class="comment">-- https://www.sqlite.org/threadsafe.html
</span><span class="comment">-- https://www.sqlite.org/atomiccommit.html
sqlite_list_append.open = <span class="keyword">function</span>(self)
self.db = <span class="global">assert</span>(sqlite3.open_memory(), <span class="string">'database handle is nil'</span>)
<span class="keyword">if</span> self.db == <span class="keyword">nil</span> <span class="keyword">then</span>
- <span class="global">error</span>(<span class="string">'database handle is nil'</span>)
+ error(<span class="string">'database handle is nil'</span>)
<span class="keyword">end</span>
<span class="comment">-- See explanation in https://www.sqlite.org/pragma.html
</span> <span class="global">assert</span>(sqlite3.OK == self.db:exec(<span class="string">'PRAGMA journal_mode = WAL'</span>))
<span class="global">type</span> = <span class="string">'fail'</span>
<span class="keyword">end</span>
<span class="keyword">else</span>
- <span class="global">error</span>(<span class="string">'Unknown operation'</span>)
+ error(<span class="string">'Unknown operation'</span>)
<span class="keyword">end</span>
<span class="keyword">return</span> {
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 375dd7dd358b0136e2e230ce69046d22dde557c1
blob + 97649188be7af4afa3b49faf9b253ca7499cdfd0
--- examples/sqlite-rw-register.lua.html
+++ examples/sqlite-rw-register.lua.html
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><strong>sqlite-rw-register.lua</strong></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<div id="content">
- <h2>sqlite-rw-register.lua</h2>
-<pre>
+ <pre>
<span class="comment">-- https://www.sqlite.org/isolation.html
</span><span class="comment">-- https://www.sqlite.org/threadsafe.html
</span><span class="comment">-- https://www.sqlite.org/atomiccommit.html
<span class="global">type</span> = <span class="string">'fail'</span>
<span class="keyword">end</span>
<span class="keyword">else</span>
- <span class="global">error</span>(<span class="string">'Unknown operation'</span>)
+ error(<span class="string">'Unknown operation'</span>)
<span class="keyword">end</span>
<span class="keyword">return</span> {
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 04f4368a9def3604273737d02bfa430a33e0a0cd
blob + 6df809270e4f628ba54815e522a404d71fb8eac7
--- index.html
+++ index.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="modules/molly.client.html">molly.client</a></li>
- <li><a href="modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="modules/molly.db.html">molly.db</a></li>
- <li><a href="modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="modules/molly.runner.html">molly.runner</a></li>
<li><a href="modules/molly.history.html">molly.history</a></li>
+ <li><a href="modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="modules/molly.op.html">molly.op</a></li>
+ <li><a href="modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="modules/molly.client.html">molly.client</a></li>
<li><a href="modules/molly.html">molly</a></li>
- <li><a href="modules/molly.log.html">molly.log</a></li>
+ <li><a href="modules/molly.db.html">molly.db</a></li>
+ <li><a href="modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="modules/molly.op.html">molly.op</a></li>
- <li><a href="modules/molly.runner.html">molly.runner</a></li>
- <li><a href="modules/molly.tests.html">molly.tests</a></li>
<li><a href="modules/molly.thread.html">molly.thread</a></li>
- <li><a href="modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<h2>Modules</h2>
<table class="module_list">
<tr>
- <td class="name" nowrap><a href="modules/molly.client.html">molly.client</a></td>
- <td class="summary">Module with default Molly client.</td>
+ <td class="name" nowrap><a href="modules/molly.tests.html">molly.tests</a></td>
+ <td class="summary">Module with test generators and checkers.</td>
</tr>
<tr>
- <td class="name" nowrap><a href="modules/molly.thread_coroutine.html">molly.thread_coroutine</a></td>
- <td class="summary">Module with implementation of threads based on coroutines.</td>
+ <td class="name" nowrap><a href="modules/molly.runner.html">molly.runner</a></td>
+ <td class="summary">Module with main functions that runs tests.</td>
</tr>
<tr>
- <td class="name" nowrap><a href="modules/molly.thread_fiber.html">molly.thread_fiber</a></td>
- <td class="summary">Module with implementation of threads based on fibers.</td>
- </tr>
- <tr>
- <td class="name" nowrap><a href="modules/molly.db.html">molly.db</a></td>
- <td class="summary">Module with default DB implementation.</td>
- </tr>
- <tr>
- <td class="name" nowrap><a href="modules/molly.gen.html">molly.gen</a></td>
- <td class="summary">Module with functions for generators.</td>
- </tr>
- <tr>
<td class="name" nowrap><a href="modules/molly.history.html">molly.history</a></td>
<td class="summary">Module with functions that processes history of operations.</td>
</tr>
<tr>
+ <td class="name" nowrap><a href="modules/molly.utils.html">molly.utils</a></td>
+ <td class="summary">Helpers.</td>
+ </tr>
+ <tr>
+ <td class="name" nowrap><a href="modules/molly.op.html">molly.op</a></td>
+ <td class="summary">Module with helpers that processes operations.</td>
+ </tr>
+ <tr>
+ <td class="name" nowrap><a href="modules/molly.gen.html">molly.gen</a></td>
+ <td class="summary">Module with functions for generators.</td>
+ </tr>
+ <tr>
+ <td class="name" nowrap><a href="modules/molly.client.html">molly.client</a></td>
+ <td class="summary">Module with default Molly client.</td>
+ </tr>
+ <tr>
<td class="name" nowrap><a href="modules/molly.html">molly</a></td>
<td class="summary">Framework for distributed system's verification, with fault injection.</td>
</tr>
<tr>
- <td class="name" nowrap><a href="modules/molly.log.html">molly.log</a></td>
- <td class="summary">Module with functions for logging.</td>
+ <td class="name" nowrap><a href="modules/molly.db.html">molly.db</a></td>
+ <td class="summary">Module with default DB implementation.</td>
</tr>
<tr>
+ <td class="name" nowrap><a href="modules/molly.thread_fiber.html">molly.thread_fiber</a></td>
+ <td class="summary">Module with implementation of threads based on fibers.</td>
+ </tr>
+ <tr>
+ <td class="name" nowrap><a href="modules/molly.thread_coroutine.html">molly.thread_coroutine</a></td>
+ <td class="summary">Module with implementation of threads based on coroutines.</td>
+ </tr>
+ <tr>
<td class="name" nowrap><a href="modules/molly.nemesis.html">molly.nemesis</a></td>
<td class="summary">Module with nemeses.</td>
</tr>
<tr>
- <td class="name" nowrap><a href="modules/molly.op.html">molly.op</a></td>
- <td class="summary">Module with helpers that processes operations.</td>
- </tr>
- <tr>
- <td class="name" nowrap><a href="modules/molly.runner.html">molly.runner</a></td>
- <td class="summary">Module with main functions that runs tests.</td>
- </tr>
- <tr>
- <td class="name" nowrap><a href="modules/molly.tests.html">molly.tests</a></td>
- <td class="summary">Module with test generators and checkers.</td>
- </tr>
- <tr>
<td class="name" nowrap><a href="modules/molly.thread.html">molly.thread</a></td>
<td class="summary">Module with thread implementation.</td>
</tr>
<tr>
- <td class="name" nowrap><a href="modules/molly.utils.html">molly.utils</a></td>
- <td class="summary">Helpers.</td>
+ <td class="name" nowrap><a href="modules/molly.log.html">molly.log</a></td>
+ <td class="summary">Module with functions for logging.</td>
</tr>
</table>
<h2>Topics</h2>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 52c4ad2bd8a2fd0aa045eb3025c01d37b10d6b31
blob + 765c710af49213471a272ce11e678150d1139aa5
--- ldoc.css
+++ ldoc.css
text-decoration: none;
}
li {
+ list-style: disc;
margin-left: 20px;
}
caption,th {
background-color: #ffffff; margin: 0px;
}
-code, tt { font-family: monospace; font-size: 1.1em; }
+code, tt { font-family: monospace; }
span.parameter { font-family:monospace; }
span.parameter:after { content:":"; }
span.types:before { content:"("; }
h1 {
font-size: 1.5em;
- margin: 20px 0 20px 0;
+ margin: 0 0 20px 0;
}
h2, h3, h4 { margin: 15px 0 10px 0; }
h2 { font-size: 1.25em; }
padding-top: 1em;
}
-pre {
- background-color: rgb(245, 245, 245);
- border: 1px solid #C0C0C0; /* silver */
- padding: 10px;
- margin: 10px 0 10px 0;
- overflow: auto;
- font-family: "Andale Mono", monospace;
-}
-
pre.example {
+ background-color: rgb(245, 245, 245);
+ border: 1px solid silver;
+ padding: 10px;
+ margin: 10px 0 10px 0;
+ font-family: "Andale Mono", monospace;
font-size: .85em;
}
+pre {
+ background-color: rgb(245, 245, 245);
+ border: 1px solid silver;
+ padding: 10px;
+ margin: 10px 0 10px 0;
+ overflow: auto;
+ font-family: "Andale Mono", monospace;
+}
+
+
table.index { border: 1px #00007f; }
table.index td { text-align: left; vertical-align: top; }
#navigation {
float: left;
- width: 14em;
+ width: 18em;
vertical-align: top;
background-color: #f0f0f0;
overflow: visible;
}
#content {
- margin-left: 14em;
+ margin-left: 18em;
padding: 1em;
width: 700px;
border-left: 2px solid #cccccc;
ol ol { margin-top: 0px; }
ul ol { margin-top: 0px; }
-/* make the target distinct; helps when we're navigating to a function */
-a:target + * {
- background-color: #FF9;
-}
-
-
/* styles for prettification of source */
pre .comment { color: #558817; }
pre .constant { color: #a8660d; }
pre .escape { color: #844631; }
-pre .keyword { color: #aa5050; font-weight: bold; }
+pre .keyword { color: #2239a8; font-weight: bold; }
pre .library { color: #0e7c6b; }
pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; }
-pre .string { color: #8080ff; }
+pre .string { color: #a8660d; }
pre .number { color: #f8660d; }
pre .operator { color: #2239a8; font-weight: bold; }
pre .preprocessor, pre .prepro { color: #a33243; }
pre .global { color: #800080; }
-pre .user-keyword { color: #800080; }
pre .prompt { color: #558817; }
pre .url { color: #272fc2; text-decoration: underline; }
-
blob - 6c0ecb394887c3fd62be43b64f0aeed0205079c3
blob + dc84926f54c614c20b32df4e7d43a35a137efe17
--- modules/molly.client.html
+++ modules/molly.client.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><strong>molly.client</strong></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><strong>molly.client</strong></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<p>
</p>
- <h3>See also:</h3>
- <ul>
- <li><a href="../modules/molly.gen.html#">molly.gen</a></li>
- <li><a href="../modules/molly.tests.html#">molly.tests</a></li>
- </ul>
<h2><a href="#Functions">Functions</a></h2>
<br/>
- <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
+ <h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "new"></a>
<h3>Usage:</h3>
<ul>
- <pre class="example"><span class="keyword">local</span> client = <span class="global">require</span>(<span class="string">'molly'</span>).client.new()
-client.invoke = <span class="keyword">function</span>(op)
- <span class="keyword">return</span> <span class="keyword">true</span>
-<span class="keyword">end</span></pre>
+ <pre class="example">
+ <span class="keyword">local</span> client = <span class="global">require</span>(<span class="string">'molly'</span>).client.new()
+ client.invoke = <span class="keyword">function</span>(op)
+ <span class="keyword">return</span> <span class="keyword">true</span>
+ <span class="keyword">end</span></pre>
</ul>
</dd>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - f9d8c4b98a06f50e95c038e8b012917ec8457ed3
blob + 2e5f15affcd019f07070705c00e55dabf7811a42
--- modules/molly.db.html
+++ modules/molly.db.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><strong>molly.db</strong></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><strong>molly.db</strong></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<br/>
- <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
+ <h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "new"></a>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - c33fb7f8a9cab839a7793957717cb2acf1cf9647
blob + 8164d94d6dceb392d73fd550440b38f8dcd194c6
--- modules/molly.gen.html
+++ modules/molly.gen.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><strong>molly.gen</strong></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><strong>molly.gen</strong></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<p> Example of generator that generates two operations <code>w</code> and <code>r</code>:</p>
+<pre><code>local w = function() return { f = 'w', v = math.random(1, 10) } end
+local r = function() return { f = 'r', v = nil } end
+gen.rands(0, 2):map(function(x)
+ return (x == 0 and r()) or
+ (x == 1 and w()))
+ end):take(100)
-<pre>
-<span class="keyword">local</span> w = <span class="keyword">function</span>() <span class="keyword">return</span> { f = <span class="string">'w'</span>, v = <span class="global">math</span>.random(<span class="number">1</span>, <span class="number">10</span>) } <span class="keyword">end</span>
-<span class="keyword">local</span> r = <span class="keyword">function</span>() <span class="keyword">return</span> { f = <span class="string">'r'</span>, v = <span class="keyword">nil</span> } <span class="keyword">end</span>
-gen.rands(<span class="number">0</span>, <span class="number">2</span>):map(<span class="keyword">function</span>(x)
- <span class="keyword">return</span> (x == <span class="number">0</span> <span class="keyword">and</span> r()) <span class="keyword">or</span>
- (x == <span class="number">1</span> <span class="keyword">and</span> w()))
- <span class="keyword">end</span>):take(<span class="number">100</span>)
+local w = function(x) return { f = 'w', v = x } end
+gen.map(w, gen.rands(1, 10):take(50))
+</code></pre>
-<span class="keyword">local</span> w = <span class="keyword">function</span>(x) <span class="keyword">return</span> { f = <span class="string">'w'</span>, v = x } <span class="keyword">end</span>
-gen.map(w, gen.rands(<span class="number">1</span>, <span class="number">10</span>):take(<span class="number">50</span>))
-</pre>
-
<h3>References:</h3>
<ul>
<li><a href="http://lua-users.org/wiki/IteratorsTutorial">Lua iterators tutorial</a></li>
<li><a href="http://jepsen-io.github.io/jepsen/jepsen.generator.html">Jepsen generators in a nutshell</a></li>
</ul>
+
</p>
- <h3>See also:</h3>
- <ul>
- <a href="../modules/molly.op.html#">molly.op</a>
- </ul>
<h2><a href="#Basic_Functions">Basic Functions </a></h2>
</tr>
<tr>
<td class="name" nowrap><a href="#grep">grep ()</a></td>
- <td class="summary">If <code>regexp_or_predicate</code> is string then the parameter is used as a regular
+ <td class="summary">If <code>regexp<em>or</em>predicate</code> is string then the parameter is used as a regular
expression to build filtering predicate.</td>
</tr>
<tr>
<br/>
- <h2 class="section-header "><a name="Basic_Functions"></a>Basic Functions </h2>
+ <h2><a name="Basic_Functions"></a>Basic Functions </h2>
<dl class="function">
<dt>
<h3>Usage:</h3>
<ul>
- <pre class="example">> <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.iter({<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>}) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
-<span class="number">1</span>
-<span class="number">2</span>
-<span class="number">3</span>
-<span class="comment">---
-</span>...
+ <pre class="example">
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.iter({<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>}) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
+ <span class="number">1</span>
+ <span class="number">2</span>
+ <span class="number">3</span>
+ <span class="comment">---
+</span> ...
-> <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.iter({a = <span class="number">1</span>, b = <span class="number">2</span>, c = <span class="number">3</span>}) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
-b
-a
-c
-<span class="comment">---
-</span>...
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.iter({a = <span class="number">1</span>, b = <span class="number">2</span>, c = <span class="number">3</span>}) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
+ b
+ a
+ c
+ <span class="comment">---
+</span> ...
-> <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.iter(<span class="string">"abc"</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
-a
-b
-c
-<span class="comment">---
-</span>...</pre>
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.iter(<span class="string">"abc"</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
+ a
+ b
+ c
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
<h3>Usage:</h3>
<ul>
- <pre class="example">> gen.each(<span class="global">print</span>, { a = <span class="number">1</span>, b = <span class="number">2</span>, c = <span class="number">3</span>})
-b <span class="number">2</span>
-a <span class="number">1</span>
-c <span class="number">3</span>
-<span class="comment">---
-</span>...</pre>
+ <pre class="example">
+
+ > gen.each(<span class="global">print</span>, { a = <span class="number">1</span>, b = <span class="number">2</span>, c = <span class="number">3</span>})
+ b <span class="number">2</span>
+ a <span class="number">1</span>
+ c <span class="number">3</span>
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
</dt>
<dd>
An alias for each().
- See <a href="../modules/molly.gen.html#each">gen.each</a>.
+ See <a href="../modules/molly.gen.html#each">gen.each</a> .
</dt>
<dd>
An alias for each().
- See <a href="../modules/molly.gen.html#each">gen.each</a>.
+ See <a href="../modules/molly.gen.html#each">gen.each</a> .
</dd>
</dl>
- <h2 class="section-header "><a name="Generators__Finite_Generators"></a>Generators: Finite Generators </h2>
+ <h2><a name="Generators__Finite_Generators"></a>Generators: Finite Generators </h2>
<dl class="function">
<dt>
The iterator to create arithmetic progressions.
Iteration values are generated within closed interval <code>[start, stop]</code> (i.e.
<code>stop</code> is included). If the <code>start</code> argument is omitted, it defaults to 1 (<code>stop
- > 0</code>) or to -1 (<code>stop < 0</code>). If the <code>step</code> argument is omitted, it defaults to 1
- (<code>start <= stop</code>) or to -1 (<code>start > stop</code>). If <code>step</code> is positive, the last
+ > 0</code>) or to -1 (<code>stop < 0</code>). If the <code>step</code> argument is omitted, it defaults to 1
+ (<code>start <= stop</code>) or to -1 (<code>start > stop</code>). If <code>step</code> is positive, the last
element is the largest <code>start + i * step</code> less than or equal to <code>stop</code>; if <code>step</code>
is negative, the last element is the smallest <code>start + i * step</code> greater than
or equal to <code>stop</code>. <code>step</code> must not be zero (or else an error is raised).
<li><span class="parameter">start</span>
<span class="types"><span class="type">number</span></span>
– an endpoint of the interval.
- (<em>optional</em>)
</li>
<li><span class="parameter">stop</span>
<span class="types"><span class="type">number</span></span>
<li><span class="parameter">step</span>
<span class="types"><span class="type">number</span></span>
– a step.
- (<em>optional</em>)
</li>
</ul>
<h3>Usage:</h3>
<ul>
- <pre class="example">> <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.range(<span class="number">1</span>, <span class="number">6</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
-<span class="number">1</span>
-<span class="number">2</span>
-<span class="number">3</span>
-<span class="number">4</span>
-<span class="number">5</span>
-<span class="number">6</span>
-<span class="comment">---
-</span>...
+ <pre class="example">
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.range(<span class="number">1</span>, <span class="number">6</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
+ <span class="number">1</span>
+ <span class="number">2</span>
+ <span class="number">3</span>
+ <span class="number">4</span>
+ <span class="number">5</span>
+ <span class="number">6</span>
+ <span class="comment">---
+</span> ...
-> <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.range(<span class="number">1</span>, <span class="number">6</span>, <span class="number">2</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
-<span class="number">1</span>
-<span class="number">3</span>
-<span class="number">5</span>
-<span class="comment">---
-</span>...</pre>
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.range(<span class="number">1</span>, <span class="number">6</span>, <span class="number">2</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
+ <span class="number">1</span>
+ <span class="number">3</span>
+ <span class="number">5</span>
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
</dl>
- <h2 class="section-header "><a name="Generators__Infinity_Generators"></a>Generators: Infinity Generators </h2>
+ <h2><a name="Generators__Infinity_Generators"></a>Generators: Infinity Generators </h2>
<dl class="function">
<dt>
<h3>Usage:</h3>
<ul>
- <pre class="example">> gen.each(<span class="global">print</span>, gen.take(<span class="number">3</span>, gen.duplicate(<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>)))
-a b c
-a b c
-a b c
-<span class="comment">---
-</span>...</pre>
+ <pre class="example">
+ > gen.each(<span class="global">print</span>, gen.take(<span class="number">3</span>, gen.duplicate(<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>)))
+ a b c
+ a b c
+ a b c
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
</dt>
<dd>
An alias for duplicate().
- See <a href="../modules/molly.gen.html#duplicate">gen.duplicate</a>.
+ See <a href="../modules/molly.gen.html#duplicate">gen.duplicate</a> .
</dt>
<dd>
An alias for duplicate().
- See <a href="../modules/molly.gen.html#duplicate">gen.duplicate</a>.
+ See <a href="../modules/molly.gen.html#duplicate">gen.duplicate</a> .
</dd>
</dl>
- <h2 class="section-header "><a name="Generators__Random_sampling"></a>Generators: Random sampling </h2>
+ <h2><a name="Generators__Random_sampling"></a>Generators: Random sampling </h2>
<dl class="function">
<dt>
<strong>rands ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/generators.html#fun.rands">fun.rands</a>.
+ See <a href="https://luafun.github.io/generators.html#fun.rands">fun.rands</a>.
+
</dd>
</dl>
- <h2 class="section-header "><a name="Slicing__Subsequences"></a>Slicing: Subsequences </h2>
+ <h2><a name="Slicing__Subsequences"></a>Slicing: Subsequences </h2>
<dl class="function">
<dt>
<strong>take_n ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/slicing.html#fun.take_n">fun.take_n</a>.
+ See <a href="https://luafun.github.io/slicing.html#fun.take_n">fun.take_n</a>.
+
</dd>
<dt>
<a name = "take_while"></a>
<strong>take_while ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/slicing.html#fun.take_while">fun.take_while</a>.
+ See <a href="https://luafun.github.io/slicing.html#fun.take_while">fun.take_while</a>.
+
</dd>
<dt>
<a name = "take"></a>
<strong>take ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/slicing.html#fun.take">fun.take</a>.
+ See <a href="https://luafun.github.io/slicing.html#fun.take">fun.take</a>.
+
</dd>
<dt>
<a name = "drop_n"></a>
<strong>drop_n ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/slicing.html#fun.drop_n">fun.drop_n</a>.
+ See <a href="https://luafun.github.io/slicing.html#fun.drop_n">fun.drop_n</a>.
+
</dd>
<dt>
<a name = "drop_while"></a>
<strong>drop_while ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/slicing.html#fun.drop_while">fun.drop_while</a>.
+ See <a href="https://luafun.github.io/slicing.html#fun.drop_while">fun.drop_while</a>.
+
</dd>
<dt>
<a name = "drop"></a>
<strong>drop ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/slicing.html#fun.drop">fun.drop</a>.
+ See <a href="https://luafun.github.io/slicing.html#fun.drop">fun.drop</a>.
+
</dd>
<dt>
<a name = "span"></a>
<strong>span ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/slicing.html#fun.span">fun.span</a>.
+ See <a href="https://luafun.github.io/slicing.html#fun.span">fun.span</a>.
+
</dd>
<dt>
<a name = "split"></a>
</dd>
</dl>
- <h2 class="section-header "><a name="Indexing"></a>Indexing </h2>
+ <h2><a name="Indexing"></a>Indexing </h2>
<dl class="function">
<dt>
<strong>index ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/indexing.html#fun.index">fun.index</a>.
+ See <a href="https://luafun.github.io/indexing.html#fun.index">fun.index</a>.
+
</dd>
<dt>
<a name = "index_of"></a>
<strong>indexes ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/indexing.html#fun.indexes">fun.indexes</a>.
+ See <a href="https://luafun.github.io/indexing.html#fun.indexes">fun.indexes</a>.
+
</dd>
<dt>
<a name = "indices"></a>
</dd>
</dl>
- <h2 class="section-header "><a name="Filtering"></a>Filtering </h2>
+ <h2><a name="Filtering"></a>Filtering </h2>
<dl class="function">
<dt>
</dt>
<dd>
An alias for filter().
- See <a href="../modules/molly.gen.html#filter">gen.filter</a>.
+ See <a href="../modules/molly.gen.html#filter">gen.filter</a> .
<strong>grep ()</strong>
</dt>
<dd>
- If <code>regexp_or_predicate</code> is string then the parameter is used as a regular
+ If <code>regexp<em>or</em>predicate</code> is string then the parameter is used as a regular
expression to build filtering predicate. Otherwise the function is just an
alias for gen.filter().
See <a href="https://luafun.github.io/filtering.html#fun.grep">fun.grep</a>.
</dd>
</dl>
- <h2 class="section-header "><a name="Reducing__Folds"></a>Reducing: Folds </h2>
+ <h2><a name="Reducing__Folds"></a>Reducing: Folds </h2>
<dl class="function">
<dt>
</dt>
<dd>
An alias to foldl().
- See <a href="../modules/molly.gen.html#foldl">gen.foldl</a>.
+ See <a href="../modules/molly.gen.html#foldl">gen.foldl</a> .
</dd>
</dl>
- <h2 class="section-header "><a name="Reducing__Predicates"></a>Reducing: Predicates </h2>
+ <h2><a name="Reducing__Predicates"></a>Reducing: Predicates </h2>
<dl class="function">
<dt>
<strong>is_prefix_of ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/reducing.html#fun.is_prefix_of">fun.is<em>prefix</em>of</a>.
+ See <a href="https://luafun.github.io/reducing.html#fun.is_prefix_of">fun.is<em>prefix</em>of</a>.
+
</dd>
<dt>
<a name = "is_null"></a>
<strong>is_null ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/reducing.html#fun.is_null">fun.is_null</a>.
+ See <a href="https://luafun.github.io/reducing.html#fun.is_null">fun.is_null</a>.
+
</dd>
<dt>
<a name = "all"></a>
<strong>all ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/reducing.html#fun.all">fun.all</a>.
+ See <a href="https://luafun.github.io/reducing.html#fun.all">fun.all</a>.
+
</dd>
<dt>
<a name = "every"></a>
<strong>any ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/reducing.html#fun.any">fun.any</a>.
+ See <a href="https://luafun.github.io/reducing.html#fun.any">fun.any</a>.
+
</dd>
<dt>
<a name = "some"></a>
</dd>
</dl>
- <h2 class="section-header "><a name="Transformations"></a>Transformations </h2>
+ <h2><a name="Transformations"></a>Transformations </h2>
<dl class="function">
<dt>
<strong>map ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/transformations.html#fun.map">fun.map</a>.
+ See <a href="https://luafun.github.io/transformations.html#fun.map">fun.map</a>.
+
</dd>
<dt>
<a name = "enumerate"></a>
<strong>enumerate ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/transformations.html#fun.enumerate">fun.enumerate</a>.
+ See <a href="https://luafun.github.io/transformations.html#fun.enumerate">fun.enumerate</a>.
+
</dd>
<dt>
<a name = "intersperse"></a>
<strong>intersperse ()</strong>
</dt>
<dd>
- See <a href="https://luafun.github.io/transformations.html#fun.intersperse">fun.intersperse</a>.
+ See <a href="https://luafun.github.io/transformations.html#fun.intersperse">fun.intersperse</a>.
+
</dd>
</dl>
- <h2 class="section-header "><a name="Compositions"></a>Compositions </h2>
+ <h2><a name="Compositions"></a>Compositions </h2>
<dl class="function">
<dt>
<h3>Usage:</h3>
<ul>
- <pre class="example">> fun.each(<span class="global">print</span>, fun.chain(fun.range(<span class="number">5</span>, <span class="number">1</span>, -<span class="number">1</span>), fun.range(<span class="number">1</span>, <span class="number">5</span>)))
-<span class="number">5</span>
-<span class="number">4</span>
-<span class="number">3</span>
-<span class="number">2</span>
-<span class="number">1</span>
-<span class="number">1</span>
-<span class="number">2</span>
-<span class="number">3</span>
-<span class="number">4</span>
-<span class="number">5</span>
-<span class="comment">---
-</span>...</pre>
+ <pre class="example">
+ > fun.each(<span class="global">print</span>, fun.chain(fun.range(<span class="number">5</span>, <span class="number">1</span>, -<span class="number">1</span>), fun.range(<span class="number">1</span>, <span class="number">5</span>)))
+ <span class="number">5</span>
+ <span class="number">4</span>
+ <span class="number">3</span>
+ <span class="number">2</span>
+ <span class="number">1</span>
+ <span class="number">1</span>
+ <span class="number">2</span>
+ <span class="number">3</span>
+ <span class="number">4</span>
+ <span class="number">5</span>
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
</dd>
</dl>
- <h2 class="section-header "><a name="Special_generators"></a>Special generators </h2>
+ <h2><a name="Special_generators"></a>Special generators </h2>
<dl class="function">
<dt>
<h3>Usage:</h3>
<ul>
- <pre class="example">> <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.time_limit(gen.range(<span class="number">1</span>, <span class="number">100</span>), <span class="number">0.0001</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
-<span class="number">1</span>
-<span class="number">2</span>
-<span class="number">3</span>
-<span class="number">4</span>
-<span class="number">5</span>
-<span class="number">6</span>
-<span class="number">7</span>
-<span class="number">8</span>
-<span class="number">9</span>
-<span class="number">10</span>
-<span class="number">11</span>
-<span class="number">12</span>
-<span class="comment">---
-</span>...</pre>
+ <pre class="example">
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> gen.time_limit(gen.range(<span class="number">1</span>, <span class="number">100</span>), <span class="number">0.0001</span>) <span class="keyword">do</span> <span class="global">print</span>(v) <span class="keyword">end</span>
+ <span class="number">1</span>
+ <span class="number">2</span>
+ <span class="number">3</span>
+ <span class="number">4</span>
+ <span class="number">5</span>
+ <span class="number">6</span>
+ <span class="number">7</span>
+ <span class="number">8</span>
+ <span class="number">9</span>
+ <span class="number">10</span>
+ <span class="number">11</span>
+ <span class="number">12</span>
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 742be2a05d0cfff43e25fbbf1e2a48292ac52423
blob + e4083832fa03ae021cbaa4508d61c7a1c3cc4f05
--- modules/molly.history.html
+++ modules/molly.history.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><strong>molly.history</strong></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 568f1e9e455935cb07cdcd04cb622266707935e8
blob + 1c8d2ff3c526aafcaf11a335dc4a536241677309
--- modules/molly.html
+++ modules/molly.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><strong>molly</strong></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 1c8c87237fa4d65188c5a78427ce5d7a563e1ad5
blob + cb9d5f00220f5f74af7d9d295c99aaa60a127076
--- modules/molly.log.html
+++ modules/molly.log.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><strong>molly.log</strong></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><strong>molly.log</strong></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<br/>
- <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
+ <h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "trace"></a>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Message.
</li>
</ul>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Message.
</li>
</ul>
<h3>Usage:</h3>
<ul>
- <pre class="example">> <span class="keyword">local</span> log = <span class="global">require</span>(<span class="string">'molly.log'</span>)
-> log.<span class="global">debug</span>(<span class="string">'Total planned requests: 1010'</span>)
-[DEBUG <span class="number">2021</span>-<span class="number">12</span>-<span class="number">1</span> <span class="number">12</span>:<span class="number">26</span>:<span class="number">8</span>:<span class="number">689379</span>] /home/sergeyb/sources/molly/jepsen/runner.lua:<span class="number">80</span>: Total planned requests: <span class="number">1010</span></pre>
+ <pre class="example">
+ > <span class="keyword">local</span> log = <span class="global">require</span>(<span class="string">'molly.log'</span>)
+ > log.<span class="global">debug</span>(<span class="string">'Total planned requests: 1010'</span>)
+ [DEBUG <span class="number">2021</span>-<span class="number">12</span>-<span class="number">1</span> <span class="number">12</span>:<span class="number">26</span>:<span class="number">8</span>:<span class="number">689379</span>] /home/sergeyb/sources/molly/jepsen/runner.lua:<span class="number">80</span>: Total planned requests: <span class="number">1010</span></pre>
</ul>
</dd>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Message.
</li>
</ul>
<h3>Usage:</h3>
<ul>
- <pre class="example">> <span class="keyword">local</span> log = <span class="global">require</span>(<span class="string">'molly.log'</span>)
-> log.info(<span class="string">'Message'</span>)
-[INFO <span class="number">2021</span>-<span class="number">12</span>-<span class="number">7</span> <span class="number">13</span>:<span class="number">17</span>:<span class="number">46</span>:<span class="number">073544</span>]: Message</pre>
+ <pre class="example">
+ > <span class="keyword">local</span> log = <span class="global">require</span>(<span class="string">'molly.log'</span>)
+ > log.info(<span class="string">'Message'</span>)
+ [INFO <span class="number">2021</span>-<span class="number">12</span>-<span class="number">7</span> <span class="number">13</span>:<span class="number">17</span>:<span class="number">46</span>:<span class="number">073544</span>]: Message</pre>
</ul>
</dd>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Message.
</li>
</ul>
<h3>Usage:</h3>
<ul>
- <pre class="example">> <span class="keyword">local</span> log = <span class="global">require</span>(<span class="string">'jepsen.log'</span>)
-> log.warn(<span class="string">'Message'</span>)
-[WARN <span class="number">2021</span>-<span class="number">12</span>-<span class="number">7</span> <span class="number">13</span>:<span class="number">17</span>:<span class="number">46</span>:<span class="number">073544</span>]: Message</pre>
+ <pre class="example">
+ > <span class="keyword">local</span> log = <span class="global">require</span>(<span class="string">'jepsen.log'</span>)
+ > log.warn(<span class="string">'Message'</span>)
+ [WARN <span class="number">2021</span>-<span class="number">12</span>-<span class="number">7</span> <span class="number">13</span>:<span class="number">17</span>:<span class="number">46</span>:<span class="number">073544</span>]: Message</pre>
</ul>
</dd>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Message.
</li>
</ul>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Message.
</li>
</ul>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 093afd504e9125e1c451d933a39caa90800fa685
blob + c2799bee3786bdf5f4e4e32bcc735fb854a6dd11
--- modules/molly.nemesis.html
+++ modules/molly.nemesis.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><strong>molly.nemesis</strong></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<p> A nemesis is a process that will be fed operations from a generator process
and then take action against the system accordingly.</p>
-
-<pre>
-{ <span class="global">type</span> = <span class="string">"info"</span>, f = <span class="string">"start"</span>, process = { <span class="string">"nemesis"</span>, time = <span class="number">5326396898</span>, index = <span class="number">169</span> }}
-{ <span class="global">type</span> = <span class="string">"info"</span>, f = <span class="string">"start"</span>, process = { <span class="string">"nemesis"</span>, time = <span class="number">5328551016</span>, index = <span class="number">170</span> }}
-</pre>
-
+<pre><code>{ type = "info", f = "start", process = { "nemesis", time = 5326396898, index = 169 }}
+{ type = "info", f = "start", process = { "nemesis", time = 5328551016, index = 170 }}
+</code></pre>
</p>
<br/>
- <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
+ <h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "noop"></a>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 3e224c576ac60013c01a2dd9f8eab1d224ee0918
blob + 84b62ec3da7609e4b1e8bb9b8e0cf37da691765c
--- modules/molly.op.html
+++ modules/molly.op.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><strong>molly.op</strong></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><strong>molly.op</strong></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<p> An observed history should be a list of operations in real-time order, where
each operation is a map of the form:</p>
+<pre><code> {
+ type One of <code>invoke</code>, <code>ok</code>, <code>info</code>, <code>fail</code>.
+ process A logical identifier for a single thread of execution.
+ value A transaction; structure and semantics vary.
+ }
+</code></pre>
-<pre>
-{
- <span class="global">type</span> One of <span class="backtick"><code>invoke</code></span>, <span class="backtick"><code>ok</code></span>, <span class="backtick"><code>info</code></span>, <span class="backtick"><code>fail</code></span>.
- process A logical identifier <span class="keyword">for</span> a single thread of execution.
- value A transaction; structure <span class="keyword">and</span> semantics vary.
-}
-</pre>
-
<p> Each process should perform alternating <code>invoke</code> and <code>ok</code>, <code>info</code>, <code>fail</code>
operations. <code>ok</code> indicates the operation definitely committed. <code>fail</code>
indicates it definitely did not occur - e.g. it was aborted, was never
<p> For example an operation with 'read' action, value is 'nil' because it is
unknown before invoking of operation:</p>
-
-<pre>
-{
- f = <span class="string">'read'</span>,
- value = <span class="keyword">nil</span>,
+<pre><code>{
+ f = 'read',
+ value = nil,
}
-<span class="number">4</span> ok read {<span class="number">0</span> <span class="number">5</span>, <span class="number">1</span> <span class="number">10</span>, <span class="number">2</span> <span class="number">12</span>, <span class="number">8</span> <span class="number">10</span>, <span class="number">9</span> <span class="number">17</span>}
-<span class="number">4</span> invoke read <span class="keyword">nil</span>
-<span class="number">3</span> ok read {<span class="number">0</span> <span class="number">5</span>, <span class="number">1</span> <span class="number">9</span>, <span class="number">2</span> <span class="number">12</span>, <span class="number">3</span> <span class="number">10</span>, <span class="number">4</span> <span class="number">11</span>}
-<span class="number">3</span> invoke read <span class="keyword">nil</span>
-</pre>
+4 ok read {0 5, 1 10, 2 12, 8 10, 9 17}
+4 invoke read nil
+3 ok read {0 5, 1 9, 2 12, 3 10, 4 11}
+3 invoke read nil
+</code></pre>
<p> or operation with 'transfer' action for test that transfers money between
accounts:</p>
-
-<pre>
-{
- f = <span class="string">'transfer'</span>,
+<pre><code>{
+ f = 'transfer',
value = {
- from = <span class="global">math</span>.random(<span class="number">1</span>, <span class="number">10</span>),
- to = <span class="global">math</span>.random(<span class="number">1</span>, <span class="number">10</span>),
- amount = <span class="global">math</span>.random(<span class="number">1</span>, <span class="number">100</span>),
+ from = math.random(1, 10),
+ to = math.random(1, 10),
+ amount = math.random(1, 100),
}
}
-<span class="number">3</span> ok transfer {from = <span class="number">8</span>, to = <span class="number">2</span>, amount = <span class="number">3</span>}
-<span class="number">0</span> ok transfer {from = <span class="number">1</span>, to = <span class="number">9</span>, amount = <span class="number">1</span>}
-<span class="number">0</span> invoke transfer {from = <span class="number">3</span>, to = <span class="number">9</span>, amount = <span class="number">5</span>}
-</pre>
-
+3 ok transfer {from = 8, to = 2, amount = 3}
+0 ok transfer {from = 1, to = 9, amount = 1}
+0 invoke transfer {from = 3, to = 9, amount = 5}
+</code></pre>
</p>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - dffbb740a7cd0639722483fc59205ab966d9cb74
blob + 76f2952022a95cf38777200d23fd1d0b2a0e8c24
--- modules/molly.runner.html
+++ modules/molly.runner.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><strong>molly.runner</strong></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><strong>molly.runner</strong></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
remote access to log into a bunch of DB nodes, where it sets up the
distributed system you're going to test or use local DB instances.</p>
-<pre><code> +-------------+
- +------- | controller | -------+
- | +-------------+ |
- | | | | |
- | +----+ | | |
- v v | | v
- +----+----+----+ | | +----+----+
- | n1 | n2 | n3 | <+ +> | n4 | n5 |
- +----+----+----+ +----+----+
+<p>``<code></p>
+<pre><code> +-------------+
++------- | controller | -------+
+| +-------------+ |
+| | | | |
+| +----+ | | |
+v v | | v
</code></pre>
+<p> +----+----+----+ | | +----+----+
+ | n1 | n2 | n3 | <+ +> | n4 | n5 |
+ +----+----+----+ +----+----+
+</code>`<code></p>
-
<p> Once the system is running, the control node spins up a set of logically
- single-threaded processes (see <a href="../modules/molly.thread.html#">molly.thread</a>), each with its own client for
+ single-threaded processes (see </code>molly.thread<code>), each with its own client for
the distributed system.</p>
-<p> A generator (see <a href="../modules/molly.gen.html#">molly.gen</a>) generates new operations (see <a href="../modules/molly.op.html#">molly.op</a>)
+<p> A generator (see </code>molly.gen<code>) generates new operations (see </code>molly.op<code>)
for each process to perform. Processes then apply those operations to the
- system using their clients, see <a href="../modules/molly.client.html#">molly.client</a>. The start and end of each
- operation is recorded in a history, see <a href="../modules/molly.history.html#">molly.history</a>. While performing
- operations, a special nemesis process (see <a href="../modules/molly.nemesis.html#">molly.nemesis</a>) introduces
+ system using their clients, see </code>molly.client<code>. The start and end of each
+ operation is recorded in a history, see </code>molly.history<code>. While performing
+ operations, a special nemesis process (see </code>molly.nemesis<code>) introduces
faults into the system - also scheduled by the generator.</p>
-<p> Finally, the DB is turn down. Molly uses a checker (see <code>molly.checker</code>)
+<p> Finally, the DB is turn down. Molly uses a checker (see </code>molly.checker<code>)
to analyze the test's history for correctness, and to generate reports,
graphs, etc. The test, history, analysis, and any supplementary results are
written to the filesystem for later review.</p>
<h3>Performance Tips</h3>
<p> <strong>Disable debug mode</strong>: by default tests enables type checking, see
- statements with <code>dev_checks()</code> in source code, and code coverage gathering.
- This requires using Lua <a href="https://www.lua.org/manual/5.1/manual.html#5.9">debug</a> module, that can significantly slowdown of
+ statements with </code>dev_checks()<code> in source code, and code coverage gathering.
+ This requires using Lua </code>debug<code> module, that can significantly slowdown of
execution (about 1.6 times). You can control it with environment variable
- <code>DEV</code>, to run tests with disabled type checking and code coverage: `DEV=OFF
- make test`.</p>
+ </code>DEV<code>, to run tests with disabled type checking and code coverage: </code>DEV=OFF
+ make test<code>.</p>
-<p> <strong>Disable verbose mode</strong>: see description of <code>verbose</code> mode.</p>
+<p> <strong>Disable verbose mode</strong>: see description of </code>verbose` mode.</p>
<p> <strong>Use fibers</strong>: TODO: performance of fibers vs coroutines.</p>
</p>
<br/>
- <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
+ <h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "run_test"></a>
<ul>
<li><span class="parameter">client</span>
Workload client. Learn more about creating clients in
- <a href="../modules/molly.client.html#">molly.client</a>.
+ <a href="../modules/molly.client.html#">molly.client</a> .
</li>
<li><span class="parameter">generator</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.5">table</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.5">table</a></span>
Generator of operations used in test workload.
Generator must be a table with <code>unwrap()</code> method that returns an iterator
- triplet. You can make generator youself or use <a href="../modules/molly.gen.html#">molly.gen</a> module.
+ triplet. You can make generator youself or use <a href="../modules/molly.gen.html#">molly.gen</a> module.
</li>
<li><span class="parameter">checker</span>
Function for checking history in workload.
- (<em>optional</em>)
</li>
</li></ul>
<li><span class="parameter">opts</span> Table with test options.
</ul>
- (<em>optional</em>)
</li>
<li><span class="parameter">threads</span>
<span class="types"><span class="type">number</span></span>
Number of threads in a test workload, default
value is 1.
- (<em>optional</em>)
</li>
<li><span class="parameter">verbose</span>
<span class="types"><span class="type">boolean</span></span>
obvious. For example, if you want to see the progress of testing as it
setup, teardown or invokes operations, you can use the 'verbose' option. In
the beginning, you may find it useful to use 'verbose' at all times; when
- you are more accustomed to <a href="../modules/molly.html#">molly</a>, you will likely want to use it at
+ you are more accustomed to <a href="../modules/molly.html#">molly</a> , you will likely want to use it at
certain times but not at others. Disabled by default.
Take into account that logging to standart output is a slow operation and
- with enabled verbose mode <a href="../modules/molly.html#">molly</a> logs status of every operation before
+ with enabled verbose mode <a href="../modules/molly.html#">molly</a> logs status of every operation before
and after it's invocation and this may slowdown overall testing performance
significantly. It is recommended to disable verbose mode in a final testing
and use it only for debugging.
- (<em>optional</em>)
</li>
<li><span class="parameter">thread_type</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Type of threads used in a test workload.
- Possible values are 'fiber' (see <a href="../modules/molly.thread_fiber.html#">molly.thread_fiber</a>) and 'coroutine' (see
- <a href="../modules/molly.thread_coroutine.html#">molly.thread_coroutine</a>), default value is 'fiber' on Tarantool and
+ Possible values are 'fiber' (see <a href="../modules/molly.thread_fiber.html#">molly.thread_fiber</a> ) and 'coroutine' (see
+ <a href="../modules/molly.thread_coroutine.html#">molly.thread_coroutine</a> ), default value is 'fiber' on Tarantool and
'coroutine' on LuaJIT. Learn more about possible thread types in
- <a href="../modules/molly.thread.html#">molly.thread</a>.
- (<em>optional</em>)
+ <a href="../modules/molly.thread.html#">molly.thread</a> .
</li>
<li><span class="parameter">time_limit</span>
<span class="types"><span class="type">number</span></span>
Number of seconds to limit time of testing. By
default testing time is endless and limited by a number of operations
produced by generator.
- (<em>optional</em>)
</li>
<li><span class="parameter">nodes</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.5">table</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.5">table</a></span>
A table that contains IP addresses of nodes
participated in testing.
- (<em>optional</em>)
</li>
</li></ul>
</ul>
<h3>Usage:</h3>
<ul>
- <pre class="example"><span class="keyword">local</span> test_options = {
- create_reports = <span class="keyword">true</span>,
- thread_type = <span class="string">'fiber'</span>,
- threads = <span class="number">5</span>,
- nodes = {
- <span class="string">'127.0.0.1'</span>
- }
-}
-<span class="keyword">local</span> ok, err = runner.run_test({
- client = client.new(),
- generator = gen_lib.cycle(gen_lib.iter({ r, w })):take(<span class="number">1000</span>)
-}, test_options)</pre>
+ <pre class="example">
+
+ <span class="keyword">local</span> test_options = {
+ create_reports = <span class="keyword">true</span>,
+ thread_type = <span class="string">'fiber'</span>,
+ threads = <span class="number">5</span>,
+ nodes = {
+ <span class="string">'127.0.0.1'</span>
+ }
+ }
+ <span class="keyword">local</span> ok, err = runner.run_test({
+ client = client.new(),
+ generator = gen_lib.cycle(gen_lib.iter({ r, w })):take(<span class="number">1000</span>)
+ }, test_options)</pre>
</ul>
</dd>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 2daef3853dcd8a5067510e527e0ff41fe4fa2828
blob + 71c653c64559b34e3a3dd6fea8918cfee53525a6
--- modules/molly.tests.html
+++ modules/molly.tests.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><strong>molly.tests</strong></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><strong>molly.tests</strong></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
to whatever the present value of the given list is). We detect cycles in
these transactions using Elle's cycle-detection system.</p>
-<p> Generator <a href="../modules/molly.tests.html#list_append_gen">molly.tests.list_append_gen</a> produces an operations
+<p> Generator <a href="../modules/molly.tests.html#list_append_gen">molly.tests.list_append_gen</a> produces an operations
compatible with Molly:</p>
+<pre><code> { index = 2, type = "invoke", value = {{ "append", 255, 8 } { "r", 253, null }}}
+ { index = 3, type = "ok", value = {{ "append", 255, 8 } { "r", 253, { 1, 3, 4 }}}}
+ { index = 4, type = "invoke", value = {{ "append", 256, 4 } { "r", 255, null } { "r", 256, nil } { "r", 253, null }}}
+ { index = 5, type = "ok", value = {{ "append", 256, 4 } { "r", 255, { 2, 3, 4, 5, 8 }} { "r", 256, { 1, 2, 4 }} {{ "r", 253, { 1, 3, 4 }}}}
+ { index = 6, type = "invoke", value = {{ "append", 250, 10 } { "r", 253, null }{ "r", 255, null } { "append", 256, 3 }}}
+</code></pre>
-<pre>
-{ index = <span class="number">2</span>, <span class="global">type</span> = <span class="string">"invoke"</span>, value = {{ <span class="string">"append"</span>, <span class="number">255</span>, <span class="number">8</span> } { <span class="string">"r"</span>, <span class="number">253</span>, null }}}
-{ index = <span class="number">3</span>, <span class="global">type</span> = <span class="string">"ok"</span>, value = {{ <span class="string">"append"</span>, <span class="number">255</span>, <span class="number">8</span> } { <span class="string">"r"</span>, <span class="number">253</span>, { <span class="number">1</span>, <span class="number">3</span>, <span class="number">4</span> }}}}
-{ index = <span class="number">4</span>, <span class="global">type</span> = <span class="string">"invoke"</span>, value = {{ <span class="string">"append"</span>, <span class="number">256</span>, <span class="number">4</span> } { <span class="string">"r"</span>, <span class="number">255</span>, null } { <span class="string">"r"</span>, <span class="number">256</span>, <span class="keyword">nil</span> } { <span class="string">"r"</span>, <span class="number">253</span>, null }}}
-{ index = <span class="number">5</span>, <span class="global">type</span> = <span class="string">"ok"</span>, value = {{ <span class="string">"append"</span>, <span class="number">256</span>, <span class="number">4</span> } { <span class="string">"r"</span>, <span class="number">255</span>, { <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">8</span> }} { <span class="string">"r"</span>, <span class="number">256</span>, { <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span> }} {{ <span class="string">"r"</span>, <span class="number">253</span>, { <span class="number">1</span>, <span class="number">3</span>, <span class="number">4</span> }}}}
-{ index = <span class="number">6</span>, <span class="global">type</span> = <span class="string">"invoke"</span>, value = {{ <span class="string">"append"</span>, <span class="number">250</span>, <span class="number">10</span> } { <span class="string">"r"</span>, <span class="number">253</span>, null }{ <span class="string">"r"</span>, <span class="number">255</span>, null } { <span class="string">"append"</span>, <span class="number">256</span>, <span class="number">3</span> }}}
-</pre>
-
<p> A partial test, including a generator and checker. You'll need to provide a
client which can understand operations of the form:</p>
+<pre><code> { type = "invoke", f = "txn", value = {{ "r", 3, null } { "append", 3, 2 } { "r", 3, null }}}
+</code></pre>
-<pre>
-{ <span class="global">type</span> = <span class="string">"invoke"</span>, f = <span class="string">"txn"</span>, value = {{ <span class="string">"r"</span>, <span class="number">3</span>, null } { <span class="string">"append"</span>, <span class="number">3</span>, <span class="number">2</span> } { <span class="string">"r"</span>, <span class="number">3</span>, null }}}
-</pre>
-
<p> and return completions like:</p>
+<pre><code> { type = "invoke", f = "txn", value = {{ "r", 3, { 1 }} { "append", 3, 2 } { "r", 3, { 1, 2 }}}}
+</code></pre>
-<pre>
-{ <span class="global">type</span> = <span class="string">"invoke"</span>, f = <span class="string">"txn"</span>, value = {{ <span class="string">"r"</span>, <span class="number">3</span>, { <span class="number">1</span> }} { <span class="string">"append"</span>, <span class="number">3</span>, <span class="number">2</span> } { <span class="string">"r"</span>, <span class="number">3</span>, { <span class="number">1</span>, <span class="number">2</span> }}}}
-</pre>
-
<p> where the key <code>3</code> identifies some list, whose value is initially <code>[1]</code>, and
becomes <code>[1 2]</code>.</p>
<p> Operations are of two forms:</p>
+<pre><code> { "r", "x", 1 } denotes a read of <code>x</code> observing the value 1.
+ { "w", "x", 2 } denotes a write of <code>x</code>, settings its value to 2.
+</code></pre>
-<pre>
-{ <span class="string">"r"</span>, <span class="string">"x"</span>, <span class="number">1</span> } denotes a read of <span class="backtick"><code>x</code></span> observing the value <span class="number">1.</span>
-{ <span class="string">"w"</span>, <span class="string">"x"</span>, <span class="number">2</span> } denotes a write of <span class="backtick"><code>x</code></span>, settings its value to <span class="number">2.</span>
-</pre>
-
<p> Example of history:</p>
+<pre><code> { type = "invoke", f = "txn", value = {{ "w", "x", 1 }}, process = 0, index = 1}
+ { type = "ok", f = "txn", value = {{ "w", "x", 1 }}, process = 0, index = 2}
+ { type = "invoke", f = "txn", value = {{ "r", "x", null }}, process = 0, index = 3}
+ { type = "ok", f = "txn", value = {{ "r", "x", 2 }}, process = 0, index = 4}
+</code></pre>
-<pre>
-{ <span class="global">type</span> = <span class="string">"invoke"</span>, f = <span class="string">"txn"</span>, value = {{ <span class="string">"w"</span>, <span class="string">"x"</span>, <span class="number">1</span> }}, process = <span class="number">0</span>, index = <span class="number">1</span>}
-{ <span class="global">type</span> = <span class="string">"ok"</span>, f = <span class="string">"txn"</span>, value = {{ <span class="string">"w"</span>, <span class="string">"x"</span>, <span class="number">1</span> }}, process = <span class="number">0</span>, index = <span class="number">2</span>}
-{ <span class="global">type</span> = <span class="string">"invoke"</span>, f = <span class="string">"txn"</span>, value = {{ <span class="string">"r"</span>, <span class="string">"x"</span>, null }}, process = <span class="number">0</span>, index = <span class="number">3</span>}
-{ <span class="global">type</span> = <span class="string">"ok"</span>, f = <span class="string">"txn"</span>, value = {{ <span class="string">"r"</span>, <span class="string">"x"</span>, <span class="number">2</span> }}, process = <span class="number">0</span>, index = <span class="number">4</span>}
-</pre>
-
<p> Note that in Lua associative array is an array that can be indexed not only
with numbers, but also with strings or any other value of the language,
except nil. Null values in Lua tables are represented as JSON null
<br/>
- <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
+ <h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "rw_register_gen"></a>
<h3>Usage:</h3>
<ul>
- <pre class="example">> log = <span class="global">require</span>(<span class="string">'log'</span>)
-> tests = <span class="global">require</span>(<span class="string">'molly.tests'</span>)
-> <span class="keyword">for</span> _it, v <span class="keyword">in</span> tests.rw_register_gen() <span class="keyword">do</span> log.info(v()) <span class="keyword">end</span>
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",58]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",80]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",46]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",19]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",66]]</span>}
-<span class="comment">---
-</span>...</pre>
+ <pre class="example">
+
+ > log = <span class="global">require</span>(<span class="string">'log'</span>)
+ > tests = <span class="global">require</span>(<span class="string">'molly.tests'</span>)
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> tests.rw_register_gen() <span class="keyword">do</span> log.info(v()) <span class="keyword">end</span>
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",58]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",80]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",46]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",19]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r","x",null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["w","x",66]]</span>}
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
<span class="types"><span class="type">number</span></span>
Number of distinct keys at any point. Default is
3.
- (<em>optional</em>)
</li>
<li><span class="parameter">min_txn_len</span>
<span class="types"><span class="type">number</span></span>
Minimum number of operations per txn. Default
is 1.
- (<em>optional</em>)
</li>
<li><span class="parameter">max_txn_len</span>
<span class="types"><span class="type">number</span></span>
Maximum number of operations per txn. Default
is 2.
- (<em>optional</em>)
</li>
<li><span class="parameter">max_writes_per_key</span>
<span class="types"><span class="type">number</span></span>
Maximum number of operations per key.
Default is 32.
- (<em>optional</em>)
</li>
</li></ul>
</ul>
<h3>Usage:</h3>
<ul>
- <pre class="example">> log = <span class="global">require</span>(<span class="string">'log'</span>)
-> tests = <span class="global">require</span>(<span class="string">'molly.tests'</span>)
-> <span class="keyword">for</span> _it, v <span class="keyword">in</span> tests.list_append_gen() <span class="keyword">do</span> log.info(v()) <span class="keyword">end</span>
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",3,null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",3,1]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",2,null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",3,2]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",1,null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",2,3]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",2,null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",3,4]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",2,null]]</span>}
-{<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",2,5]]</span>}
-<span class="comment">---
-</span>...</pre>
+ <pre class="example">
+
+ > log = <span class="global">require</span>(<span class="string">'log'</span>)
+ > tests = <span class="global">require</span>(<span class="string">'molly.tests'</span>)
+ > <span class="keyword">for</span> _it, v <span class="keyword">in</span> tests.list_append_gen() <span class="keyword">do</span> log.info(v()) <span class="keyword">end</span>
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",3,null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",3,1]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",2,null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",3,2]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",1,null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",2,3]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",2,null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",3,4]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["r",2,null]]</span>}
+ {<span class="string">"f"</span>:<span class="string">"txn"</span>,<span class="string">"value"</span>:<span class="string">[["append",2,5]]</span>}
+ <span class="comment">---
+</span> ...</pre>
</ul>
</dd>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - d2706e07ba8f89abc64e687b9c0909721bf4bfec
blob + b34f814eaee8f6608347fa4808b56383fc25f491
--- modules/molly.thread.html
+++ modules/molly.thread.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><strong>molly.thread</strong></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 69665a9a221d325132a231059fa118ca81cc9d1e
blob + ef8078673db21a2acd747eab5358e19501307d15
--- modules/molly.thread_coroutine.html
+++ modules/molly.thread_coroutine.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><strong>molly.thread_coroutine</strong></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><strong>molly.thread_coroutine</strong></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - b59e9ca584d63d7e63dc28dd1d02f0026d727910
blob + a3de0d36736b179e2495c4fe356b2caeeb0dc75f
--- modules/molly.thread_fiber.html
+++ modules/molly.thread_fiber.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><strong>molly.thread_fiber</strong></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><strong>molly.thread_fiber</strong></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - 28991a412a882b12dd0a6c5ab9375868189d40e9
blob + 368232d57a32dccd24651c3a93e39aae7edbac1d
--- modules/molly.utils.html
+++ modules/molly.utils.html
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><strong>molly.utils</strong></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><strong>molly.utils</strong></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../topics/README.md.html">README</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<br/>
- <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
+ <h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "setenv"></a>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">key</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Variable name.
</li>
<li><span class="parameter">value</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
Variable value.
</li>
</ul>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">dir</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">path</span>
- <span class="types"><a class="type" href="https://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
+ <span class="types"><a class="type" href="http://www.lua.org/manual/5.1/manual.html#5.4">string</a></span>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
blob - f15fa2ebca4bbb9027e04af5b4765fc65cd61df7
blob + 0a378792e675a1f0dd3b4096c2fca403494105a3
--- topics/README.md.html
+++ topics/README.md.html
<h2>Topics</h2>
-<ul class="">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><strong>README</strong></li>
</ul>
<h2>Modules</h2>
-<ul class="nowrap">
- <li><a href="../modules/molly.client.html">molly.client</a></li>
- <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
- <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
- <li><a href="../modules/molly.db.html">molly.db</a></li>
- <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
+ <li><a href="../modules/molly.tests.html">molly.tests</a></li>
+ <li><a href="../modules/molly.runner.html">molly.runner</a></li>
<li><a href="../modules/molly.history.html">molly.history</a></li>
+ <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.op.html">molly.op</a></li>
+ <li><a href="../modules/molly.gen.html">molly.gen</a></li>
+ <li><a href="../modules/molly.client.html">molly.client</a></li>
<li><a href="../modules/molly.html">molly</a></li>
- <li><a href="../modules/molly.log.html">molly.log</a></li>
+ <li><a href="../modules/molly.db.html">molly.db</a></li>
+ <li><a href="../modules/molly.thread_fiber.html">molly.thread_fiber</a></li>
+ <li><a href="../modules/molly.thread_coroutine.html">molly.thread_coroutine</a></li>
<li><a href="../modules/molly.nemesis.html">molly.nemesis</a></li>
- <li><a href="../modules/molly.op.html">molly.op</a></li>
- <li><a href="../modules/molly.runner.html">molly.runner</a></li>
- <li><a href="../modules/molly.tests.html">molly.tests</a></li>
<li><a href="../modules/molly.thread.html">molly.thread</a></li>
- <li><a href="../modules/molly.utils.html">molly.utils</a></li>
+ <li><a href="../modules/molly.log.html">molly.log</a></li>
</ul>
<h2>Examples</h2>
-<ul class="nowrap">
+<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><a href="../examples/sqlite-rw-register.lua.html">sqlite-rw-register.lua</a></li>
<li><a href="../examples/sqlite-list-append.lua.html">sqlite-list-append.lua</a></li>
</ul>
<pre>
-$ luarocks install <span class="comment">--local --server=https://luarocks.org/dev molly</span>
+$ luarocks install <span class="comment">--local --server=https://luarocks.org/dev molly
+</span>
</pre>
<p>See also an examples in <a href="/test/examples/">test/examples/</a> for SQLite database
engine:
-- <a href="../examples/sqlite-rw-register.lua.html#">sqlite-rw-register.lua</a> contains a simple test that concurrently runs <code>get</code>
+- <a href="../examples/sqlite-rw-register.lua.html#">sqlite-rw-register.lua</a> contains a simple test that concurrently runs <code>get</code>
and <code>set</code> operations on SQLite DB
-- <a href="../examples/sqlite-list-append.lua.html#">sqlite-list-append.lua</a> contains a simple test that concurrently runs <code>read</code>
+- <a href="../examples/sqlite-list-append.lua.html#">sqlite-list-append.lua</a> contains a simple test that concurrently runs <code>read</code>
and <code>append</code> operations on SQLite DB</p>
<p>For running examples you need installed an SQLite development package and
<h3>Hacking</h3>
-<p>For developing <a href="../modules/molly.html#">molly</a> you need to install: either LuaJIT or LuaJIT-based
+<p>For developing <a href="../modules/molly.html#">molly</a> you need to install: either LuaJIT or LuaJIT-based
and <a href="https://github.com/luarocks/luarocks/wiki/Download">LuaRocks</a>.</p>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-05-14 13:53:06 </i>
+<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>