{"data":{"markdownRemark":{"html":"<p>During development it will likely become useful to make usage of automated testing tools for both Unit and Regression testing. Because the Simudyne SDK allows for multiple run configurations the ability to create scripts for certain configurations lends itself to automatic testing. Below are two examples of what some usage of CI tools would look like.</p>\n<h2 id=\"mainjava-setup\"><a href=\"#mainjava-setup\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Main.java Setup</h2>\n<p>Below is a sample model class that makes usage of various demo models and runner configurations. It has been setup to look for command line arguments in order to determine which mode it should run in, as well as configuration for number of ticks/runs/agents.</p>\n<p>Note: You will need to make sure that the input for numAgents exists in your model if following this code example.</p>\n<p class=\"code-header\">Main.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">package</span> sandbox<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>SimudyneSIR<span class=\"token punctuation\">.</span>SimudyneSIR<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>TumorGrowthSimulator<span class=\"token punctuation\">.</span>TumorGrowthModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>cda<span class=\"token punctuation\">.</span>CDAModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>creditCard<span class=\"token punctuation\">.</span>CreditCardModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>forestFire<span class=\"token punctuation\">.</span>ForestFireModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">.</span>MortgageModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>schelling<span class=\"token punctuation\">.</span>SchellingModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>tokyo<span class=\"token punctuation\">.</span>TokyoModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>trading<span class=\"token punctuation\">.</span>TradingModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> sandbox<span class=\"token punctuation\">.</span>demos<span class=\"token punctuation\">.</span>volatilityModel<span class=\"token punctuation\">.</span>VolatilityModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>Model<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>exec<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>ModelRunner<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>exec<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>MultirunController<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>exec<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>RunnerBackend<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>exec<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>definition<span class=\"token punctuation\">.</span>BatchDefinitionsBuilder<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>exec<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>definition<span class=\"token punctuation\">.</span>ModelSamplerDefinitionsBuilder<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>exec<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>definition<span class=\"token punctuation\">.</span>Scenario<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>exec<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>definition<span class=\"token punctuation\">.</span>ScenarioDefinitionsBuilder<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>nexus<span class=\"token punctuation\">.</span>Server<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>time<span class=\"token punctuation\">.</span>Duration<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>time<span class=\"token punctuation\">.</span>Instant<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Main</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    Instant startTime <span class=\"token operator\">=</span> Instant<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Start Time \"</span> <span class=\"token operator\">+</span> startTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    String fallBackMode <span class=\"token operator\">=</span> <span class=\"token string\">\"BATCH\"</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// BATCH, SCENARIO, SAMPLER, CONSOLE</span>\n    Class <span class=\"token class-name\">fallbackModel</span> <span class=\"token operator\">=</span> sandbox<span class=\"token punctuation\">.</span>testing<span class=\"token punctuation\">.</span>housing<span class=\"token punctuation\">.</span>MortgageModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> runs <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> Integer<span class=\"token punctuation\">.</span><span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">long</span> ticks <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> Long<span class=\"token punctuation\">.</span><span class=\"token function\">parseLong</span><span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">long</span> agents <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> Long<span class=\"token punctuation\">.</span><span class=\"token function\">parseLong</span><span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token annotation punctuation\">@SuppressWarnings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"unchecked\"</span><span class=\"token punctuation\">)</span>\n      Class<span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Model</span><span class=\"token operator\">></span> modelClass <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> <span class=\"token punctuation\">(</span>Class<span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Model</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span> Class<span class=\"token punctuation\">.</span><span class=\"token function\">forName</span><span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> fallbackModel<span class=\"token punctuation\">;</span>\n      RunnerBackend runnerBackend <span class=\"token operator\">=</span> RunnerBackend<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      ModelRunner modelRunner <span class=\"token operator\">=</span> runnerBackend<span class=\"token punctuation\">.</span><span class=\"token function\">forModel</span><span class=\"token punctuation\">(</span>modelClass<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      String mode <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> args<span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">:</span> fallBackMode<span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>mode<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">case</span> <span class=\"token string\">\"BATCH\"</span><span class=\"token operator\">:</span>\n          <span class=\"token punctuation\">{</span>\n            System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Running in Batch Mode\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            BatchDefinitionsBuilder runDefinitionBuilder<span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n              runDefinitionBuilder <span class=\"token operator\">=</span>\n                  BatchDefinitionsBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forRuns</span><span class=\"token punctuation\">(</span>runs<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forTicks</span><span class=\"token punctuation\">(</span>ticks<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">withInput</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"numAgents\"</span><span class=\"token punctuation\">,</span> agents<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n              runDefinitionBuilder <span class=\"token operator\">=</span> BatchDefinitionsBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forRuns</span><span class=\"token punctuation\">(</span>runs<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forTicks</span><span class=\"token punctuation\">(</span>ticks<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            modelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">forRunDefinitionBuilder</span><span class=\"token punctuation\">(</span>runDefinitionBuilder<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            modelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">awaitOutput</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span>startTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">case</span> <span class=\"token string\">\"SCENARIO\"</span><span class=\"token operator\">:</span>\n          <span class=\"token punctuation\">{</span>\n            System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Running in Scenario Mode\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Scenario runDefinitionBuilder <span class=\"token operator\">=</span>\n                ScenarioDefinitionsBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">createScenario</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Test\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forRuns</span><span class=\"token punctuation\">(</span>runs<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forTicks</span><span class=\"token punctuation\">(</span>ticks<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            modelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">forRunDefinitionBuilder</span><span class=\"token punctuation\">(</span>runDefinitionBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">done</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            modelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">awaitOutput</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span>startTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">case</span> <span class=\"token string\">\"SAMPLER\"</span><span class=\"token operator\">:</span>\n          <span class=\"token punctuation\">{</span>\n            System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Running in Model Sampler Mode\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            ModelSamplerDefinitionsBuilder runDefinitionBuilder <span class=\"token operator\">=</span>\n                ModelSamplerDefinitionsBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forRuns</span><span class=\"token punctuation\">(</span>runs<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forTicks</span><span class=\"token punctuation\">(</span>ticks<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            modelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">forRunDefinitionBuilder</span><span class=\"token punctuation\">(</span>runDefinitionBuilder<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            modelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">awaitOutput</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span>startTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">case</span> <span class=\"token string\">\"CONSOLE\"</span><span class=\"token operator\">:</span>\n          <span class=\"token punctuation\">{</span>\n            System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Running in Console Mode\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Trading Model\"</span><span class=\"token punctuation\">,</span> TradingModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Mortgage Model\"</span><span class=\"token punctuation\">,</span> MortgageModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Credit Card Model\"</span><span class=\"token punctuation\">,</span> CreditCardModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Continuous Double Auction Model\"</span><span class=\"token punctuation\">,</span> CDAModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Volatility Model\"</span><span class=\"token punctuation\">,</span> VolatilityModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Chain Bankruptcy Model\"</span><span class=\"token punctuation\">,</span> TokyoModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"S.I.R. Model\"</span><span class=\"token punctuation\">,</span> SimudyneSIR<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Tumor Growth Model\"</span><span class=\"token punctuation\">,</span> TumorGrowthModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Schelling Segregation Model\"</span><span class=\"token punctuation\">,</span> SchellingModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Forest Fire Model\"</span><span class=\"token punctuation\">,</span> ForestFireModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token comment\">// Start the server.</span>\n            Server<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      e<span class=\"token punctuation\">.</span><span class=\"token function\">printStackTrace</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span>Instant startTime<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    Instant finishTime <span class=\"token operator\">=</span> Instant<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">long</span> timeElapsed <span class=\"token operator\">=</span> Duration<span class=\"token punctuation\">.</span><span class=\"token function\">between</span><span class=\"token punctuation\">(</span>startTime<span class=\"token punctuation\">,</span> finishTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getSeconds</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Finish Time \"</span> <span class=\"token operator\">+</span> finishTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Elapsed Time (seconds) \"</span> <span class=\"token operator\">+</span> timeElapsed<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    System<span class=\"token punctuation\">.</span><span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"scripting-runs\"><a href=\"#scripting-runs\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Scripting Runs</h2>\n<p>Now that we've setup our Main.java to accept command line arguments we have the ability to cleany run multiple types of simulations for testing purposes. Below is a sample shell script that tests the model and ramps up number of agents, ticks, and runs. </p>\n<p class=\"code-header\">MortgateModel.sh</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token shebang important\">#!/bin/bash</span>\n<span class=\"token function\">cd</span> <span class=\"token punctuation\">..</span>\n<span class=\"token comment\"># Baseline</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\n<span class=\"token comment\"># Agent</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 10 1000 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 10 10000 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\n<span class=\"token comment\"># Tick</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 100 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 1000 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\n<span class=\"token comment\"># Runs</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"10 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"100 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"1000 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\nmvn compile exec:java -Dexec.args<span class=\"token operator\">=</span><span class=\"token string\">\"10000 10 100 sandbox.testing.advanced3.MortgageModel BATCH\"</span>\n<span class=\"token keyword\">exit</span></code></pre></div>\n<h2 id=\"azure-devops\"><a href=\"#azure-devops\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Azure Devops</h2>\n<p>Please refer to <a href=\":version/reference/run_deploy/azure\">Deploy on Azure</a> for a visual guide on how to add a Github project to Azure Devops. However while that page will describe how to get your model on a Azure Web Service, this will cover what your .yaml file should look like for testing with the above setup.</p>\n<p class=\"code-header\">azure-pipelines.yml</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># Maven</span>\n<span class=\"token comment\"># Build your Java project and run tests with Apache Maven.</span>\n<span class=\"token comment\"># Add steps that analyze code, save build artifacts, deploy, and more:</span>\n<span class=\"token comment\"># https://docs.microsoft.com/azure/devops/pipelines/languages/java</span>\n\n<span class=\"token key atrule\">trigger</span><span class=\"token punctuation\">:</span>\n<span class=\"token punctuation\">-</span> master\n<span class=\"token punctuation\">-</span> staging\n\n<span class=\"token key atrule\">pool</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">vmImage</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'ubuntu-latest'</span>\n\n<span class=\"token key atrule\">steps</span><span class=\"token punctuation\">:</span>\n<span class=\"token punctuation\">-</span> <span class=\"token key atrule\">task</span><span class=\"token punctuation\">:</span> Maven@3\n  <span class=\"token key atrule\">inputs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">mavenPomFile</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'pom.xml'</span>\n    <span class=\"token key atrule\">options</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'--settings settings.xml'</span>\n    <span class=\"token key atrule\">mavenOptions</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'-Xmx3072m'</span>\n    <span class=\"token key atrule\">javaHomeOption</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'JDKVersion'</span>\n    <span class=\"token key atrule\">jdkVersionOption</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'1.8'</span>\n    <span class=\"token key atrule\">jdkArchitectureOption</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'x64'</span>\n    <span class=\"token key atrule\">publishJUnitResults</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">false</span>\n    <span class=\"token key atrule\">testResultsFiles</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'**/surefire-reports/TEST-*.xml'</span>\n    <span class=\"token key atrule\">goals</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'compile'</span>\n\n<span class=\"token punctuation\">-</span> <span class=\"token key atrule\">task</span><span class=\"token punctuation\">:</span> DownloadSecureFile@1\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> license\n  <span class=\"token key atrule\">inputs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">secureFile</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'azure_pipelines.license'</span>\n\n<span class=\"token punctuation\">-</span> <span class=\"token key atrule\">task</span><span class=\"token punctuation\">:</span> DownloadSecureFile@1\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> maven_settings\n  <span class=\"token key atrule\">inputs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">secureFile</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'settings.xml'</span>\n\n<span class=\"token punctuation\">-</span> <span class=\"token key atrule\">script</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n    mkdir -p ~/.simudyne\n    cp $(license.secureFilePath) /home/vsts/.simudyne/azure.license\n    cp $(maven_settings.secureFilePath) $(System.DefaultWorkingDirectory)/settings.xml</span>\n  <span class=\"token key atrule\">displayName</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'Setup Files'</span>\n\n<span class=\"token punctuation\">-</span> <span class=\"token key atrule\">task</span><span class=\"token punctuation\">:</span> ShellScript@2\n  <span class=\"token key atrule\">inputs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">scriptPath</span><span class=\"token punctuation\">:</span> MortgageModel.sh\n\n<span class=\"token punctuation\">-</span> <span class=\"token key atrule\">task</span><span class=\"token punctuation\">:</span> CopyFiles@2\n  <span class=\"token key atrule\">inputs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">SourceFolder</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'$(System.DefaultWorkingDirectory)'</span>\n    <span class=\"token key atrule\">Contents</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'**.log'</span>\n    <span class=\"token key atrule\">TargetFolder</span><span class=\"token punctuation\">:</span> $(Build.ArtifactStagingDirectory)\n  <span class=\"token key atrule\">displayName</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'Copy Logs'</span></code></pre></div>\n<div class=\"ui segment info message\">\n<h4>Secure Files</h4>\nAs the settings.xml contains login information, and the license file is also meant to be obscured you'll notice that both are secure files. See [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/secure-files?view=azure-devops) for a guide on how to add secure files to Azure Devops.\n</div>\n<h2 id=\"jenkins-ci\"><a href=\"#jenkins-ci\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Jenkins CI</h2>\n<p>Another CI tool is <a href=\"https://www.jenkins.io/\">Jenkins</a>. Below is a simple example that uses Maven and Java 8, informs the user some initialization information and runs our above simple script. It also includes credential files that must be configured via Jenkins correctly as shown <a href=\"https://www.jenkins.io/doc/book/using/using-credentials/\">here</a>. </p>\n<p class=\"code-header\">A simple JenkinsFile example</p>\n<div class=\"gatsby-highlight\" data-language=\"jenkins\"><pre class=\"language-jenkins\"><code class=\"language-jenkins\">pipeline {\n    agent any\n    tools { \n        maven &#39;Maven 3.3.9&#39; \n        jdk &#39;jdk8&#39; \n    }\n    stages {\n        stage (&#39;Initialize&#39;) {\n            steps {\n                sh &#39;&#39;&#39;\n                    echo &quot;PATH = ${PATH}&quot;\n                    echo &quot;M2_HOME = ${M2_HOME}&quot;\n                &#39;&#39;&#39; \n            }\n        }\n\n        stage (&#39;Build&#39;) {\n            withCredentials([\n              file(credentialsId: &#39;license_file&#39;, variable: &#39;LICENSE_FILE&#39;),\n              file(credentialsId: &#39;settings_file&#39;, variable: &#39;MVN_SETTINGS&#39;)\n            ]) steps {\n\t\t\t\tsh &quot;cp --force $LICENSE_FILE licenseKey; cp --force $MVN_SETTINGS settings.xml&quot;\n                sh &#39;/opt/script-directory/MortgageModel.sh&#39;\n            }\n        }\n    }\n}</code></pre></div>","headings":[{"value":"Main.java Setup","depth":2},{"value":"Scripting Runs","depth":2},{"value":"Azure Devops","depth":2},{"value":"Jenkins CI","depth":2}],"frontmatter":{"title":"Continuous Integration Tools","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.6/reference/testing_logging/ci.md","versioned":false,"version":"2.6","kind":"reference","pagePath":"/reference/testing_logging/ci","chronology":{"prev":{"name":"Atomic Debug Logging","path":"/reference/testing_logging/atomic-log"},"next":{"name":"System Dynamics","path":"/reference/system_dynamics"}},"lastUpdated":"2026-04-21T13:56:54.870Z"}}