LCOV - code coverage report
Current view: top level - lts/test - lts_pbisim_test.cpp (source / functions) Hit Total Coverage
Test: mcrl2_coverage.info.cleaned Lines: 37 47 78.7 %
Date: 2024-04-21 03:44:01 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Author(s): Jan Friso Groote
       2             : // Copyright: see the accompanying file COPYING or copy at
       3             : // https://github.com/mCRL2org/mCRL2/blob/master/COPYING
       4             : //
       5             : // Distributed under the Boost Software License, Version 1.0.
       6             : // (See accompanying file LICENSE_1_0.txt or copy at
       7             : // http://www.boost.org/LICENSE_1_0.txt)
       8             : //
       9             : /// \file ltsconvert_test.cpp
      10             : /// \brief This file contains tests to see whether ltsconvert
      11             : //         reduces problems well.
      12             : 
      13             : #define BOOST_TEST_MODULE lts_pbisim_test
      14             : #include <boost/test/included/unit_test.hpp>
      15             : 
      16             : #include "mcrl2/lts/probabilistic_arbitrary_precision_fraction.h"
      17             : #include "mcrl2/lts/detail/liblts_pbisim_bem.h"
      18             : #include "mcrl2/lts/detail/liblts_pbisim_grv.h"
      19             : 
      20             : using namespace mcrl2::lts;
      21             : 
      22           7 : static probabilistic_lts_aut_t parse_aut(const std::string& s)
      23             : {
      24           7 :         std::stringstream is(s);
      25           7 :         probabilistic_lts_aut_t l;
      26           7 :         l.load(is);
      27          14 :         return l;
      28           7 : }
      29             : 
      30           7 : void execute_test(const std::string test_name,
      31             :                   const std::string input_lts,
      32             :                   const std::size_t expected_number_of_states,
      33             :                   const std::size_t expected_number_of_transitions,
      34             :                   const std::size_t expected_number_of_probabilistic_states)
      35             : {
      36          14 :   mcrl2::utilities::execution_timer timer;
      37           7 :   probabilistic_lts_aut_t t1 = parse_aut(input_lts);
      38           7 :   probabilistic_lts_aut_t t2=t1;
      39           7 :   BOOST_CHECK(t1==t2);
      40           7 :   detail::probabilistic_bisimulation_reduce_grv(t1,timer);
      41           7 :   if (t1.num_states()!=expected_number_of_states || t1.num_transitions() != expected_number_of_transitions || t1.num_probabilistic_states()!=expected_number_of_probabilistic_states)
      42             :   {
      43           0 :     std::cerr << "The test " << test_name << " failed using Groote, Rivera Verduzco, de Vink reduction.\n";
      44           0 :     std::cerr << "Expected number of states: " << expected_number_of_states << ". Actual number of states: " << t1.num_states() << "\n";
      45           0 :     std::cerr << "Expected number of transitions: " << expected_number_of_transitions << ". Actual number of transitions: " << t1.num_transitions() << "\n";
      46           0 :     std::cerr << "Expected number of probabilistic states: " << expected_number_of_probabilistic_states << ". Actual number of probabilistic states: " << t1.num_probabilistic_states() << "\n";
      47           0 :     BOOST_CHECK(false);
      48             :   }
      49             : 
      50           7 :   detail::probabilistic_bisimulation_reduce_bem(t2,timer);
      51           7 :   if (t2.num_states()!=expected_number_of_states || t2.num_transitions() != expected_number_of_transitions || t2.num_probabilistic_states()!=expected_number_of_probabilistic_states)
      52             :   {
      53           0 :     std::cerr << "The test " << test_name << " failed using Baier, Engelen, Majster-Cederbaum reduction.\n";
      54           0 :     std::cerr << "Expected number of states: " << expected_number_of_states << ". Actual number of states: " << t2.num_states() << "\n";
      55           0 :     std::cerr << "Expected number of transitions: " << expected_number_of_transitions << ". Actual number of transitions: " << t2.num_transitions() << "\n";
      56           0 :     std::cerr << "Expected number of probabilistic states: " << expected_number_of_probabilistic_states << ". Actual number of probabilistic states: " << t2.num_probabilistic_states() << "\n";
      57           0 :     BOOST_CHECK(false);
      58             :   }
      59             : 
      60           7 : }
      61             : 
      62             : // Example below represents an example using probabilistic lts.
      63             : const std::string test1 =
      64             : "des(1 1 / 9 2 1 / 9 3 1 / 9 4 1 / 9 5 1 / 9 6 1 / 9 7 1 / 9 8 1 / 9 0, 9, 10)\n"
      65             : "(0, \"player_collects_prize(false)\", 9)\n"
      66             : "(1, \"player_collects_prize(true)\", 9)\n"
      67             : "(2, \"player_collects_prize(true)\", 9)\n"
      68             : "(3, \"player_collects_prize(true)\", 9)\n"
      69             : "(4, \"player_collects_prize(false)\", 9)\n"
      70             : "(5, \"player_collects_prize(true)\", 9)\n"
      71             : "(6, \"player_collects_prize(true)\", 9)\n"
      72             : "(7, \"player_collects_prize(true)\", 9)\n"
      73             : "(8, \"player_collects_prize(false)\", 9)\n";
      74             : 
      75             : // Example below represents a.(1/2 b + 1/2 b) which can be reduced to a.b.
      76             : const std::string test2 =
      77             : "des (0,3,5)\n"
      78             : "(0,\"a\",1 1/2 2)\n"
      79             : "(1,\"b\",3)\n"
      80             : "(2,\"b\",4)\n";
      81             : 
      82             : // Example below represents a.(1/2 b + 1/2 b)+ a.(1/4 b + 3/4 b) which can be reduced to a.b.
      83             : const std::string test3 =
      84             : "des (0,4,5)\n"
      85             : "(0,\"a\",1 1/2 2)\n"
      86             : "(0,\"a\",1 1/4 2)\n"
      87             : "(1,\"b\",3)\n"
      88             : "(2,\"b\",4)\n";
      89             : 
      90             : //Example in paper of Christel Bier. Deciding Bisimilarity and Similarity for Probabilistic Processes.
      91             : const std::string test4 =
      92             : "des (0 1/4 5 1/4 11 1/4 14,11,19)\n"
      93             : "(0,\"a\",1)\n"
      94             : "(0,\"a\",2 1/2 3)\n"
      95             : "(2,\"b\",4)\n"
      96             : "(5,\"a\",6)\n"
      97             : "(5,\"a\",7 1/2 8 1/8 9)\n"
      98             : "(7,\"b\",10)\n"
      99             : "(11,\"a\",12)\n"
     100             : "(12,\"b\",13)\n"
     101             : "(14,\"a\",15 1/3 16)\n"
     102             : "(15,\"c\",17)\n"
     103             : "(16,\"b\",18)\n";
     104             : 
     105             : // Airplane ticket example test
     106             : const std::string test5 =
     107             : "des (1 1/3 0,14,15)\n"
     108             : "(0,\"enter\",3 1/4 4 1/4 5 1/4 2)\n"
     109             : "(1,\"enter\",7 1/2 6)\n"
     110             : "(2,\"enter_plane\",8)\n"
     111             : "(3,\"enter_plane\",9)\n"
     112             : "(4,\"enter_plane\",8)\n"
     113             : "(5,\"enter_plane\",8)\n"
     114             : "(6,\"enter_plane\",9)\n"
     115             : "(7,\"enter_plane\",9)\n"
     116             : "(8,\"enter\",10)\n"
     117             : "(9,\"enter\",11)\n"
     118             : "(10,\"enter_plane\",12)\n"
     119             : "(11,\"enter_plane\",13)\n"
     120             : "(12,\"last_passenger_has_his_own_seat(false)\",14)\n"
     121             : "(13,\"last_passenger_has_his_own_seat(true)\",14)\n";
     122             : 
     123             : // Ant grid test
     124             : const std::string test6 =
     125             : "des (1 1/4 2 1/4 3 1/4 0,240,240)\n"
     126             : "(0,\"step\",5 1/4 6 1/4 7 1/4 4)\n"
     127             : "(1,\"step\",9 1/4 10 1/4 11 1/4 8)\n"
     128             : "(2,\"step\",13 1/4 14 1/4 15 1/4 12)\n"
     129             : "(3,\"step\",17 1/4 18 1/4 19 1/4 16)\n"
     130             : "(4,\"step\",21 1/4 22 1/4 23 1/4 20)\n"
     131             : "(5,\"step\",1 1/4 2 1/4 3 1/4 0)\n"
     132             : "(6,\"step\",25 1/4 26 1/4 27 1/4 24)\n"
     133             : "(7,\"step\",29 1/4 30 1/4 31 1/4 28)\n"
     134             : "(8,\"step\",1 1/4 2 1/4 3 1/4 0)\n"
     135             : "(9,\"step\",33 1/4 34 1/4 35 1/4 32)\n"
     136             : "(10,\"step\",37 1/4 38 1/4 39 1/4 36)\n"
     137             : "(11,\"step\",41 1/4 42 1/4 43 1/4 40)\n"
     138             : "(12,\"step\",25 1/4 26 1/4 27 1/4 24)\n"
     139             : "(13,\"step\",37 1/4 38 1/4 39 1/4 36)\n"
     140             : "(14,\"step\",45 1/4 46 1/4 47 1/4 44)\n"
     141             : "(15,\"step\",1 1/4 2 1/4 3 1/4 0)\n"
     142             : "(16,\"step\",29 1/4 30 1/4 31 1/4 28)\n"
     143             : "(17,\"step\",41 1/4 42 1/4 43 1/4 40)\n"
     144             : "(18,\"step\",1 1/4 2 1/4 3 1/4 0)\n"
     145             : "(19,\"step\",49 1/4 50 1/4 51 1/4 48)\n"
     146             : "(20,\"step\",53 1/4 54 1/4 55 1/4 52)\n"
     147             : "(21,\"step\",5 1/4 6 1/4 7 1/4 4)\n"
     148             : "(22,\"step\",57 1/4 58 1/4 59 1/4 56)\n"
     149             : "(23,\"step\",61 1/4 62 1/4 63 1/4 60)\n"
     150             : "(24,\"step\",57 1/4 58 1/4 59 1/4 56)\n"
     151             : "(25,\"step\",13 1/4 14 1/4 15 1/4 12)\n"
     152             : "(26,\"step\",65 1/4 66 1/4 67 1/4 64)\n"
     153             : "(27,\"step\",5 1/4 6 1/4 7 1/4 4)\n"
     154             : "(28,\"step\",61 1/4 62 1/4 63 1/4 60)\n"
     155             : "(29,\"step\",17 1/4 18 1/4 19 1/4 16)\n"
     156             : "(30,\"step\",5 1/4 6 1/4 7 1/4 4)\n"
     157             : "(31,\"step\",69 1/4 70 1/4 71 1/4 68)\n"
     158             : "(32,\"step\",9 1/4 10 1/4 11 1/4 8)\n"
     159             : "(33,\"step\",73 1/4 74 1/4 75 1/4 72)\n"
     160             : "(34,\"step\",77 1/4 78 1/4 79 1/4 76)\n"
     161             : "(35,\"step\",81 1/4 82 1/4 83 1/4 80)\n"
     162             : "(36,\"step\",13 1/4 14 1/4 15 1/4 12)\n"
     163             : "(37,\"step\",77 1/4 78 1/4 79 1/4 76)\n"
     164             : "(38,\"step\",85 1/4 86 1/4 87 1/4 84)\n"
     165             : "(39,\"step\",9 1/4 10 1/4 11 1/4 8)\n"
     166             : "(40,\"step\",17 1/4 18 1/4 19 1/4 16)\n"
     167             : "(41,\"step\",81 1/4 82 1/4 83 1/4 80)\n"
     168             : "(42,\"step\",9 1/4 10 1/4 11 1/4 8)\n"
     169             : "(43,\"step\",89 1/4 90 1/4 91 1/4 88)\n"
     170             : "(44,\"dead\",45 1/4 46 1/4 47 1/4 44)\n"
     171             : "(45,\"dead\",45 1/4 46 1/4 47 1/4 44)\n"
     172             : "(46,\"dead\",45 1/4 46 1/4 47 1/4 44)\n"
     173             : "(47,\"dead\",45 1/4 46 1/4 47 1/4 44)\n"
     174             : "(48,\"step\",69 1/4 70 1/4 71 1/4 68)\n"
     175             : "(49,\"step\",89 1/4 90 1/4 91 1/4 88)\n"
     176             : "(50,\"step\",17 1/4 18 1/4 19 1/4 16)\n"
     177             : "(51,\"step\",93 1/4 94 1/4 95 1/4 92)\n"
     178             : "(52,\"step\",97 1/4 98 1/4 99 1/4 96)\n"
     179             : "(53,\"step\",21 1/4 22 1/4 23 1/4 20)\n"
     180             : "(54,\"step\",101 1/4 102 1/4 103 1/4 100)\n"
     181             : "(55,\"step\",105 1/4 106 1/4 107 1/4 104)\n"
     182             : "(56,\"step\",101 1/4 102 1/4 103 1/4 100)\n"
     183             : "(57,\"step\",25 1/4 26 1/4 27 1/4 24)\n"
     184             : "(58,\"step\",109 1/4 110 1/4 111 1/4 108)\n"
     185             : "(59,\"step\",21 1/4 22 1/4 23 1/4 20)\n"
     186             : "(60,\"step\",105 1/4 106 1/4 107 1/4 104)\n"
     187             : "(61,\"step\",29 1/4 30 1/4 31 1/4 28)\n"
     188             : "(62,\"step\",21 1/4 22 1/4 23 1/4 20)\n"
     189             : "(63,\"step\",113 1/4 114 1/4 115 1/4 112)\n"
     190             : "(64,\"dead\",65 1/4 66 1/4 67 1/4 64)\n"
     191             : "(65,\"dead\",65 1/4 66 1/4 67 1/4 64)\n"
     192             : "(66,\"dead\",65 1/4 66 1/4 67 1/4 64)\n"
     193             : "(67,\"dead\",65 1/4 66 1/4 67 1/4 64)\n"
     194             : "(68,\"step\",113 1/4 114 1/4 115 1/4 112)\n"
     195             : "(69,\"step\",49 1/4 50 1/4 51 1/4 48)\n"
     196             : "(70,\"step\",29 1/4 30 1/4 31 1/4 28)\n"
     197             : "(71,\"step\",117 1/4 118 1/4 119 1/4 116)\n"
     198             : "(72,\"live\",73 1/4 74 1/4 75 1/4 72)\n"
     199             : "(73,\"live\",73 1/4 74 1/4 75 1/4 72)\n"
     200             : "(74,\"live\",73 1/4 74 1/4 75 1/4 72)\n"
     201             : "(75,\"live\",73 1/4 74 1/4 75 1/4 72)\n"
     202             : "(76,\"step\",37 1/4 38 1/4 39 1/4 36)\n"
     203             : "(77,\"step\",121 1/4 122 1/4 123 1/4 120)\n"
     204             : "(78,\"step\",125 1/4 126 1/4 127 1/4 124)\n"
     205             : "(79,\"step\",33 1/4 34 1/4 35 1/4 32)\n"
     206             : "(80,\"step\",41 1/4 42 1/4 43 1/4 40)\n"
     207             : "(81,\"step\",129 1/4 130 1/4 131 1/4 128)\n"
     208             : "(82,\"step\",33 1/4 34 1/4 35 1/4 32)\n"
     209             : "(83,\"step\",133 1/4 134 1/4 135 1/4 132)\n"
     210             : "(84,\"dead\",85 1/4 86 1/4 87 1/4 84)\n"
     211             : "(85,\"dead\",85 1/4 86 1/4 87 1/4 84)\n"
     212             : "(86,\"dead\",85 1/4 86 1/4 87 1/4 84)\n"
     213             : "(87,\"dead\",85 1/4 86 1/4 87 1/4 84)\n"
     214             : "(88,\"step\",49 1/4 50 1/4 51 1/4 48)\n"
     215             : "(89,\"step\",133 1/4 134 1/4 135 1/4 132)\n"
     216             : "(90,\"step\",41 1/4 42 1/4 43 1/4 40)\n"
     217             : "(91,\"step\",137 1/4 138 1/4 139 1/4 136)\n"
     218             : "(92,\"step\",117 1/4 118 1/4 119 1/4 116)\n"
     219             : "(93,\"step\",137 1/4 138 1/4 139 1/4 136)\n"
     220             : "(94,\"step\",49 1/4 50 1/4 51 1/4 48)\n"
     221             : "(95,\"step\",141 1/4 142 1/4 143 1/4 140)\n"
     222             : "(96,\"live\",97 1/4 98 1/4 99 1/4 96)\n"
     223             : "(97,\"live\",97 1/4 98 1/4 99 1/4 96)\n"
     224             : "(98,\"live\",97 1/4 98 1/4 99 1/4 96)\n"
     225             : "(99,\"live\",97 1/4 98 1/4 99 1/4 96)\n"
     226             : "(100,\"step\",145 1/4 146 1/4 147 1/4 144)\n"
     227             : "(101,\"step\",57 1/4 58 1/4 59 1/4 56)\n"
     228             : "(102,\"step\",149 1/4 150 1/4 151 1/4 148)\n"
     229             : "(103,\"step\",53 1/4 54 1/4 55 1/4 52)\n"
     230             : "(104,\"step\",153 1/4 154 1/4 155 1/4 152)\n"
     231             : "(105,\"step\",61 1/4 62 1/4 63 1/4 60)\n"
     232             : "(106,\"step\",53 1/4 54 1/4 55 1/4 52)\n"
     233             : "(107,\"step\",157 1/4 158 1/4 159 1/4 156)\n"
     234             : "(108,\"dead\",109 1/4 110 1/4 111 1/4 108)\n"
     235             : "(109,\"dead\",109 1/4 110 1/4 111 1/4 108)\n"
     236             : "(110,\"dead\",109 1/4 110 1/4 111 1/4 108)\n"
     237             : "(111,\"dead\",109 1/4 110 1/4 111 1/4 108)\n"
     238             : "(112,\"step\",157 1/4 158 1/4 159 1/4 156)\n"
     239             : "(113,\"step\",69 1/4 70 1/4 71 1/4 68)\n"
     240             : "(114,\"step\",61 1/4 62 1/4 63 1/4 60)\n"
     241             : "(115,\"step\",161 1/4 162 1/4 163 1/4 160)\n"
     242             : "(116,\"step\",161 1/4 162 1/4 163 1/4 160)\n"
     243             : "(117,\"step\",93 1/4 94 1/4 95 1/4 92)\n"
     244             : "(118,\"step\",69 1/4 70 1/4 71 1/4 68)\n"
     245             : "(119,\"step\",165 1/4 166 1/4 167 1/4 164)\n"
     246             : "(120,\"live\",121 1/4 122 1/4 123 1/4 120)\n"
     247             : "(121,\"live\",121 1/4 122 1/4 123 1/4 120)\n"
     248             : "(122,\"live\",121 1/4 122 1/4 123 1/4 120)\n"
     249             : "(123,\"live\",121 1/4 122 1/4 123 1/4 120)\n"
     250             : "(124,\"dead\",125 1/4 126 1/4 127 1/4 124)\n"
     251             : "(125,\"dead\",125 1/4 126 1/4 127 1/4 124)\n"
     252             : "(126,\"dead\",125 1/4 126 1/4 127 1/4 124)\n"
     253             : "(127,\"dead\",125 1/4 126 1/4 127 1/4 124)\n"
     254             : "(128,\"live\",129 1/4 130 1/4 131 1/4 128)\n"
     255             : "(129,\"live\",129 1/4 130 1/4 131 1/4 128)\n"
     256             : "(130,\"live\",129 1/4 130 1/4 131 1/4 128)\n"
     257             : "(131,\"live\",129 1/4 130 1/4 131 1/4 128)\n"
     258             : "(132,\"step\",89 1/4 90 1/4 91 1/4 88)\n"
     259             : "(133,\"step\",169 1/4 170 1/4 171 1/4 168)\n"
     260             : "(134,\"step\",81 1/4 82 1/4 83 1/4 80)\n"
     261             : "(135,\"step\",173 1/4 174 1/4 175 1/4 172)\n"
     262             : "(136,\"step\",93 1/4 94 1/4 95 1/4 92)\n"
     263             : "(137,\"step\",173 1/4 174 1/4 175 1/4 172)\n"
     264             : "(138,\"step\",89 1/4 90 1/4 91 1/4 88)\n"
     265             : "(139,\"step\",177 1/4 178 1/4 179 1/4 176)\n"
     266             : "(140,\"step\",165 1/4 166 1/4 167 1/4 164)\n"
     267             : "(141,\"step\",177 1/4 178 1/4 179 1/4 176)\n"
     268             : "(142,\"step\",93 1/4 94 1/4 95 1/4 92)\n"
     269             : "(143,\"step\",181 1/4 182 1/4 183 1/4 180)\n"
     270             : "(144,\"live\",145 1/4 146 1/4 147 1/4 144)\n"
     271             : "(145,\"live\",145 1/4 146 1/4 147 1/4 144)\n"
     272             : "(146,\"live\",145 1/4 146 1/4 147 1/4 144)\n"
     273             : "(147,\"live\",145 1/4 146 1/4 147 1/4 144)\n"
     274             : "(148,\"dead\",149 1/4 150 1/4 151 1/4 148)\n"
     275             : "(149,\"dead\",149 1/4 150 1/4 151 1/4 148)\n"
     276             : "(150,\"dead\",149 1/4 150 1/4 151 1/4 148)\n"
     277             : "(151,\"dead\",149 1/4 150 1/4 151 1/4 148)\n"
     278             : "(152,\"live\",153 1/4 154 1/4 155 1/4 152)\n"
     279             : "(153,\"live\",153 1/4 154 1/4 155 1/4 152)\n"
     280             : "(154,\"live\",153 1/4 154 1/4 155 1/4 152)\n"
     281             : "(155,\"live\",153 1/4 154 1/4 155 1/4 152)\n"
     282             : "(156,\"step\",185 1/4 186 1/4 187 1/4 184)\n"
     283             : "(157,\"step\",113 1/4 114 1/4 115 1/4 112)\n"
     284             : "(158,\"step\",105 1/4 106 1/4 107 1/4 104)\n"
     285             : "(159,\"step\",189 1/4 190 1/4 191 1/4 188)\n"
     286             : "(160,\"step\",189 1/4 190 1/4 191 1/4 188)\n"
     287             : "(161,\"step\",117 1/4 118 1/4 119 1/4 116)\n"
     288             : "(162,\"step\",113 1/4 114 1/4 115 1/4 112)\n"
     289             : "(163,\"step\",193 1/4 194 1/4 195 1/4 192)\n"
     290             : "(164,\"step\",193 1/4 194 1/4 195 1/4 192)\n"
     291             : "(165,\"step\",141 1/4 142 1/4 143 1/4 140)\n"
     292             : "(166,\"step\",117 1/4 118 1/4 119 1/4 116)\n"
     293             : "(167,\"step\",197 1/4 198 1/4 199 1/4 196)\n"
     294             : "(168,\"live\",169 1/4 170 1/4 171 1/4 168)\n"
     295             : "(169,\"live\",169 1/4 170 1/4 171 1/4 168)\n"
     296             : "(170,\"live\",169 1/4 170 1/4 171 1/4 168)\n"
     297             : "(171,\"live\",169 1/4 170 1/4 171 1/4 168)\n"
     298             : "(172,\"step\",137 1/4 138 1/4 139 1/4 136)\n"
     299             : "(173,\"step\",201 1/4 202 1/4 203 1/4 200)\n"
     300             : "(174,\"step\",133 1/4 134 1/4 135 1/4 132)\n"
     301             : "(175,\"step\",205 1/4 206 1/4 207 1/4 204)\n"
     302             : "(176,\"step\",141 1/4 142 1/4 143 1/4 140)\n"
     303             : "(177,\"step\",205 1/4 206 1/4 207 1/4 204)\n"
     304             : "(178,\"step\",137 1/4 138 1/4 139 1/4 136)\n"
     305             : "(179,\"step\",209 1/4 210 1/4 211 1/4 208)\n"
     306             : "(180,\"dead\",181 1/4 182 1/4 183 1/4 180)\n"
     307             : "(181,\"dead\",181 1/4 182 1/4 183 1/4 180)\n"
     308             : "(182,\"dead\",181 1/4 182 1/4 183 1/4 180)\n"
     309             : "(183,\"dead\",181 1/4 182 1/4 183 1/4 180)\n"
     310             : "(184,\"live\",185 1/4 186 1/4 187 1/4 184)\n"
     311             : "(185,\"live\",185 1/4 186 1/4 187 1/4 184)\n"
     312             : "(186,\"live\",185 1/4 186 1/4 187 1/4 184)\n"
     313             : "(187,\"live\",185 1/4 186 1/4 187 1/4 184)\n"
     314             : "(188,\"step\",213 1/4 214 1/4 215 1/4 212)\n"
     315             : "(189,\"step\",161 1/4 162 1/4 163 1/4 160)\n"
     316             : "(190,\"step\",157 1/4 158 1/4 159 1/4 156)\n"
     317             : "(191,\"step\",217 1/4 218 1/4 219 1/4 216)\n"
     318             : "(192,\"step\",217 1/4 218 1/4 219 1/4 216)\n"
     319             : "(193,\"step\",165 1/4 166 1/4 167 1/4 164)\n"
     320             : "(194,\"step\",161 1/4 162 1/4 163 1/4 160)\n"
     321             : "(195,\"step\",221 1/4 222 1/4 223 1/4 220)\n"
     322             : "(196,\"dead\",197 1/4 198 1/4 199 1/4 196)\n"
     323             : "(197,\"dead\",197 1/4 198 1/4 199 1/4 196)\n"
     324             : "(198,\"dead\",197 1/4 198 1/4 199 1/4 196)\n"
     325             : "(199,\"dead\",197 1/4 198 1/4 199 1/4 196)\n"
     326             : "(200,\"live\",201 1/4 202 1/4 203 1/4 200)\n"
     327             : "(201,\"live\",201 1/4 202 1/4 203 1/4 200)\n"
     328             : "(202,\"live\",201 1/4 202 1/4 203 1/4 200)\n"
     329             : "(203,\"live\",201 1/4 202 1/4 203 1/4 200)\n"
     330             : "(204,\"step\",177 1/4 178 1/4 179 1/4 176)\n"
     331             : "(205,\"step\",225 1/4 226 1/4 227 1/4 224)\n"
     332             : "(206,\"step\",173 1/4 174 1/4 175 1/4 172)\n"
     333             : "(207,\"step\",229 1/4 230 1/4 231 1/4 228)\n"
     334             : "(208,\"dead\",209 1/4 210 1/4 211 1/4 208)\n"
     335             : "(209,\"dead\",209 1/4 210 1/4 211 1/4 208)\n"
     336             : "(210,\"dead\",209 1/4 210 1/4 211 1/4 208)\n"
     337             : "(211,\"dead\",209 1/4 210 1/4 211 1/4 208)\n"
     338             : "(212,\"live\",213 1/4 214 1/4 215 1/4 212)\n"
     339             : "(213,\"live\",213 1/4 214 1/4 215 1/4 212)\n"
     340             : "(214,\"live\",213 1/4 214 1/4 215 1/4 212)\n"
     341             : "(215,\"live\",213 1/4 214 1/4 215 1/4 212)\n"
     342             : "(216,\"step\",233 1/4 234 1/4 235 1/4 232)\n"
     343             : "(217,\"step\",193 1/4 194 1/4 195 1/4 192)\n"
     344             : "(218,\"step\",189 1/4 190 1/4 191 1/4 188)\n"
     345             : "(219,\"step\",237 1/4 238 1/4 239 1/4 236)\n"
     346             : "(220,\"dead\",221 1/4 222 1/4 223 1/4 220)\n"
     347             : "(221,\"dead\",221 1/4 222 1/4 223 1/4 220)\n"
     348             : "(222,\"dead\",221 1/4 222 1/4 223 1/4 220)\n"
     349             : "(223,\"dead\",221 1/4 222 1/4 223 1/4 220)\n"
     350             : "(224,\"live\",225 1/4 226 1/4 227 1/4 224)\n"
     351             : "(225,\"live\",225 1/4 226 1/4 227 1/4 224)\n"
     352             : "(226,\"live\",225 1/4 226 1/4 227 1/4 224)\n"
     353             : "(227,\"live\",225 1/4 226 1/4 227 1/4 224)\n"
     354             : "(228,\"dead\",229 1/4 230 1/4 231 1/4 228)\n"
     355             : "(229,\"dead\",229 1/4 230 1/4 231 1/4 228)\n"
     356             : "(230,\"dead\",229 1/4 230 1/4 231 1/4 228)\n"
     357             : "(231,\"dead\",229 1/4 230 1/4 231 1/4 228)\n"
     358             : "(232,\"live\",233 1/4 234 1/4 235 1/4 232)\n"
     359             : "(233,\"live\",233 1/4 234 1/4 235 1/4 232)\n"
     360             : "(234,\"live\",233 1/4 234 1/4 235 1/4 232)\n"
     361             : "(235,\"live\",233 1/4 234 1/4 235 1/4 232)\n"
     362             : "(236,\"dead\",237 1/4 238 1/4 239 1/4 236)\n"
     363             : "(237,\"dead\",237 1/4 238 1/4 239 1/4 236)\n"
     364             : "(238,\"dead\",237 1/4 238 1/4 239 1/4 236)\n"
     365             : "(239,\"dead\",237 1/4 238 1/4 239 1/4 236)\n"
     366             : ;
     367             : 
     368             : /* The example below turned out to be a tricky example on which
     369             :  * an intermediate version of the Groote/Verduzco/Vink algorithm failed. */
     370             : std::string test7 =
     371             : "des(0,5,3)\n"
     372             : "(0,\"a\", 2)\n"
     373             : "(1,\"a\", 2 2/4 2)\n"
     374             : "(0,\"tau\",0 1/4 1 2/4 1)\n"
     375             : "(1,\"tau\",1 3/4 1)\n"
     376             : "(0,\"tau\",2 3/4 2)\n"
     377             : ;
     378             : 
     379             : 
     380           2 : BOOST_AUTO_TEST_CASE(test_state_space_reductions)
     381             : {
     382           1 :   execute_test("Test1",test1,3,2,1);
     383           1 :   execute_test("Test2",test1,3,2,1);
     384           1 :   execute_test("Test3",test3,3,2,2);
     385           1 :   execute_test("Test4",test4,6,6,4); 
     386           1 :   execute_test("Test5",test5,11,10,9);
     387           1 :   execute_test("Test6",test6,13,13,11); 
     388           1 :   execute_test("Test7",test7,3,5,3);
     389           1 : }
     390             : 
     391             : // Test whether a probabilistic state of length 1,
     392             : // stored as a single number, and stored as a vector of length 1
     393             : // are considered the same object for equality and the hash function.
     394           2 : BOOST_AUTO_TEST_CASE(hash_and_equality_test)
     395             : {
     396             :   typedef probabilistic_state<std::size_t, mcrl2::lps::probabilistic_data_expression> prob_state;
     397           1 :   prob_state s1(1);
     398           1 :   prob_state s2;
     399           1 :   s2.add(1,mcrl2::lps::probabilistic_data_expression::one());
     400           1 :   BOOST_CHECK(s1==s2);
     401             :   std::hash<prob_state> hasher;
     402           1 :   BOOST_CHECK(hasher(s1)==hasher(s2));
     403             : 
     404             :   typedef probabilistic_state<std::size_t, mcrl2::lts::probabilistic_arbitrary_precision_fraction> prob_state_alt;
     405           1 :   prob_state_alt s3(1);
     406           1 :   prob_state_alt s4;
     407           1 :   s4.add(1,mcrl2::lts::probabilistic_arbitrary_precision_fraction::one());
     408           1 :   BOOST_CHECK(s3==s4);
     409             :   std::hash<prob_state_alt> hasher_alt;
     410           1 :   BOOST_CHECK(hasher_alt(s3)==hasher_alt(s4));
     411           1 : }

Generated by: LCOV version 1.14