summaryrefslogtreecommitdiffstats
path: root/test/benchmarks
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2017-06-08 09:52:27 (GMT)
committerStefan Radomski <github@mintwerk.de>2017-06-08 09:52:27 (GMT)
commite9b78b546baf50149d121c96df823d44a709a97c (patch)
tree22fd3f72bf2a43ee78ca5e4fd27e1c130b3e5dc0 /test/benchmarks
parentcdc9c7da381aa296dc48c2494adcf9ca941d0851 (diff)
downloaduscxml-e9b78b546baf50149d121c96df823d44a709a97c.zip
uscxml-e9b78b546baf50149d121c96df823d44a709a97c.tar.gz
uscxml-e9b78b546baf50149d121c96df823d44a709a97c.tar.bz2
Performance improvements
Diffstat (limited to 'test/benchmarks')
-rwxr-xr-xtest/benchmarks/createBenchmarks.pl159
-rw-r--r--test/benchmarks/findLCCA.scxml828
2 files changed, 987 insertions, 0 deletions
diff --git a/test/benchmarks/createBenchmarks.pl b/test/benchmarks/createBenchmarks.pl
new file mode 100755
index 0000000..231c843
--- /dev/null
+++ b/test/benchmarks/createBenchmarks.pl
@@ -0,0 +1,159 @@
+#!/usr/bin/perl -w
+
+use strict;
+use List::Util qw[min max sum];
+
+use warnings;
+no warnings 'recursion';
+
+use Getopt::Long qw(GetOptions);
+use Data::Dumper;
+
+my %options = ();
+
+GetOptions(
+ \%options,
+ "depth-max=i",
+ "child-max=i",
+ "events-max=i",
+ "states-max=i",
+ "trans-max=i",
+ "random-seed=i"
+);
+
+my $seed = $options{'random-seed'} || int(rand(2**31));
+
+# $maxStates = 8;
+# $maxTrans = 8
+
+srand($seed);
+
+my $machine;
+my $stateId = 1;
+
+
+sub createFindLCCABenchmark {
+ my $where = shift;
+
+ my $nestingDepth = 20;
+ my $parallelStates = 20;
+
+ $$where->{'name'} = 'findLCCA';
+ $$where->{'type'} = 'scxml';
+ $$where->{'intial'} = "";
+ for (my $i = 1; $i <= $parallelStates; $i++) {
+ $$where->{'initial'} .= "id" . ($i*$nestingDepth) . " ";
+ }
+
+ $$where->{'children'}[0]->{'type'} = 'parallel';
+ $$where->{'children'}[0]->{'id'} = "p0";
+ for (my $i = 0; $i < $parallelStates; $i++) {
+ createFindLCCANestedCompounds(\$$where->{'children'}[0]->{'children'}, $nestingDepth, $nestingDepth * $parallelStates + 1);
+ }
+
+ $$where->{'children'}[1]->{'type'} = 'state';
+ $$where->{'children'}[1]->{'id'} = "id".$stateId++;
+ $$where->{'children'}[1]->{'transitions'}[0]->{'target'} = $$where->{'initial'};
+
+}
+
+sub createFindLCCANestedCompounds {
+ my $where = shift;
+ my $amount = shift;
+ my $target = shift;
+
+ if ($amount > 0) {
+ my $state;
+ $state->{'id'} = "id".$stateId++;
+ $state->{'type'} = "state";
+ createFindLCCANestedCompounds(\$state->{'children'}, $amount - 1, $target);
+
+ if ($amount == 1) {
+ $state->{'transitions'}[0]->{'target'} = "id".$target;
+ }
+
+ push @{$$where}, $state;
+ }
+
+
+}
+
+
+sub writeState {
+ my $state = shift;
+ my $fh = shift;
+
+ print $fh '<'.$state->{'type'};
+ print $fh ' id="'.$state->{'id'} . '"';
+ print $fh ' type="deep"' if exists $state->{'deep'};
+ print $fh '>';
+
+ foreach (@{$state->{'children'}}) {
+ writeState($_, $fh);
+ }
+
+ foreach (@{$state->{'transitions'}}) {
+ writeTransition($_, $fh);
+ }
+
+ print $fh '</'.$state->{'type'} . '>';
+
+};
+
+sub writeTransition {
+ my $trans = shift;
+ my $fh = shift;
+
+ print $fh '<transition';
+ print $fh ' target="' . $trans->{'target'} . '"' if $trans->{'target'};
+ print $fh ' event="' . $trans->{'event'} . '"' if $trans->{'event'};
+ print $fh ' cond="' . $trans->{'cond'} . '"' if $trans->{'cond'};
+
+ if ($trans->{'execContent'}) {
+ print $fh '>';
+ foreach (@{$trans->{'execContent'}}) {
+ print $fh $_;
+ }
+ print $fh '</transition>';
+ } else {
+ print $fh '/>';
+ }
+
+};
+
+sub writeMachine {
+ my $machine = shift;
+ my $file = shift;
+
+ open(my $fh, ">", $file) or die "Can't open > $file: $!";
+
+ print $fh '<scxml';
+ print $fh ' datamodel="' . $machine->{'datamodel'} . '"' if $machine->{'datamodel'};
+ print $fh ' seed="' . $seed . '"';
+ print $fh ' name="' . $machine->{'name'} . '"' if $machine->{'name'};
+ print $fh ' initial="' . $machine->{'initial'} . '"' if $machine->{'initial'};
+ print $fh '>';
+
+ foreach (@{$machine->{'children'}}) {
+ writeState($_, $fh);
+ }
+
+ print $fh '</scxml>';
+}
+
+sub xmllint {
+ my $file = shift;
+ `mv $file $file.unformatted.xml`;
+ `xmllint --format $file.unformatted.xml > $file`;
+ `rm $file.unformatted.xml`;
+}
+
+{
+ $machine = {};
+ $stateId = 1;
+
+ createFindLCCABenchmark(\$machine);
+ # print Dumper($machine);
+ writeMachine($machine, "findLCCA.scxml");
+ xmllint("findLCCA.scxml");
+}
diff --git a/test/benchmarks/findLCCA.scxml b/test/benchmarks/findLCCA.scxml
new file mode 100644
index 0000000..de2e8ce
--- /dev/null
+++ b/test/benchmarks/findLCCA.scxml
@@ -0,0 +1,828 @@
+<?xml version="1.0"?>
+<scxml seed="341532910" name="findLCCA" initial="id20 id40 id60 id80 id100 id120 id140 id160 id180 id200 id220 id240 id260 id280 id300 id320 id340 id360 id380 id400 ">
+ <parallel id="p0">
+ <state id="id1">
+ <state id="id2">
+ <state id="id3">
+ <state id="id4">
+ <state id="id5">
+ <state id="id6">
+ <state id="id7">
+ <state id="id8">
+ <state id="id9">
+ <state id="id10">
+ <state id="id11">
+ <state id="id12">
+ <state id="id13">
+ <state id="id14">
+ <state id="id15">
+ <state id="id16">
+ <state id="id17">
+ <state id="id18">
+ <state id="id19">
+ <state id="id20">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id21">
+ <state id="id22">
+ <state id="id23">
+ <state id="id24">
+ <state id="id25">
+ <state id="id26">
+ <state id="id27">
+ <state id="id28">
+ <state id="id29">
+ <state id="id30">
+ <state id="id31">
+ <state id="id32">
+ <state id="id33">
+ <state id="id34">
+ <state id="id35">
+ <state id="id36">
+ <state id="id37">
+ <state id="id38">
+ <state id="id39">
+ <state id="id40">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id41">
+ <state id="id42">
+ <state id="id43">
+ <state id="id44">
+ <state id="id45">
+ <state id="id46">
+ <state id="id47">
+ <state id="id48">
+ <state id="id49">
+ <state id="id50">
+ <state id="id51">
+ <state id="id52">
+ <state id="id53">
+ <state id="id54">
+ <state id="id55">
+ <state id="id56">
+ <state id="id57">
+ <state id="id58">
+ <state id="id59">
+ <state id="id60">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id61">
+ <state id="id62">
+ <state id="id63">
+ <state id="id64">
+ <state id="id65">
+ <state id="id66">
+ <state id="id67">
+ <state id="id68">
+ <state id="id69">
+ <state id="id70">
+ <state id="id71">
+ <state id="id72">
+ <state id="id73">
+ <state id="id74">
+ <state id="id75">
+ <state id="id76">
+ <state id="id77">
+ <state id="id78">
+ <state id="id79">
+ <state id="id80">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id81">
+ <state id="id82">
+ <state id="id83">
+ <state id="id84">
+ <state id="id85">
+ <state id="id86">
+ <state id="id87">
+ <state id="id88">
+ <state id="id89">
+ <state id="id90">
+ <state id="id91">
+ <state id="id92">
+ <state id="id93">
+ <state id="id94">
+ <state id="id95">
+ <state id="id96">
+ <state id="id97">
+ <state id="id98">
+ <state id="id99">
+ <state id="id100">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id101">
+ <state id="id102">
+ <state id="id103">
+ <state id="id104">
+ <state id="id105">
+ <state id="id106">
+ <state id="id107">
+ <state id="id108">
+ <state id="id109">
+ <state id="id110">
+ <state id="id111">
+ <state id="id112">
+ <state id="id113">
+ <state id="id114">
+ <state id="id115">
+ <state id="id116">
+ <state id="id117">
+ <state id="id118">
+ <state id="id119">
+ <state id="id120">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id121">
+ <state id="id122">
+ <state id="id123">
+ <state id="id124">
+ <state id="id125">
+ <state id="id126">
+ <state id="id127">
+ <state id="id128">
+ <state id="id129">
+ <state id="id130">
+ <state id="id131">
+ <state id="id132">
+ <state id="id133">
+ <state id="id134">
+ <state id="id135">
+ <state id="id136">
+ <state id="id137">
+ <state id="id138">
+ <state id="id139">
+ <state id="id140">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id141">
+ <state id="id142">
+ <state id="id143">
+ <state id="id144">
+ <state id="id145">
+ <state id="id146">
+ <state id="id147">
+ <state id="id148">
+ <state id="id149">
+ <state id="id150">
+ <state id="id151">
+ <state id="id152">
+ <state id="id153">
+ <state id="id154">
+ <state id="id155">
+ <state id="id156">
+ <state id="id157">
+ <state id="id158">
+ <state id="id159">
+ <state id="id160">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id161">
+ <state id="id162">
+ <state id="id163">
+ <state id="id164">
+ <state id="id165">
+ <state id="id166">
+ <state id="id167">
+ <state id="id168">
+ <state id="id169">
+ <state id="id170">
+ <state id="id171">
+ <state id="id172">
+ <state id="id173">
+ <state id="id174">
+ <state id="id175">
+ <state id="id176">
+ <state id="id177">
+ <state id="id178">
+ <state id="id179">
+ <state id="id180">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id181">
+ <state id="id182">
+ <state id="id183">
+ <state id="id184">
+ <state id="id185">
+ <state id="id186">
+ <state id="id187">
+ <state id="id188">
+ <state id="id189">
+ <state id="id190">
+ <state id="id191">
+ <state id="id192">
+ <state id="id193">
+ <state id="id194">
+ <state id="id195">
+ <state id="id196">
+ <state id="id197">
+ <state id="id198">
+ <state id="id199">
+ <state id="id200">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id201">
+ <state id="id202">
+ <state id="id203">
+ <state id="id204">
+ <state id="id205">
+ <state id="id206">
+ <state id="id207">
+ <state id="id208">
+ <state id="id209">
+ <state id="id210">
+ <state id="id211">
+ <state id="id212">
+ <state id="id213">
+ <state id="id214">
+ <state id="id215">
+ <state id="id216">
+ <state id="id217">
+ <state id="id218">
+ <state id="id219">
+ <state id="id220">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id221">
+ <state id="id222">
+ <state id="id223">
+ <state id="id224">
+ <state id="id225">
+ <state id="id226">
+ <state id="id227">
+ <state id="id228">
+ <state id="id229">
+ <state id="id230">
+ <state id="id231">
+ <state id="id232">
+ <state id="id233">
+ <state id="id234">
+ <state id="id235">
+ <state id="id236">
+ <state id="id237">
+ <state id="id238">
+ <state id="id239">
+ <state id="id240">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id241">
+ <state id="id242">
+ <state id="id243">
+ <state id="id244">
+ <state id="id245">
+ <state id="id246">
+ <state id="id247">
+ <state id="id248">
+ <state id="id249">
+ <state id="id250">
+ <state id="id251">
+ <state id="id252">
+ <state id="id253">
+ <state id="id254">
+ <state id="id255">
+ <state id="id256">
+ <state id="id257">
+ <state id="id258">
+ <state id="id259">
+ <state id="id260">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id261">
+ <state id="id262">
+ <state id="id263">
+ <state id="id264">
+ <state id="id265">
+ <state id="id266">
+ <state id="id267">
+ <state id="id268">
+ <state id="id269">
+ <state id="id270">
+ <state id="id271">
+ <state id="id272">
+ <state id="id273">
+ <state id="id274">
+ <state id="id275">
+ <state id="id276">
+ <state id="id277">
+ <state id="id278">
+ <state id="id279">
+ <state id="id280">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id281">
+ <state id="id282">
+ <state id="id283">
+ <state id="id284">
+ <state id="id285">
+ <state id="id286">
+ <state id="id287">
+ <state id="id288">
+ <state id="id289">
+ <state id="id290">
+ <state id="id291">
+ <state id="id292">
+ <state id="id293">
+ <state id="id294">
+ <state id="id295">
+ <state id="id296">
+ <state id="id297">
+ <state id="id298">
+ <state id="id299">
+ <state id="id300">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id301">
+ <state id="id302">
+ <state id="id303">
+ <state id="id304">
+ <state id="id305">
+ <state id="id306">
+ <state id="id307">
+ <state id="id308">
+ <state id="id309">
+ <state id="id310">
+ <state id="id311">
+ <state id="id312">
+ <state id="id313">
+ <state id="id314">
+ <state id="id315">
+ <state id="id316">
+ <state id="id317">
+ <state id="id318">
+ <state id="id319">
+ <state id="id320">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id321">
+ <state id="id322">
+ <state id="id323">
+ <state id="id324">
+ <state id="id325">
+ <state id="id326">
+ <state id="id327">
+ <state id="id328">
+ <state id="id329">
+ <state id="id330">
+ <state id="id331">
+ <state id="id332">
+ <state id="id333">
+ <state id="id334">
+ <state id="id335">
+ <state id="id336">
+ <state id="id337">
+ <state id="id338">
+ <state id="id339">
+ <state id="id340">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id341">
+ <state id="id342">
+ <state id="id343">
+ <state id="id344">
+ <state id="id345">
+ <state id="id346">
+ <state id="id347">
+ <state id="id348">
+ <state id="id349">
+ <state id="id350">
+ <state id="id351">
+ <state id="id352">
+ <state id="id353">
+ <state id="id354">
+ <state id="id355">
+ <state id="id356">
+ <state id="id357">
+ <state id="id358">
+ <state id="id359">
+ <state id="id360">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id361">
+ <state id="id362">
+ <state id="id363">
+ <state id="id364">
+ <state id="id365">
+ <state id="id366">
+ <state id="id367">
+ <state id="id368">
+ <state id="id369">
+ <state id="id370">
+ <state id="id371">
+ <state id="id372">
+ <state id="id373">
+ <state id="id374">
+ <state id="id375">
+ <state id="id376">
+ <state id="id377">
+ <state id="id378">
+ <state id="id379">
+ <state id="id380">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ <state id="id381">
+ <state id="id382">
+ <state id="id383">
+ <state id="id384">
+ <state id="id385">
+ <state id="id386">
+ <state id="id387">
+ <state id="id388">
+ <state id="id389">
+ <state id="id390">
+ <state id="id391">
+ <state id="id392">
+ <state id="id393">
+ <state id="id394">
+ <state id="id395">
+ <state id="id396">
+ <state id="id397">
+ <state id="id398">
+ <state id="id399">
+ <state id="id400">
+ <transition target="id401"/>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </state>
+ </parallel>
+ <state id="id401">
+ <transition target="id20 id40 id60 id80 id100 id120 id140 id160 id180 id200 id220 id240 id260 id280 id300 id320 id340 id360 id380 id400 "/>
+ </state>
+</scxml>