From 47b31bd9ebd22fd5a958779e56c823cbb50cb188 Mon Sep 17 00:00:00 2001 From: Etienne Renault Date: Tue, 9 Jun 2020 12:58:27 +0200 Subject: [PATCH] bricks: include tests in test-suite * tests/Makefile.am, tests/core/bricks.cc, tests/core/bricks.test: Here. --- tests/Makefile.am | 9 +-- tests/core/bricks.cc | 153 ++++++++++++++++++++++++++++++++++++++++- tests/core/bricks.test | 37 ++++++++++ 3 files changed, 194 insertions(+), 5 deletions(-) create mode 100644 tests/core/bricks.test diff --git a/tests/Makefile.am b/tests/Makefile.am index 7a1a5d03d..3b90f2ec1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -22,7 +22,7 @@ AUTOMAKE_OPTIONS = subdir-objects AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) $(BUDDY_CPPFLAGS) \ - -I$(top_srcdir)/spot/bricks -I$(top_builddir)/lib \ + -I$(top_builddir)/lib \ -I$(top_srcdir)/lib AM_CXXFLAGS = $(WARNING_CXXFLAGS) LDADD = $(top_builddir)/spot/libspot.la \ @@ -66,11 +66,11 @@ check_PROGRAMS = \ core/acc \ core/bdddict \ core/bitvect \ + core/bricks \ core/checkpsl \ core/checkta \ core/consterm \ core/cube \ - core/bricks \ core/emptchk \ core/equals \ core/graph \ @@ -109,6 +109,7 @@ check_PROGRAMS = \ core_acc_SOURCES = core/acc.cc core_bdddict_SOURCES = core/bdddict.cc core_bitvect_SOURCES = core/bitvect.cc +core_bricks_SOURCES = core/bricks.cc core_checkpsl_SOURCES = core/checkpsl.cc core_checkta_SOURCES = core/checkta.cc core_emptchk_SOURCES = core/emptchk.cc @@ -124,7 +125,6 @@ core_taatgba_SOURCES = core/taatgba.cc core_tgbagraph_SOURCES = core/twagraph.cc core_consterm_SOURCES = core/consterm.cc core_cube_SOURCES = core/cube.cc -core_bricks_SOURCES = core/bricks.cc core_equals_SOURCES = core/equalsf.cc core_kind_SOURCES = core/kind.cc core_length_SOURCES = core/length.cc @@ -160,7 +160,6 @@ core_twacube_SOURCES = core/twacube.cc TESTS_tl = \ core/bare.test \ - core/cube.test \ core/parse.test \ core/parseerr.test \ core/utf8.test \ @@ -210,6 +209,7 @@ TESTS_kripke = \ TESTS_misc = \ core/bdd.test \ core/bitvect.test \ + core/bricks.test \ core/intvcomp.test \ core/minusx.test \ core/full.test \ @@ -220,6 +220,7 @@ TESTS_twa = \ core/acc.test \ core/acc2.test \ core/bdddict.test \ + core/cube.test \ core/alternating.test \ core/ltlcross3.test \ core/ltlcross5.test \ diff --git a/tests/core/bricks.cc b/tests/core/bricks.cc index 81c08a242..919a37d7d 100644 --- a/tests/core/bricks.cc +++ b/tests/core/bricks.cc @@ -1,5 +1,5 @@ // -*- coding: utf-8 -*- -// Copyright (C) 2016, 2018 Laboratoire de Recherche et Développement +// Copyright (C) 2016, 2018, 2020 Laboratoire de Recherche et Développement // de l'Epita. // // This file is part of Spot, a model checking library. @@ -50,6 +50,150 @@ struct mytest_hasher_both } }; +template +void for_all(Functor&& f, Objects&&... objects) +{ + using expand = int[]; + (void) expand { 0, (f(std::forward(objects)), 0)... }; + +} + +static void test_brick_hashmap() +{ + brick::t_hashset::Sequential< brick::t_hashset::CS > t1; + brick::t_hashset::Sequential< brick::t_hashset::FS > t2; + brick::t_hashset::Sequential< brick::t_hashset::ConCS > t3; + brick::t_hashset::Sequential< brick::t_hashset::ConFS > t4; + + // In C++ 17, the for_all could be rewritten with fold expression + // auto tester = [](auto&&... args) { (args.basic(), ...); }; + // tester(t); + for_all([](auto& e) + { + std::cout << "# " << typeid(e).name() << '\n'; + std::cout << " [HM -- Sequential] Testing basic\n"; + e.basic(); + std::cout << " [HM -- Sequential] Testing stress\n"; + e.basic(); + std::cout << " [HM -- Sequential] Testing set\n"; + e.basic(); + }, t1, t2, t3, t4); + + brick::t_hashset::Parallel< brick::t_hashset::ConCS > t5; + brick::t_hashset::Parallel< brick::t_hashset::ConFS > t6; + for_all([](auto& e) + { + std::cout << "# " << typeid(e).name() << '\n'; + std::cout << " [HM -- Parallel] Testing insert\n"; + e.insert(); + std::cout << " [HM -- Parallel] Testing multi\n"; + e.multi(); + std::cout << " [HM -- Parallel] Testing stress\n"; + e.stress(); + std::cout << " [HM -- Parallel] Testing empty\n"; + e.empty(); + std::cout << " [HM -- Parallel] Testing set\n"; + e.set(); + }, t5, t6); +} + +static void test_brick_bitlevel() +{ + brick::t_bitlevel::BitTupleTest t1; + std::cout << "# " << typeid(t1).name() << '\n'; + std::cout << " [BL -- BitTupleTest] Testing mask\n"; + t1.mask(); + std::cout << " [BL -- BitTupleTest] Testing bitcopy\n"; + t1.bitcopy(); + std::cout << " [BL -- BitTupleTest] Testing field\n"; + t1.field(); + std::cout << " [BL -- BitTupleTest] Testing basic\n"; + t1.basic(); + std::cout << " [BL -- BitTupleTest] Testing big\n"; + t1.big(); + std::cout << " [BL -- BitTupleTest] Testing structure\n"; + t1.structure(); + std::cout << " [BL -- BitTupleTest] Testing nested\n"; + t1.nested(); + std::cout << " [BL -- BitTupleTest] Testing locked\n"; + t1.locked(); + std::cout << " [BL -- BitTupleTest] Testing assign\n"; + t1.assign(); + std::cout << " [BL -- BitTupleTest] Testing operators\n"; + t1.operators(); + std::cout << " [BL -- BitTupleTest] Testing ones\n"; + t1.ones(); + + brick::t_bitlevel::BitVecTest t2; + std::cout << "# " << typeid(t2).name() << '\n'; + std::cout << " [BL -- BitVecTest] Testing bvpair_shiftl\n"; + t2.bvpair_shiftl(); + std::cout << " [BL -- BitVecTest] Testing bvpair_shiftr\n"; + t2.bvpair_shiftr(); +} + +static void test_brick_hash() +{ + brick::t_hash::Jenkins t1; + std::cout << "# " << typeid(t1).name() << '\n'; + std::cout << " [H -- Jenkins] Testing results\n"; + t1.results(); + std::cout << " [H -- Jenkins] Testing alignment\n"; + t1.alignment(); + std::cout << " [H -- Jenkins] Testing pieces\n"; + t1.pieces(); +} + +static void test_brick_shmem() +{ + brick::t_shmem::ThreadTest t1; + std::cout << "# " << typeid(t1).name() << '\n'; + std::cout << " [S -- ThreadTest] Testing async_loop\n"; + // t1.async_loop(); // Triggers an alarm that break in test-suite + std::cout << " [S -- ThreadTest] Testing thread\n"; + // t1.thread(); // Triggers an alarm that break in test-suite +} + +static void test_brick_types() +{ + brick::t_types::Mixins t1; + std::cout << "# " << typeid(t1).name() << '\n'; + std::cout << " [T -- Mixins] Testing comparable\n"; + t1.comparable(); + std::cout << " [T -- Mixins] Testing eq\n"; + t1.eq(); + std::cout << " [T -- Mixins] Testing ord\n"; + t1.ord(); + std::cout << " [T -- Mixins] Testing eqord\n"; + t1.eqord(); + + brick::t_types::UnionTest t2; + std::cout << "# " << typeid(t2).name() << '\n'; + std::cout << " [T -- UnionTest] Testing basic\n"; + t2.basic(); + std::cout << " [T -- UnionTest] Testing moveNoCopy\n"; + t2.moveNoCopy(); + std::cout << " [T -- UnionTest] Testing ctorCast\n"; + t2.ctorCast(); + std::cout << " [T -- UnionTest] Testing eq\n"; + t2.eq(); + std::cout << " [T -- UnionTest] Testing ord\n"; + t2.ord(); + + brick::t_types::StrongEnumFlagsTest t3; + std::cout << "# " << typeid(t3).name() << '\n'; + std::cout << " [T -- StrongEnumFlagsTest] Testing regression\n"; + t3.regression(); + std::cout << " [T -- StrongEnumFlagsTest] Testing enum_uchar\n"; + t3.enum_uchar(); + std::cout << " [T -- StrongEnumFlagsTest] Testing enum_ushort\n"; + t3.enum_ushort(); + std::cout << " [T -- StrongEnumFlagsTest] Testing enum_uint\n"; + t3.enum_uint(); + std::cout << " [T -- StrongEnumFlagsTest] Testing enum_ulong\n"; + t3.enum_ulong(); +} + int main() { // Declare concurrent hash table @@ -75,5 +219,12 @@ int main() std::cout << i << ": {" << ht2.valueAt(i).x << ',' << ht2.valueAt(i).y << "}\n"; + + // Run tests that are already embedded inside of bricks + test_brick_hashmap(); + test_brick_bitlevel(); + test_brick_hash(); + test_brick_shmem(); + test_brick_types(); return 0; } diff --git a/tests/core/bricks.test b/tests/core/bricks.test new file mode 100644 index 000000000..0c1d5dc1c --- /dev/null +++ b/tests/core/bricks.test @@ -0,0 +1,37 @@ +#!/bin/sh +# -*- coding: utf-8 -*- +# Copyright (C) 2020 Laboratoire de Recherche et Développement de +# l'Epita (LRDE). +# +# 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 . + +# Do some quick translations to make sure the neverclaims produced by +# spot actually look correct! We do that by parsing them via ltlcross. +# ltl2neverclaim-lbtt.test does the same with LBTT if it is installed. + +. ./defs +set -e + +seq 0 1999 > expected + +../bricks > stdout + +cat stdout | head -n 2000 | awk '{print $2}' | sed 's/{//g' | \ + awk -F',' '{print $1}' | sort -n > map + +diff expected map + +test `cat stdout | wc -l` = 2067