Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libsemigroups for openSUSE:Factory checked in at 2021-09-21 21:12:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libsemigroups (Old) and /work/SRC/openSUSE:Factory/.libsemigroups.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libsemigroups" Tue Sep 21 21:12:43 2021 rev:9 rq:920448 version:2.0.2 Changes: -------- --- /work/SRC/openSUSE:Factory/libsemigroups/libsemigroups.changes 2021-08-29 21:33:55.086673633 +0200 +++ /work/SRC/openSUSE:Factory/.libsemigroups.new.1899/libsemigroups.changes 2021-09-21 21:13:33.866667254 +0200 @@ -1,0 +2,7 @@ +Mon Sep 20 20:41:07 UTC 2021 - Jan Engelhardt <jeng...@inai.de> + +- Update to release 2.0.2 + * This release includes some missing operators, adapters, and + docs were added. + +------------------------------------------------------------------- Old: ---- libsemigroups-2.0.1.tar.gz New: ---- libsemigroups-2.0.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libsemigroups.spec ++++++ --- /var/tmp/diff_new_pack.fEjucj/_old 2021-09-21 21:13:34.430667892 +0200 +++ /var/tmp/diff_new_pack.fEjucj/_new 2021-09-21 21:13:34.434667897 +0200 @@ -18,7 +18,7 @@ Name: libsemigroups %define lname libsemigroups2 -Version: 2.0.1 +Version: 2.0.2 Release: 0 Summary: Library with algorithms for computing finite and finitely presented semigroups License: GPL-3.0-or-later ++++++ libsemigroups-2.0.1.tar.gz -> libsemigroups-2.0.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/.VERSION new/libsemigroups-2.0.2/.VERSION --- old/libsemigroups-2.0.1/.VERSION 2021-08-28 18:59:48.580137754 +0200 +++ new/libsemigroups-2.0.2/.VERSION 2021-09-20 21:00:15.511953402 +0200 @@ -1 +1 @@ -2.0.1 \ No newline at end of file +2.0.2 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/README.rst new/libsemigroups-2.0.2/README.rst --- old/libsemigroups-2.0.1/README.rst 2021-08-28 18:59:58.362237104 +0200 +++ new/libsemigroups-2.0.2/README.rst 2021-09-20 21:00:25.382831151 +0200 @@ -4,7 +4,7 @@ The full license is in the file LICENSE, distributed with this software. -libsemigroups - Version 2.0.1 +libsemigroups - Version 2.0.2 ============================= .. image:: https://readthedocs.org/projects/libsemigroups/badge/?version=master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/configure new/libsemigroups-2.0.2/configure --- old/libsemigroups-2.0.1/configure 2021-08-28 19:00:02.280213220 +0200 +++ new/libsemigroups-2.0.2/configure 2021-09-20 21:00:29.725546812 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libsemigroups 2.0.1. +# Generated by GNU Autoconf 2.71 for libsemigroups 2.0.2. # # Report bugs to <j...@st-andrews.ac.uk>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='libsemigroups' PACKAGE_TARNAME='libsemigroups' -PACKAGE_VERSION='2.0.1' -PACKAGE_STRING='libsemigroups 2.0.1' +PACKAGE_VERSION='2.0.2' +PACKAGE_STRING='libsemigroups 2.0.2' PACKAGE_BUGREPORT='j...@st-andrews.ac.uk' PACKAGE_URL='' @@ -1428,7 +1428,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libsemigroups 2.0.1 to adapt to many kinds of systems. +\`configure' configures libsemigroups 2.0.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1500,7 +1500,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libsemigroups 2.0.1:";; + short | recursive ) echo "Configuration of libsemigroups 2.0.2:";; esac cat <<\_ACEOF @@ -1640,7 +1640,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libsemigroups configure 2.0.1 +libsemigroups configure 2.0.2 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2479,7 +2479,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libsemigroups $as_me 2.0.1, which was +It was created by libsemigroups $as_me 2.0.2, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -4088,7 +4088,7 @@ # Define the identity of the package. PACKAGE='libsemigroups' - VERSION='2.0.1' + VERSION='2.0.2' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -23260,7 +23260,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libsemigroups $as_me 2.0.1, which was +This file was extended by libsemigroups $as_me 2.0.2, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23328,7 +23328,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libsemigroups config.status 2.0.1 +libsemigroups config.status 2.0.2 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/changelog.rst new/libsemigroups-2.0.2/docs/source/changelog.rst --- old/libsemigroups-2.0.1/docs/source/changelog.rst 2021-08-28 18:59:58.370376728 +0200 +++ new/libsemigroups-2.0.2/docs/source/changelog.rst 2021-09-20 21:00:25.383268197 +0200 @@ -1,6 +1,11 @@ Changelog - version 2 ===================== +v2.0.2 (released 20/09/2021) +---------------------------- + +This release includes some missing operators, adapters, and doc were added. + v2.0.1 (released 28/08/2021) ---------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/index.rst new/libsemigroups-2.0.2/docs/source/index.rst --- old/libsemigroups-2.0.1/docs/source/index.rst 2021-08-28 18:59:58.370949889 +0200 +++ new/libsemigroups-2.0.2/docs/source/index.rst 2021-09-20 21:00:25.383746115 +0200 @@ -1,4 +1,4 @@ -libsemigroups - Version 2.0.1 +libsemigroups - Version 2.0.2 ============================= C++ library for semigroups and monoids diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/install.rst new/libsemigroups-2.0.2/docs/source/install.rst --- old/libsemigroups-2.0.1/docs/source/install.rst 2021-08-28 18:59:58.371380385 +0200 +++ new/libsemigroups-2.0.2/docs/source/install.rst 2021-09-20 21:00:25.384164537 +0200 @@ -1,4 +1,4 @@ -.. |libsemigroups-version| replace:: 2.0.1 +.. |libsemigroups-version| replace:: 2.0.2 .. _Installation: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-compile/operator_prod_equals.rst new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-compile/operator_prod_equals.rst --- old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-compile/operator_prod_equals.rst 2021-05-26 18:33:48.191799440 +0200 +++ new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-compile/operator_prod_equals.rst 2021-09-20 21:00:25.384593417 +0200 @@ -13,9 +13,9 @@ .. cpp:function:: void operator*=(scalar_type const a) - Adds a scalar to every entry of the matrix in-place. + Multiplies every entry of the matrix by a scalar in-place. - :param a: the scalar to add to every entry of ``this``. + :param a: the scalar to multiply every entry of ``this``. :returns: (None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-compile/transpose.rst new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-compile/transpose.rst --- old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-compile/transpose.rst 2021-05-26 18:33:48.192103522 +0200 +++ new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-compile/transpose.rst 2021-09-20 21:00:25.384962219 +0200 @@ -13,7 +13,7 @@ .. cpp:function:: void transpose() noexcept - Swaps the contents of ``this`` with the contents of ``that``. + Transposes the matrix in-place. :parameters: (None) @@ -23,9 +23,8 @@ this function guarantees not to throw a :cpp:any:`LibsemigroupsException`. :complexity: - :math:`O(mn)` where :math:`m` is the template parameter :code:`R` and - :math:`n` is the template parameter :code:`C`. - + :math:`O(n ^ 2)` where :math:`n` is the number of rows and + the number of columns in the matrix. + .. warning:: - This only works when the template parameters ``R`` and ``C`` are equal - (i.e. for square matrices). + This only works for square matrices. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-run/operator_prod_equals.rst new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-run/operator_prod_equals.rst --- old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-run/operator_prod_equals.rst 2021-05-26 18:33:48.192830020 +0200 +++ new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-run/operator_prod_equals.rst 2021-09-20 21:00:25.385337437 +0200 @@ -13,9 +13,9 @@ .. cpp:function:: void operator*=(scalar_type const a) - Adds a scalar to every entry of the matrix in-place. + Multiplies every entry of the matrix by a scalar in-place. - :param a: the scalar to add to every entry of ``this``. + :param a: the scalar to multiply every entry of ``this``. :returns: (None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-run/transpose.rst new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-run/transpose.rst --- old/libsemigroups-2.0.1/docs/source/matrix/dynamicmatrix-run/transpose.rst 2021-05-26 18:33:48.193121227 +0200 +++ new/libsemigroups-2.0.2/docs/source/matrix/dynamicmatrix-run/transpose.rst 2021-09-20 21:00:25.385828854 +0200 @@ -13,7 +13,7 @@ .. cpp:function:: void transpose() noexcept - Swaps the contents of ``this`` with the contents of ``that``. + Transposes the matrix in-place. :parameters: (None) @@ -23,9 +23,8 @@ this function guarantees not to throw a :cpp:any:`LibsemigroupsException`. :complexity: - :math:`O(mn)` where :math:`m` is the template parameter :code:`R` and - :math:`n` is the template parameter :code:`C`. + :math:`O(n ^ 2)` where :math:`n` is the number of rows and + the number of columns in the matrix. .. warning:: - This only works when the template parameters ``R`` and ``C`` are equal - (i.e. for square matrices). + This only works for square matrices. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/matrix/staticmatrix/operator_prod_equals.rst new/libsemigroups-2.0.2/docs/source/matrix/staticmatrix/operator_prod_equals.rst --- old/libsemigroups-2.0.1/docs/source/matrix/staticmatrix/operator_prod_equals.rst 2021-05-26 18:33:48.195375260 +0200 +++ new/libsemigroups-2.0.2/docs/source/matrix/staticmatrix/operator_prod_equals.rst 2021-09-20 21:00:25.386216446 +0200 @@ -13,9 +13,9 @@ .. cpp:function:: void operator*=(scalar_type const a) - Adds a scalar to every entry of the matrix in-place. + Multiplies every entry of the matrix by a scalar in-place. - :param a: the scalar to add to every entry of ``this``. + :param a: the scalar to multiply every entry of ``this``. :returns: (None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/source/matrix/staticmatrix/transpose.rst new/libsemigroups-2.0.2/docs/source/matrix/staticmatrix/transpose.rst --- old/libsemigroups-2.0.1/docs/source/matrix/staticmatrix/transpose.rst 2021-05-26 18:33:48.195608509 +0200 +++ new/libsemigroups-2.0.2/docs/source/matrix/staticmatrix/transpose.rst 2021-09-20 21:00:25.386564833 +0200 @@ -13,7 +13,7 @@ .. cpp:function:: void transpose() noexcept - Swaps the contents of ``this`` with the contents of ``that``. + Transposes the matrix in-place. :parameters: (None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/action.yml new/libsemigroups-2.0.2/docs/yml/action.yml --- old/libsemigroups-2.0.1/docs/yml/action.yml 2021-05-26 18:33:48.197095879 +0200 +++ new/libsemigroups-2.0.2/docs/yml/action.yml 2021-09-20 21:00:25.387143617 +0200 @@ -67,5 +67,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/cong-wrap.yml new/libsemigroups-2.0.2/docs/yml/cong-wrap.yml --- old/libsemigroups-2.0.1/docs/yml/cong-wrap.yml 2021-06-03 20:13:51.989874088 +0200 +++ new/libsemigroups-2.0.2/docs/yml/cong-wrap.yml 2021-09-20 21:00:25.387508336 +0200 @@ -88,5 +88,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/congruence.yml new/libsemigroups-2.0.2/docs/yml/congruence.yml --- old/libsemigroups-2.0.1/docs/yml/congruence.yml 2021-08-28 16:47:47.971528373 +0200 +++ new/libsemigroups-2.0.2/docs/yml/congruence.yml 2021-09-20 21:00:25.387968672 +0200 @@ -82,5 +82,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/congruence_knuth_bendix.yml new/libsemigroups-2.0.2/docs/yml/congruence_knuth_bendix.yml --- old/libsemigroups-2.0.1/docs/yml/congruence_knuth_bendix.yml 2021-06-03 20:13:51.990254660 +0200 +++ new/libsemigroups-2.0.2/docs/yml/congruence_knuth_bendix.yml 2021-09-20 21:00:25.388328516 +0200 @@ -70,5 +70,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/congruence_toddcoxeter.yml new/libsemigroups-2.0.2/docs/yml/congruence_toddcoxeter.yml --- old/libsemigroups-2.0.1/docs/yml/congruence_toddcoxeter.yml 2021-06-03 20:13:51.990467070 +0200 +++ new/libsemigroups-2.0.2/docs/yml/congruence_toddcoxeter.yml 2021-09-20 21:00:25.388824016 +0200 @@ -140,5 +140,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/congruencebypairs.yml new/libsemigroups-2.0.2/docs/yml/congruencebypairs.yml --- old/libsemigroups-2.0.1/docs/yml/congruencebypairs.yml 2021-06-02 12:50:19.770376804 +0200 +++ new/libsemigroups-2.0.2/docs/yml/congruencebypairs.yml 2021-09-20 21:00:25.389178819 +0200 @@ -70,5 +70,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/congruenceinterface.yml new/libsemigroups-2.0.2/docs/yml/congruenceinterface.yml --- old/libsemigroups-2.0.1/docs/yml/congruenceinterface.yml 2021-06-03 20:13:51.990675856 +0200 +++ new/libsemigroups-2.0.2/docs/yml/congruenceinterface.yml 2021-09-20 21:00:25.389531164 +0200 @@ -81,5 +81,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/dynamicptransf.yml new/libsemigroups-2.0.2/docs/yml/dynamicptransf.yml --- old/libsemigroups-2.0.1/docs/yml/dynamicptransf.yml 2021-06-03 20:13:51.991043178 +0200 +++ new/libsemigroups-2.0.2/docs/yml/dynamicptransf.yml 2021-09-20 21:00:25.390150986 +0200 @@ -51,3 +51,4 @@ - rank() const - hash_value() const - degree() const noexcept + - undef() noexcept diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/fpsemigroup.yml new/libsemigroups-2.0.2/docs/yml/fpsemigroup.yml --- old/libsemigroups-2.0.1/docs/yml/fpsemigroup.yml 2021-08-28 16:47:47.971641035 +0200 +++ new/libsemigroups-2.0.2/docs/yml/fpsemigroup.yml 2021-09-20 21:00:25.390590449 +0200 @@ -83,5 +83,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/fpsemigroup_knuth_bendix.yml new/libsemigroups-2.0.2/docs/yml/fpsemigroup_knuth_bendix.yml --- old/libsemigroups-2.0.1/docs/yml/fpsemigroup_knuth_bendix.yml 2021-06-03 20:13:51.991651285 +0200 +++ new/libsemigroups-2.0.2/docs/yml/fpsemigroup_knuth_bendix.yml 2021-09-20 21:00:25.390976624 +0200 @@ -110,5 +110,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/fpsemigroupinterface.yml new/libsemigroups-2.0.2/docs/yml/fpsemigroupinterface.yml --- old/libsemigroups-2.0.1/docs/yml/fpsemigroupinterface.yml 2021-06-03 20:13:51.991854778 +0200 +++ new/libsemigroups-2.0.2/docs/yml/fpsemigroupinterface.yml 2021-09-20 21:00:25.391392381 +0200 @@ -107,5 +107,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/froidurepin.yml new/libsemigroups-2.0.2/docs/yml/froidurepin.yml --- old/libsemigroups-2.0.1/docs/yml/froidurepin.yml 2021-06-03 20:13:51.992271391 +0200 +++ new/libsemigroups-2.0.2/docs/yml/froidurepin.yml 2021-09-20 21:00:25.391781056 +0200 @@ -157,5 +157,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/froidurepinbase.yml new/libsemigroups-2.0.2/docs/yml/froidurepinbase.yml --- old/libsemigroups-2.0.1/docs/yml/froidurepinbase.yml 2021-06-03 20:13:51.992485718 +0200 +++ new/libsemigroups-2.0.2/docs/yml/froidurepinbase.yml 2021-09-20 21:00:25.392136401 +0200 @@ -88,5 +88,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/knuthbendixcongruencebypairs.yml new/libsemigroups-2.0.2/docs/yml/knuthbendixcongruencebypairs.yml --- old/libsemigroups-2.0.1/docs/yml/knuthbendixcongruencebypairs.yml 2021-06-03 20:13:51.992885789 +0200 +++ new/libsemigroups-2.0.2/docs/yml/knuthbendixcongruencebypairs.yml 2021-09-20 21:00:25.392491620 +0200 @@ -62,5 +62,6 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/konieczny.yml new/libsemigroups-2.0.2/docs/yml/konieczny.yml --- old/libsemigroups-2.0.1/docs/yml/konieczny.yml 2021-06-03 20:13:51.993083408 +0200 +++ new/libsemigroups-2.0.2/docs/yml/konieczny.yml 2021-09-20 21:00:25.392848465 +0200 @@ -108,6 +108,7 @@ - run_until(bool(*)()) - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/pbr.yml new/libsemigroups-2.0.2/docs/yml/pbr.yml --- old/libsemigroups-2.0.1/docs/yml/pbr.yml 2021-06-03 20:13:51.993645349 +0200 +++ new/libsemigroups-2.0.2/docs/yml/pbr.yml 2021-09-20 21:00:25.393213559 +0200 @@ -9,10 +9,16 @@ - operator<<(std::ostream &,PBR const &) - Constructors: - ["This page lists the constructors of :cpp:any:`PBR`."] - - PBR(vector_type) - PBR(initializer_list_type<uint32_t>) + - PBR(vector_type<uint32_t>) - PBR(size_t) - PBR(initializer_list_type<int32_t>,initializer_list_type<int32_t>) + - PBR(vector_type<int32_t>,vector_type<int32_t>) + - PBR() = delete + - PBR(PBR const &) = default + - PBR(PBR &&) = default + - operator=(PBR const &) = default + - operator=(PBR &&) = default - Static member functions: - ["This page lists the static member functions of :cpp:any:`PBR`."] - identity() const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/runner.yml new/libsemigroups-2.0.2/docs/yml/runner.yml --- old/libsemigroups-2.0.1/docs/yml/runner.yml 2021-05-26 18:33:48.203730605 +0200 +++ new/libsemigroups-2.0.2/docs/yml/runner.yml 2021-09-20 21:00:25.393563071 +0200 @@ -9,6 +9,7 @@ - Reporting: - report_every(TIntType) - report_every(std::chrono::nanoseconds) + - report_every() const noexcept - report() const - report_why_we_stopped() const - State: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/docs/yml/staticptransf.yml new/libsemigroups-2.0.2/docs/yml/staticptransf.yml --- old/libsemigroups-2.0.1/docs/yml/staticptransf.yml 2021-06-03 20:13:51.994235040 +0200 +++ new/libsemigroups-2.0.2/docs/yml/staticptransf.yml 2021-09-20 21:00:25.393879127 +0200 @@ -37,3 +37,4 @@ - rank() const - hash_value() const - degree() const noexcept + - undef() noexcept diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/include/libsemigroups/bipart.hpp new/libsemigroups-2.0.2/include/libsemigroups/bipart.hpp --- old/libsemigroups-2.0.1/include/libsemigroups/bipart.hpp 2021-08-28 16:47:47.973126900 +0200 +++ new/libsemigroups-2.0.2/include/libsemigroups/bipart.hpp 2021-09-20 21:00:25.395371709 +0200 @@ -264,7 +264,7 @@ //! This function returns the number of parts in the partition that //! instances of this class represent. //! - //! \returns The number of blocks in a Blocks object. + //! \returns The number of blocks in a Bipartition object. //! //! \exceptions //! \noexcept @@ -1135,7 +1135,24 @@ //! //! \complexity //! At worst linear in the degree of \p x and \p y. - bool operator!=(Bipartition const& x, Bipartition const& y); + inline bool operator!=(Bipartition const& x, Bipartition const& y) { + return !(x == y); + } + + //! Convenience function that just calls ``operator<`` and ``operator==``. + inline bool operator<=(Bipartition const& x, Bipartition const& y) { + return x < y || x == y; + } + + //! Convenience function that just calls ``operator<``. + inline bool operator>(Bipartition const& x, Bipartition const& y) { + return y < x; + } + + //! Convenience function that just calls ``operator<=``. + inline bool operator>=(Bipartition const& x, Bipartition const& y) { + return y <= x; + } //////////////////////////////////////////////////////////////////////// // Adapters @@ -1200,5 +1217,10 @@ } }; + template <> + struct IncreaseDegree<Bipartition> { + void operator()(Bipartition&, size_t) {} + }; + } // namespace libsemigroups #endif // LIBSEMIGROUPS_BIPART_HPP_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/include/libsemigroups/bmat8.hpp new/libsemigroups-2.0.2/include/libsemigroups/bmat8.hpp --- old/libsemigroups-2.0.1/include/libsemigroups/bmat8.hpp 2021-06-02 12:50:19.894675293 +0200 +++ new/libsemigroups-2.0.2/include/libsemigroups/bmat8.hpp 2021-09-20 21:00:25.395983407 +0200 @@ -680,7 +680,7 @@ template <> struct IncreaseDegree<BMat8> { //! Does nothing. - inline void operator()(BMat8 const&) const noexcept {} + inline void operator()(BMat8 const&, size_t) const noexcept {} }; //! Specialization of the adapter One for instances of BMat8. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/include/libsemigroups/config.hpp new/libsemigroups-2.0.2/include/libsemigroups/config.hpp --- old/libsemigroups-2.0.1/include/libsemigroups/config.hpp 2021-08-28 19:00:07.688698414 +0200 +++ new/libsemigroups-2.0.2/include/libsemigroups/config.hpp 2021-09-20 21:00:35.518147809 +0200 @@ -176,7 +176,7 @@ /* Define to the full name and version of this package. */ #ifndef LIBSEMIGROUPS_PACKAGE_STRING -#define LIBSEMIGROUPS_PACKAGE_STRING "libsemigroups 2.0.1" +#define LIBSEMIGROUPS_PACKAGE_STRING "libsemigroups 2.0.2" #endif /* Define to the one symbol short name of this package. */ @@ -191,7 +191,7 @@ /* Define to the version of this package. */ #ifndef LIBSEMIGROUPS_PACKAGE_VERSION -#define LIBSEMIGROUPS_PACKAGE_VERSION "2.0.1" +#define LIBSEMIGROUPS_PACKAGE_VERSION "2.0.2" #endif /* Define to necessary symbol if this constant uses a non-standard name on @@ -227,7 +227,7 @@ /* Version number of package */ #ifndef LIBSEMIGROUPS_VERSION -#define LIBSEMIGROUPS_VERSION "2.0.1" +#define LIBSEMIGROUPS_VERSION "2.0.2" #endif /* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/include/libsemigroups/matrix.hpp new/libsemigroups-2.0.2/include/libsemigroups/matrix.hpp --- old/libsemigroups-2.0.1/include/libsemigroups/matrix.hpp 2021-08-28 16:47:47.978300803 +0200 +++ new/libsemigroups-2.0.2/include/libsemigroups/matrix.hpp 2021-09-20 21:00:25.397105853 +0200 @@ -1090,6 +1090,13 @@ return x; } + static StaticMatrix identity(void const* ptr, size_t n = 0) { + (void) ptr; + LIBSEMIGROUPS_ASSERT(ptr == nullptr); + LIBSEMIGROUPS_ASSERT(n == 0 || n == R); + return identity(n); + } + //////////////////////////////////////////////////////////////////////// // StaticMatrix - member function aliases - public //////////////////////////////////////////////////////////////////////// @@ -1195,6 +1202,12 @@ ~DynamicMatrix(); + static DynamicMatrix identity(void const* ptr, size_t n) { + (void) ptr; + LIBSEMIGROUPS_ASSERT(ptr == nullptr); + return identity(n); + } + static DynamicMatrix identity(size_t n) { DynamicMatrix x(n, n); std::fill(x.begin(), x.end(), ZeroOp()()); @@ -1308,9 +1321,20 @@ return m; } + // No static DynamicMatrix::identity(size_t n) because we need a semiring! + static DynamicMatrix identity(Semiring const* sr, size_t n) { + DynamicMatrix x(sr, n, n); + std::fill(x.begin(), x.end(), x.zero()); + for (size_t r = 0; r < n; ++r) { + x(r, r) = x.one(); + } + return x; + } + ~DynamicMatrix(); using MatrixCommon::begin; + using MatrixCommon::identity; using MatrixCommon::number_of_cols; using MatrixCommon::number_of_rows; using MatrixCommon::resize; @@ -2337,12 +2361,16 @@ ProjMaxPlusMat(size_t r, size_t c) : _is_normalized(false), _underlying_mat(r, c) {} - ProjMaxPlusMat( - std::initializer_list<std::initializer_list<scalar_type>> const& m) + ProjMaxPlusMat(std::vector<std::vector<scalar_type>> const& m) : _is_normalized(false), _underlying_mat(m) { normalize(); } + ProjMaxPlusMat( + std::initializer_list<std::initializer_list<scalar_type>> const& m) + : ProjMaxPlusMat( + std::vector<std::vector<scalar_type>>(m.begin(), m.end())) {} + static ProjMaxPlusMat make( std::initializer_list<std::initializer_list<scalar_type>> const& il) { auto result = ProjMaxPlusMat(T::make(il)); @@ -2377,9 +2405,7 @@ } bool operator!=(ProjMaxPlusMat const& that) const { - normalize(); - that.normalize(); - return _underlying_mat != that._underlying_mat; + return !(_underlying_mat == that._underlying_mat); } bool operator<(ProjMaxPlusMat const& that) const { @@ -2388,6 +2414,10 @@ return _underlying_mat < that._underlying_mat; } + bool operator>(ProjMaxPlusMat const& that) const { + return that < *this; + } + //////////////////////////////////////////////////////////////////////// // Attributes //////////////////////////////////////////////////////////////////////// @@ -3004,9 +3034,8 @@ } template <typename T> - auto operator<<(std::ostringstream& os, T const& x) -> std::enable_if_t< - std::is_base_of<detail::MatrixPolymorphicBase, T>::value, - std::ostringstream&> { + auto operator<<(std::ostringstream& os, T const& x) + -> std::enable_if_t<IsMatrix<T>, std::ostringstream&> { size_t n = 0; if (x.number_of_rows() != 1) { os << "{"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/include/libsemigroups/pbr.hpp new/libsemigroups-2.0.2/include/libsemigroups/pbr.hpp --- old/libsemigroups-2.0.1/include/libsemigroups/pbr.hpp 2021-06-03 20:43:15.401591053 +0200 +++ new/libsemigroups-2.0.2/include/libsemigroups/pbr.hpp 2021-09-20 21:00:25.397518234 +0200 @@ -42,12 +42,28 @@ public: //! Type of constructor argument. - using vector_type = std::vector<std::vector<uint32_t>> const&; + template <typename T> + using vector_type = std::vector<std::vector<T>> const&; //! Type of constructor argument. template <typename T> using initializer_list_type = std::initializer_list<std::vector<T>> const&; + //! Deleted. + PBR() = delete; + + //! Default copy constructor. + PBR(PBR const&) = default; + + //! Default move constructor. + PBR(PBR&&) = default; + + //! Default copy assignment operator. + PBR& operator=(PBR const&) = default; + + //! Default move assignment operator. + PBR& operator=(PBR&&) = default; + //! Construct from adjacencies \c 0 to `2n - 1`. //! //! The parameter \p x must be a container of vectors of @@ -64,9 +80,9 @@ //! No checks whatsoever on the validity of \p x are performed. //! //! \sa \ref libsemigroups::validate(PBR const&) - explicit PBR(vector_type x); + explicit PBR(vector_type<uint32_t> x); - //! \copydoc PBR(vector_type) + //! \copydoc PBR(vector_type<uint32_t>) explicit PBR(initializer_list_type<uint32_t> x); //! Construct empty PBR of given \ref degree. @@ -102,6 +118,11 @@ PBR(initializer_list_type<int32_t> left, initializer_list_type<int32_t> right); + // clang-format off + //! \copydoc PBR(initializer_list_type<int32_t>, initializer_list_type<int32_t>) NOLINT(whitespace/line_length) + // clang-format on + PBR(vector_type<int32_t> left, vector_type<int32_t> right); + //! Construct and validate. //! //! \tparam T the types of the arguments @@ -364,7 +385,24 @@ //! //! \complexity //! At worst quadratic in the degree of \p x and \p y. - bool operator!=(PBR const& x, PBR const& y); + inline bool operator!=(PBR const& x, PBR const& y) { + return !(x == y); + } + + //! Convenience function that just calls ``operator<``. + inline bool operator>(PBR const& x, PBR const& y) { + return y < x; + } + + //! Convenience function that just calls ``operator<`` and ``operator==``. + inline bool operator<=(PBR const& x, PBR const& y) { + return x < y || x == y; + } + + //! Convenience function that just calls ``operator<=``. + inline bool operator>=(PBR const& x, PBR const& y) { + return y <= x; + } namespace detail { @@ -445,5 +483,10 @@ } }; + template <> + struct IncreaseDegree<PBR> { + void operator()(PBR&, size_t) {} + }; + } // namespace libsemigroups #endif // LIBSEMIGROUPS_PBR_HPP_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/include/libsemigroups/runner.hpp new/libsemigroups-2.0.2/include/libsemigroups/runner.hpp --- old/libsemigroups-2.0.1/include/libsemigroups/runner.hpp 2021-08-28 18:59:58.378117856 +0200 +++ new/libsemigroups-2.0.2/include/libsemigroups/runner.hpp 2021-09-20 21:00:25.397937199 +0200 @@ -298,6 +298,13 @@ report_every(std::chrono::nanoseconds(t)); } + //! Get the minimum elapsed time between reports. + //! + //! \par Parameters + //! (None) + //! + //! \returns + //! The number of nanoseconds between reports. std::chrono::nanoseconds report_every() const noexcept { return _report_time_interval; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/include/libsemigroups/transf.hpp new/libsemigroups-2.0.2/include/libsemigroups/transf.hpp --- old/libsemigroups-2.0.1/include/libsemigroups/transf.hpp 2021-08-28 18:59:58.379203678 +0200 +++ new/libsemigroups-2.0.2/include/libsemigroups/transf.hpp 2021-09-20 21:00:25.398915865 +0200 @@ -1683,7 +1683,10 @@ //! Perm has the same member functions as \ref StaticPTransf and \ref //! DynamicPTransf, this isn't current reflected by the contents of this //! page. - template <size_t N = 0, typename Scalar = uint32_t> + template < + size_t N = 0, + typename Scalar + = std::conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>> class Perm final : public Transf<N, Scalar> { using base_type = PTransf<N, Scalar>; @@ -1869,15 +1872,6 @@ } }; - template <size_t N, typename Scalar> - struct ImageRightAction<Perm<N, Scalar>, - Scalar, - std::enable_if_t<std::is_integral<Scalar>::value>> { - Scalar operator()(Scalar pt, Perm<N, Scalar> const& x) { - return x[pt]; - } - }; - template <typename TSubclass> struct Product<TSubclass, std::enable_if_t<IsDerivedFromPTransf<TSubclass>>> { void operator()(TSubclass& xy, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/src/bipart.cpp new/libsemigroups-2.0.2/src/bipart.cpp --- old/libsemigroups-2.0.1/src/bipart.cpp 2021-08-28 16:47:47.979531385 +0200 +++ new/libsemigroups-2.0.2/src/bipart.cpp 2021-09-20 21:00:25.399462819 +0200 @@ -201,11 +201,6 @@ return xy; } - // TODO(now) Should be defined for all of the new element types - bool operator!=(Bipartition const& x, Bipartition const& y) { - return !(x == y); - } - //////////////////////////////////////////////////////////////////////// // Bipartitions //////////////////////////////////////////////////////////////////////// diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/src/pbr.cpp new/libsemigroups-2.0.2/src/pbr.cpp --- old/libsemigroups-2.0.1/src/pbr.cpp 2021-08-28 16:47:47.980269317 +0200 +++ new/libsemigroups-2.0.2/src/pbr.cpp 2021-09-20 21:00:25.399848369 +0200 @@ -158,18 +158,12 @@ } // namespace - // TODO(now) Should be defined for all of the new element types PBR operator*(PBR const& x, PBR const& y) { PBR xy(x.degree()); xy.product_inplace(x, y); return xy; } - // TODO(now) Should be defined for all of the new element types - bool operator!=(PBR const& x, PBR const& y) { - return !(x == y); - } - void validate(PBR const& x) { size_t n = x._vector.size(); if (n % 2 == 1) { @@ -211,6 +205,10 @@ std::initializer_list<std::vector<int32_t>> const& right) : PBR(process_left_right(left, right)) {} + PBR::PBR(std::vector<std::vector<int32_t>> const& left, + std::vector<std::vector<int32_t>> const& right) + : PBR(process_left_right(left, right)) {} + std::ostringstream& operator<<(std::ostringstream& os, PBR const& pbr) { if (pbr.degree() == 0) { os << "{}"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/tests/test-bipart.cpp new/libsemigroups-2.0.2/tests/test-bipart.cpp --- old/libsemigroups-2.0.1/tests/test-bipart.cpp 2021-06-03 10:17:27.299617641 +0200 +++ new/libsemigroups-2.0.2/tests/test-bipart.cpp 2021-09-20 21:00:25.400478316 +0200 @@ -445,6 +445,10 @@ REQUIRE_NOTHROW(validate(xxx)); REQUIRE(x != xxx); REQUIRE(xx != xxx); + REQUIRE(xx > xxx); + REQUIRE(xxx < xx); + REQUIRE(xxx <= xx); + REQUIRE(xx >= xxx); REQUIRE_THROWS_AS(Bipartition::make({{0, 2, 3, 4, 5, 6, 9, -1, -2, -7}, {7, 10, -3, -9, -10}, @@ -532,4 +536,9 @@ z.product_inplace(y, id, 0); REQUIRE(z == y); } + + LIBSEMIGROUPS_TEST_CASE("Bipartition", "017", "adapters", "[quick][pbr]") { + Bipartition x({0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 1, 2, 1}); + REQUIRE_NOTHROW(IncreaseDegree<Bipartition>()(x, 0)); + } } // namespace libsemigroups diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/tests/test-bmat8.cpp new/libsemigroups-2.0.2/tests/test-bmat8.cpp --- old/libsemigroups-2.0.1/tests/test-bmat8.cpp 2021-06-02 12:50:19.906565359 +0200 +++ new/libsemigroups-2.0.2/tests/test-bmat8.cpp 2021-09-20 21:00:25.400926319 +0200 @@ -648,7 +648,7 @@ BMat8 bm1(0); REQUIRE(Complexity<BMat8>()(bm1) == 0); REQUIRE(Degree<BMat8>()(bm1) == 8); - REQUIRE_NOTHROW(IncreaseDegree<BMat8>()(bm1)); + REQUIRE_NOTHROW(IncreaseDegree<BMat8>()(bm1, 0)); REQUIRE(One<BMat8>()(bm1) == bm1.one()); REQUIRE(One<BMat8>()(4) == bmat8_helpers::one<BMat8>(4)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/tests/test-kbe.cpp new/libsemigroups-2.0.2/tests/test-kbe.cpp --- old/libsemigroups-2.0.1/tests/test-kbe.cpp 2021-08-25 21:05:32.233189993 +0200 +++ new/libsemigroups-2.0.2/tests/test-kbe.cpp 2021-09-20 21:00:25.401512061 +0200 @@ -124,6 +124,9 @@ REQUIRE(Complexity<KBE>()(x) == LIMIT_MAX); REQUIRE(EqualTo<KBE>()(x, x)); REQUIRE(One<KBE>()(x) == KBE()); + auto y(x); + IncreaseDegree<KBE>()(y, 10); + REQUIRE(x == y); } LIBSEMIGROUPS_TEST_CASE("KBE", "005", "conversions", "[quick]") { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/tests/test-matrix.cpp new/libsemigroups-2.0.2/tests/test-matrix.cpp --- old/libsemigroups-2.0.1/tests/test-matrix.cpp 2021-06-03 20:08:33.238082247 +0200 +++ new/libsemigroups-2.0.2/tests/test-matrix.cpp 2021-09-20 21:00:25.402022476 +0200 @@ -318,6 +318,8 @@ REQUIRE(r[0] == Row(sr, {1, 0, 2})); REQUIRE(r[1] == Row(sr, {1, 1, 0})); REQUIRE(r[2] == Row(sr, {2, 1, 1})); + REQUIRE(m * Mat::identity(sr, 3) == m); + REQUIRE(Mat::identity(sr, 3) * m == m); } template <typename Mat> @@ -532,6 +534,8 @@ expected.push_back({0, 1, 0, 1}); tropical_max_plus_row_basis<4, 5>(expected); REQUIRE(expected.size() == 4); + REQUIRE(m * Mat::identity(sr, 4) == m); + REQUIRE(Mat::identity(sr, 4) * m == m); } template <typename Mat> @@ -556,6 +560,8 @@ y.product_inplace(x, id); REQUIRE(y == x); REQUIRE(Hash<Mat>()(y) != 0); + REQUIRE(x * Mat::identity(sr, 3) == x); + REQUIRE(Mat::identity(sr, 3) * x == x); } //////////////////////////////////////////////////////////////////////// @@ -728,6 +734,8 @@ REQUIRE(Hash<Mat>()(y) != 0); REQUIRE_THROWS_AS(Mat::make(sr, {{-22, 21, 0}, {10, 0, 0}, {1, 32, 1}}), LibsemigroupsException); + REQUIRE(x * Mat::identity(sr, 3) == x); + REQUIRE(Mat::identity(sr, 3) * x == x); } //////////////////////////////////////////////////////////////////////// @@ -754,6 +762,7 @@ REQUIRE(y == expected); REQUIRE(x < y); + REQUIRE(y > x); REQUIRE(Degree<Mat>()(x) == 3); REQUIRE(Degree<Mat>()(y) == 3); REQUIRE(Complexity<Mat>()(x) == 27); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/tests/test-pbr.cpp new/libsemigroups-2.0.2/tests/test-pbr.cpp --- old/libsemigroups-2.0.1/tests/test-pbr.cpp 2021-06-03 20:08:41.653176038 +0200 +++ new/libsemigroups-2.0.2/tests/test-pbr.cpp 2021-09-20 21:00:25.402451690 +0200 @@ -32,8 +32,12 @@ "001", "universal product with convenience constructor", "[quick][pbr]") { - PBR x({{-3, -1}, {-3, -2, -1, 1, 2, 3}, {-3, -2, -1, 1, 3}}, - {{-3, -1, 1, 2, 3}, {-3, 1, 3}, {-3, -2, -1, 2, 3}}); + std::vector<std::vector<int32_t>> const left + = {{-3, -1}, {-3, -2, -1, 1, 2, 3}, {-3, -2, -1, 1, 3}}; + + std::vector<std::vector<int32_t>> const right + = {{-3, -1, 1, 2, 3}, {-3, 1, 3}, {-3, -2, -1, 2, 3}}; + PBR x(left, right); PBR y({{-3, -2, -1, 1}, {-3, -2, 3}, {-3, 2, 3}}, {{-3, -2, -1, 3}, {-3, -2, -1, 3}, {-2, 2, 3}}); @@ -56,6 +60,7 @@ REQUIRE(x == xx); REQUIRE(y == yy); + REQUIRE(x.degree() == 3); z.product_inplace(x, y); @@ -148,7 +153,7 @@ } LIBSEMIGROUPS_TEST_CASE("PBR", "005", "delete/copy", "[quick][pbr]") { - PBR x({{1}, {4}, {3}, {1}, {0, 2}, {0, 3, 4, 5}}); + PBR x = PBR::make({{1}, {4}, {3}, {1}, {0, 2}, {0, 3, 4, 5}}); PBR y(x); PBR z({{1}, {4}, {3}, {1}, {0, 2}, {0, 3, 4, 5}}); REQUIRE(y == z); @@ -157,6 +162,10 @@ PBR zz(yy); PBR a({{1}, {4}, {3}, {1}, {0, 2}, {0, 3, 4, 5}}); REQUIRE(zz == a); + PBR tt(std::move(zz)); + REQUIRE(tt == a); + tt = z; + REQUIRE(tt == z); } LIBSEMIGROUPS_TEST_CASE("PBR", "006", "exceptions", "[quick][pbr]") { @@ -185,8 +194,75 @@ {{-4, -1}, {-3, -2, -1, 1, 2, 3}, {-3, -2, -1, 1, 3}}, {{-3, -1, 1, 2, 3}, {-3, 1, 3}, {-3, -2, -1, 2, 3}, {-1, -2}}), LibsemigroupsException); + REQUIRE_THROWS_AS( + PBR::make({{-3, -1, 1, 2, 3}, {-3, 1, 3}, {-3, -2, -1, 2, 3}}, + {{-4, -1}, {-3, -2, -1, 1, 2, 3}, {-3, -2, -1, 1, 3}}), + LibsemigroupsException); REQUIRE_THROWS_AS(PBR::make({{}, {2}, {1}, {3, 0}}), LibsemigroupsException); } + + LIBSEMIGROUPS_TEST_CASE("PBR", "007", "operators", "[quick][pbr]") { + PBR x({{3, 5}, + {0, 1, 2, 3, 4, 5}, + {0, 2, 3, 4, 5}, + {0, 1, 2, 3, 5}, + {0, 2, 5}, + {1, 2, 3, 4, 5}}); + PBR y({{0, 3, 4, 5}, + {2, 4, 5}, + {1, 2, 5}, + {2, 3, 4, 5}, + {2, 3, 4, 5}, + {1, 2, 4}}); + + PBR expected({{0, 1, 2, 3, 4, 5}, + {0, 1, 2, 3, 4, 5}, + {0, 1, 2, 3, 4, 5}, + {0, 1, 2, 3, 4, 5}, + {0, 1, 2, 3, 4, 5}, + {0, 1, 2, 3, 4, 5}}); + REQUIRE(x * y == expected); + REQUIRE(y * y != expected); + REQUIRE(y * y > expected); + REQUIRE(y * y >= expected); + REQUIRE(expected < y * y); + REQUIRE(expected <= y * y); + REQUIRE(x * x >= expected); + REQUIRE(expected <= x * x); + } + + LIBSEMIGROUPS_TEST_CASE("PBR", "008", "to_string", "[quick][pbr]") { + PBR x({{3, 5}, + {0, 1, 2, 3, 4, 5}, + {0, 2, 3, 4, 5}, + {0, 1, 2, 3, 5}, + {0, 2, 5}, + {1, 2, 3, 4, 5}}); + REQUIRE_NOTHROW(detail::to_string(x)); + x = PBR({}); + REQUIRE_NOTHROW(detail::to_string(x)); + std::stringbuf buf; + std::ostream os(&buf); + os << x; // doesn't do anything visible + } + + LIBSEMIGROUPS_TEST_CASE("PBR", "009", "identity", "[quick][pbr]") { + PBR x({{3, 5}, + {0, 1, 2, 3, 4, 5}, + {0, 2, 3, 4, 5}, + {0, 1, 2, 3, 5}, + {0, 2, 5}, + {1, 2, 3, 4, 5}}); + REQUIRE(x == x * x.identity()); + REQUIRE(x == x.identity() * x); + REQUIRE(x == x * PBR::identity(3)); + REQUIRE(x == PBR::identity(3) * x); + } + + LIBSEMIGROUPS_TEST_CASE("PBR", "010", "adapters", "[quick][pbr]") { + PBR x({}); + REQUIRE_NOTHROW(IncreaseDegree<PBR>()(x, 0)); + } } // namespace libsemigroups diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsemigroups-2.0.1/tests/test-todd-coxeter.cpp new/libsemigroups-2.0.2/tests/test-todd-coxeter.cpp --- old/libsemigroups-2.0.1/tests/test-todd-coxeter.cpp 2021-08-28 18:59:58.384940494 +0200 +++ new/libsemigroups-2.0.2/tests/test-todd-coxeter.cpp 2021-09-20 21:00:25.403531223 +0200 @@ -1190,6 +1190,7 @@ TCE(26), TCE(27), TCE(28), TCE(29), TCE(30), TCE(31), TCE(32), TCE(33), TCE(34)})); REQUIRE(detail::to_string(TCE(1)) == "1"); + REQUIRE_NOTHROW(IncreaseDegree<TCE>()(TCE(1), 10)); std::ostringstream oss; oss << TCE(10); // Does not do anything visible @@ -3531,5 +3532,16 @@ REQUIRE_THROWS_AS(tc.congruence().sort_generating_pairs(shortlex_compare), LibsemigroupsException); } + + LIBSEMIGROUPS_TEST_CASE("ToddCoxeter", + "099", + "short circuit size in obviously infinite", + "[todd-coxeter][quick]") { + auto rg = ReportGuard(REPORT); + ToddCoxeter tc; + tc.set_alphabet("abc"); + tc.add_rule("aaaa", "a"); + REQUIRE(tc.size() == POSITIVE_INFINITY); + } } // namespace fpsemigroup } // namespace libsemigroups