// -*- coding: utf-8 -*- // Copyright (C) 2015, 2016 Laboratoire de Recherche et Développement // de l'Epita. // // This file is part of Spot, a model checking library. // // Spot is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // Spot is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public // License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include #include #include #include #include #include #include #include int main() { // Build some TWA auto d = spot::make_bdd_dict(); auto tg = make_twa_graph(d); bdd p1 = bdd_ithvar(tg->register_ap("p1")); bdd p2 = bdd_ithvar(tg->register_ap("p2")); tg->acc().add_sets(2); auto s1 = tg->new_state(); auto s2 = tg->new_state(); auto s3 = tg->new_state(); tg->new_edge(s1, s1, bddfalse, 0U); tg->new_edge(s1, s2, p1, 0U); tg->new_edge(s1, s3, p2, tg->acc().mark(1)); tg->new_edge(s2, s3, p1 & p2, tg->acc().mark(0)); tg->new_edge(s3, s1, p1 | p2, spot::acc_cond::mark_t({0, 1})); tg->new_edge(s3, s2, p1 >> p2, 0U); tg->new_edge(s3, s3, bddtrue, spot::acc_cond::mark_t({0, 1})); // Test translation auto* aut = twa_to_twacube(tg); spot::print_dot(std::cout, tg); std::cout << "-----------\n" << *aut << "-----------\n"; const std::vector& aps = aut->get_ap(); unsigned int seed = 17; for (auto it = aut->succ(2); !it->done(); it->next()) { auto& t = aut->trans_storage(it, seed); auto& d = aut->trans_data(it, seed); std::cout << t.src << ' ' << t.dst << ' ' << ' ' << aut->get_cubeset().dump(d.cube_, aps) << ' ' << d.acc_ << std::endl; } spot::print_dot(std::cout, spot::twacube_to_twa(aut)); delete aut; }