Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libsemigroups for openSUSE:Factory 
checked in at 2023-03-29 23:27:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libsemigroups (Old)
 and      /work/SRC/openSUSE:Factory/.libsemigroups.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libsemigroups"

Wed Mar 29 23:27:59 2023 rev:30 rq:1075158 version:2.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/libsemigroups/libsemigroups.changes      
2023-03-24 15:20:58.795062768 +0100
+++ /work/SRC/openSUSE:Factory/.libsemigroups.new.31432/libsemigroups.changes   
2023-03-29 23:27:59.911713029 +0200
@@ -1,0 +2,6 @@
+Wed Mar 29 08:28:03 UTC 2023 - Jan Engelhardt <jeng...@inai.de>
+
+- Update to release 2.7.1
+  * present: fix sort_rules bug
+
+-------------------------------------------------------------------

Old:
----
  libsemigroups-2.7.0.tar.gz

New:
----
  libsemigroups-2.7.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libsemigroups.spec ++++++
--- /var/tmp/diff_new_pack.8yGT8Q/_old  2023-03-29 23:28:00.455715936 +0200
+++ /var/tmp/diff_new_pack.8yGT8Q/_new  2023-03-29 23:28:00.459715958 +0200
@@ -18,7 +18,7 @@
 
 Name:           libsemigroups
 %define lname  libsemigroups2
-Version:        2.7.0
+Version:        2.7.1
 Release:        0
 Summary:        Library with algorithms for computing finite and finitely 
presented semigroups
 License:        GPL-3.0-or-later

++++++ libsemigroups-2.7.0.tar.gz -> libsemigroups-2.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsemigroups-2.7.0/.VERSION 
new/libsemigroups-2.7.1/.VERSION
--- old/libsemigroups-2.7.0/.VERSION    2023-03-22 17:48:46.017386282 +0100
+++ new/libsemigroups-2.7.1/.VERSION    2023-03-29 08:58:34.861445493 +0200
@@ -1 +1 @@
-2.7.0
\ No newline at end of file
+2.7.1
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsemigroups-2.7.0/README.rst 
new/libsemigroups-2.7.1/README.rst
--- old/libsemigroups-2.7.0/README.rst  2023-03-22 17:39:52.706100064 +0100
+++ new/libsemigroups-2.7.1/README.rst  2023-03-29 08:55:27.586290512 +0200
@@ -4,7 +4,7 @@
 
    The full license is in the file LICENSE, distributed with this software.
 
-libsemigroups - Version 2.7.0
+libsemigroups - Version 2.7.1
 =============================
 
 .. image:: https://readthedocs.org/projects/libsemigroups/badge/?version=master
@@ -57,7 +57,8 @@
   `Mitchell-Tsalakou
   <http://arxiv.org/abs/2105.12125>`__
 - a version of Sims low index subgroup algorithm for computing one-sided
-  congruences of a semigroup or monoid;
+  congruences of a semigroup or monoid; see `this paper
+  <https://arxiv.org/abs/2302.06295>`__ for details.
 - a version of `Stephen's procedure`_ for finitely presented semigroups and
   monoids (for a given word :math:`w` this procedure is for determining words
   equivalent to :math:`w` or that are left divisors of :math:`w`).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsemigroups-2.7.0/configure 
new/libsemigroups-2.7.1/configure
--- old/libsemigroups-2.7.0/configure   2023-03-22 17:48:49.901238223 +0100
+++ new/libsemigroups-2.7.1/configure   2023-03-29 08:58:38.926086673 +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.7.0.
+# Generated by GNU Autoconf 2.71 for libsemigroups 2.7.1.
 #
 # 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.7.0'
-PACKAGE_STRING='libsemigroups 2.7.0'
+PACKAGE_VERSION='2.7.1'
+PACKAGE_STRING='libsemigroups 2.7.1'
 PACKAGE_BUGREPORT='j...@st-andrews.ac.uk'
 PACKAGE_URL=''
 
@@ -1433,7 +1433,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.7.0 to adapt to many kinds of systems.
+\`configure' configures libsemigroups 2.7.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1505,7 +1505,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libsemigroups 2.7.0:";;
+     short | recursive ) echo "Configuration of libsemigroups 2.7.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1647,7 +1647,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libsemigroups configure 2.7.0
+libsemigroups configure 2.7.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2486,7 +2486,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.7.0, which was
+It was created by libsemigroups $as_me 2.7.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4095,7 +4095,7 @@
 
 # Define the identity of the package.
  PACKAGE='libsemigroups'
- VERSION='2.7.0'
+ VERSION='2.7.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -23468,7 +23468,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.7.0, which was
+This file was extended by libsemigroups $as_me 2.7.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23536,7 +23536,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libsemigroups config.status 2.7.0
+libsemigroups config.status 2.7.1
 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.7.0/docs/source/changelog.rst 
new/libsemigroups-2.7.1/docs/source/changelog.rst
--- old/libsemigroups-2.7.0/docs/source/changelog.rst   2023-03-22 
17:42:17.501386759 +0100
+++ new/libsemigroups-2.7.1/docs/source/changelog.rst   2023-03-29 
08:57:24.041422164 +0200
@@ -1,6 +1,14 @@
 Changelog - version 2
 =====================
 
+v2.7.1 (released 29/03/2023)
+----------------------------
+
+In this release a couple of bugs in ``presentation::sort_rules`` are resolved:
+
+* present: fix sort_rules bug by @james-d-mitchell in
+  https://github.com/libsemigroups/libsemigroups/pull/478
+
 v2.7.0 (released 22/03/2023)
 ----------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsemigroups-2.7.0/docs/source/index.rst 
new/libsemigroups-2.7.1/docs/source/index.rst
--- old/libsemigroups-2.7.0/docs/source/index.rst       2023-03-22 
17:48:31.264951441 +0100
+++ new/libsemigroups-2.7.1/docs/source/index.rst       2023-03-29 
08:58:21.322227078 +0200
@@ -1,4 +1,4 @@
-libsemigroups - Version 2.7.0
+libsemigroups - Version 2.7.1
 =============================
 
 C++ library for semigroups and monoids
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsemigroups-2.7.0/docs/source/install.rst 
new/libsemigroups-2.7.1/docs/source/install.rst
--- old/libsemigroups-2.7.0/docs/source/install.rst     2023-03-22 
17:47:42.938300522 +0100
+++ new/libsemigroups-2.7.1/docs/source/install.rst     2023-03-29 
08:58:02.552542932 +0200
@@ -1,4 +1,4 @@
-.. |libsemigroups-version| replace:: 2.7.0
+.. |libsemigroups-version| replace:: 2.7.1
 
 .. _Installation:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsemigroups-2.7.0/include/libsemigroups/config.hpp 
new/libsemigroups-2.7.1/include/libsemigroups/config.hpp
--- old/libsemigroups-2.7.0/include/libsemigroups/config.hpp    2023-03-22 
17:48:56.663587295 +0100
+++ new/libsemigroups-2.7.1/include/libsemigroups/config.hpp    2023-03-29 
08:58:45.966325997 +0200
@@ -186,7 +186,7 @@
 
 /* Define to the full name and version of this package. */
 #ifndef LIBSEMIGROUPS_PACKAGE_STRING
-#define LIBSEMIGROUPS_PACKAGE_STRING "libsemigroups 2.7.0"
+#define LIBSEMIGROUPS_PACKAGE_STRING "libsemigroups 2.7.1"
 #endif
 
 /* Define to the one symbol short name of this package. */
@@ -201,7 +201,7 @@
 
 /* Define to the version of this package. */
 #ifndef LIBSEMIGROUPS_PACKAGE_VERSION
-#define LIBSEMIGROUPS_PACKAGE_VERSION "2.7.0"
+#define LIBSEMIGROUPS_PACKAGE_VERSION "2.7.1"
 #endif
 
 /* Define to necessary symbol if this constant uses a non-standard name on
@@ -237,7 +237,7 @@
 
 /* Version number of package */
 #ifndef LIBSEMIGROUPS_VERSION
-#define LIBSEMIGROUPS_VERSION "2.7.0"
+#define LIBSEMIGROUPS_VERSION "2.7.1"
 #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.7.0/include/libsemigroups/present.tpp 
new/libsemigroups-2.7.1/include/libsemigroups/present.tpp
--- old/libsemigroups-2.7.0/include/libsemigroups/present.tpp   2023-03-22 
17:38:05.928348252 +0100
+++ new/libsemigroups-2.7.1/include/libsemigroups/present.tpp   2023-03-29 
08:53:09.440985458 +0200
@@ -39,6 +39,23 @@
       }
     }
 
+    template <typename Iterator>
+    int lex_compare(Iterator first1,
+                    Iterator last1,
+                    Iterator first2,
+                    Iterator last2) {
+      for (; (first1 != last1) && (first2 != last2);
+           ++first1, (void) ++first2) {
+        if (*first1 < *first2) {
+          return -1;
+        }
+        if (*first2 < *first1) {
+          return 1;
+        }
+      }
+      return 0;
+    }
+
     // Lex compare of
     // [first11, last11) + [first12, last12)
     // and
@@ -57,34 +74,52 @@
 
       if (prefix1.size() < prefix2.size()) {
         size_t const k = prefix2.size() - prefix1.size();
-        return std::lexicographical_compare(prefix1.cbegin(),
-                                            prefix1.cend(),
-                                            prefix2.cbegin(),
-                                            prefix2.cbegin() + prefix1.size())
-               || std::lexicographical_compare(suffix1.cbegin(),
-                                               suffix1.cbegin() + k,
-                                               prefix2.cbegin()
-                                                   + prefix1.size(),
-                                               prefix2.cend())
-               || std::lexicographical_compare(suffix1.cbegin() + k,
-                                               suffix1.cend(),
-                                               suffix2.cbegin(),
-                                               suffix2.cend());
+
+        int cmp = lex_compare(prefix1.cbegin(),
+                              prefix1.cend(),
+                              prefix2.cbegin(),
+                              prefix2.cbegin() + prefix1.size());
+        if (cmp != 0) {
+          return cmp == -1;
+        }
+
+        cmp = lex_compare(suffix1.cbegin(),
+                          suffix1.cbegin() + k,
+                          prefix2.cbegin() + prefix1.size(),
+                          prefix2.cend());
+        if (cmp != 0) {
+          return cmp == -1;
+        }
+
+        cmp = lex_compare(suffix1.cbegin() + k,
+                          suffix1.cend(),
+                          suffix2.cbegin(),
+                          suffix2.cend());
+        return cmp == -1;
       } else {
-        size_t const k = prefix1.size() - prefix2.size();
-        return std::lexicographical_compare(prefix1.cbegin(),
-                                            prefix1.cbegin() + prefix2.size(),
-                                            prefix2.cbegin(),
-                                            prefix2.cend())
-               || std::lexicographical_compare(prefix1.cbegin()
-                                                   + prefix2.size(),
-                                               prefix1.cend(),
-                                               suffix2.cbegin(),
-                                               suffix2.cbegin() + k)
-               || std::lexicographical_compare(suffix1.cbegin(),
-                                               suffix1.cend(),
-                                               suffix2.cbegin() + k,
-                                               suffix2.cend());
+        size_t const k   = prefix1.size() - prefix2.size();
+        int          cmp = lex_compare(prefix1.cbegin(),
+                              prefix1.cbegin() + prefix2.size(),
+                              prefix2.cbegin(),
+                              prefix2.cend());
+        if (cmp != 0) {
+          return cmp == -1;
+        }
+
+        cmp = lex_compare(prefix1.cbegin() + prefix2.size(),
+                          prefix1.cend(),
+                          suffix2.cbegin(),
+                          suffix2.cbegin() + k);
+
+        if (cmp != 0) {
+          return cmp == -1;
+        }
+
+        cmp = lex_compare(suffix1.cbegin(),
+                          suffix1.cend(),
+                          suffix2.cbegin() + k,
+                          suffix2.cend());
+        return cmp == -1;
       }
     }
   }  // namespace detail
@@ -408,10 +443,9 @@
     void sort_rules(Presentation<W>& p) {
       detail::validate_rules_length(p);
       // Create a permutation of the even indexed entries in vec
-      using letter_type = typename Presentation<W>::letter_type;
 
-      std::vector<letter_type> perm;
-      auto                     n = p.rules.size() / 2;
+      std::vector<size_t> perm;
+      size_t const        n = p.rules.size() / 2;
       perm.resize(n);
       std::iota(perm.begin(), perm.end(), 0);
       std::sort(perm.begin(), perm.end(), [&p](auto x, auto y) -> bool {
@@ -421,10 +455,10 @@
                                                p.rules[2 * y + 1]);
       });
       // Apply the permutation (adapted from stl.hpp:apply_permutation)
-      for (letter_type i = 0; static_cast<decltype(n)>(i) < n; ++i) {
-        letter_type current = i;
+      for (size_t i = 0; i < n; ++i) {
+        size_t current = i;
         while (i != perm[current]) {
-          letter_type next = perm[current];
+          size_t next = perm[current];
           std::swap(p.rules[2 * current], p.rules[2 * next]);
           std::swap(p.rules[2 * current + 1], p.rules[2 * next + 1]);
           perm[current] = current;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsemigroups-2.7.0/tests/test-present.cpp 
new/libsemigroups-2.7.1/tests/test-present.cpp
--- old/libsemigroups-2.7.0/tests/test-present.cpp      2023-03-22 
16:50:30.708414274 +0100
+++ new/libsemigroups-2.7.1/tests/test-present.cpp      2023-03-29 
08:53:09.441669035 +0200
@@ -1492,4 +1492,552 @@
     REQUIRE(p.rules == decltype(p.rules)({"aba", "baabaa"}));
   }
 
+  LIBSEMIGROUPS_TEST_CASE("Presentation",
+                          "041",
+                          "sort_rules bug",
+                          "[quick][presentation]") {
+    std::string prefix1 = "dabd", suffix1 = "cbb", prefix2 = "abbaba",
+                suffix2 = "c";
+
+    REQUIRE(
+        !detail::shortlex_compare_concat(prefix1, suffix1, prefix2, suffix2));
+
+    Presentation<std::string> p;
+    p.alphabet("bacd");
+    p.rules = {"baabbabaa",
+               "abaaba",
+               "abbaba",
+               "c",
+               "abb",
+               "d",
+               "daba",
+               "c",
+               "dabd",
+               "cbb",
+               "dbaca",
+               "caba",
+               "dbacc",
+               "cabc",
+               "dbacd",
+               "cabd",
+               "abaaba",
+               "baca",
+               "abaabc",
+               "bacc",
+               "abaabd",
+               "bacd",
+               "cbaaba",
+               "ddaca",
+               "cbaabc",
+               "ddacc",
+               "cbaabd",
+               "ddacd",
+               "cbbaba",
+               "dabc",
+               "dabcbb",
+               "cbbabd",
+               "bacaaba",
+               "ababaca",
+               "bacaabc",
+               "ababacc",
+               "bacaabd",
+               "ababacd",
+               "bacbaca",
+               "abadaca",
+               "bacbacc",
+               "abadacc",
+               "bacbacd",
+               "abadacd",
+               "dabcaba",
+               "cbbbaca",
+               "dabcabc",
+               "cbbbacc",
+               "dabcabd",
+               "cbbbacd",
+               "ddacaaba",
+               "cbabaca",
+               "ddacaabc",
+               "cbabacc",
+               "ddacaabd",
+               "cbabacd",
+               "ddacbaca",
+               "cbadaca",
+               "ddacbacc",
+               "cbadacc",
+               "ddacbacd",
+               "cbadacd",
+               "abababaca",
+               "dacaaba",
+               "abababacc",
+               "dacaabc",
+               "abababacd",
+               "dacaabd",
+               "ababadaca",
+               "dacbaca",
+               "ababadacc",
+               "dacbacc",
+               "ababadacd",
+               "dacbacd",
+               "daababaca",
+               "ccaaba",
+               "daababacc",
+               "ccaabc",
+               "daababacd",
+               "ccaabd",
+               "daabadaca",
+               "ccbaca",
+               "daabadacc",
+               "ccbacc",
+               "daabadacd",
+               "ccbacd",
+               "bacababaca",
+               "abadacaaba",
+               "bacababacc",
+               "abadacaabc",
+               "bacababacd",
+               "abadacaabd",
+               "bacabadaca",
+               "abadacbaca",
+               "bacabadacc",
+               "abadacbacc",
+               "bacabadacd",
+               "abadacbacd",
+               "dabcbabaca",
+               "cbbdacaaba",
+               "dabcbabacc",
+               "cbbdacaabc",
+               "dabcbabacd",
+               "cbbdacaabd",
+               "dabcbadaca",
+               "cbbdacbaca",
+               "dabcbadacc",
+               "cbbdacbacc",
+               "dabcbadacd",
+               "cbbdacbacd",
+               "abaaababaca",
+               "bacacaaba",
+               "abaaababacc",
+               "bacacaabc",
+               "abaaababacd",
+               "bacacaabd",
+               "abaaabadaca",
+               "bacacbaca",
+               "abaaabadacc",
+               "bacacbacc",
+               "abaaabadacd",
+               "bacacbacd",
+               "cbaaababaca",
+               "ddacacaaba",
+               "cbaaababacc",
+               "ddacacaabc",
+               "cbaaababacd",
+               "ddacacaabd",
+               "cbaaabadaca",
+               "ddacacbaca",
+               "cbaaabadacc",
+               "ddacacbacc",
+               "cbaaabadacd",
+               "ddacacbacd",
+               "cbbaababaca",
+               "dabccaaba",
+               "cbbaababacc",
+               "dabccaabc",
+               "cbbaababacd",
+               "dabccaabd",
+               "cbbaabadaca",
+               "dabccbaca",
+               "cbbaabadacc",
+               "dabccbacc",
+               "cbbaabadacd",
+               "dabccbacd",
+               "ddacababaca",
+               "cbadacaaba",
+               "ddacababacc",
+               "cbadacaabc",
+               "ddacababacd",
+               "cbadacaabd",
+               "ddacabadaca",
+               "cbadacbaca",
+               "ddacabadacc",
+               "cbadacbacc",
+               "ddacabadacd",
+               "cbadacbacd",
+               "ababadacbaca",
+               "dacabadaca",
+               "ababadacbacc",
+               "dacabadacc",
+               "ababadacbacd",
+               "dacabadacd",
+               "bacaaababaca",
+               "ababacacaaba",
+               "bacaaababacc",
+               "ababacacaabc",
+               "bacaaababacd",
+               "ababacacaabd",
+               "bacaaabadaca",
+               "ababacacbaca",
+               "bacaaabadacc",
+               "ababacacbacc",
+               "bacaaabadacd",
+               "ababacacbacd",
+               "daabadacbaca",
+               "ccabadaca",
+               "daabadacbacc",
+               "ccabadacc",
+               "daabadacbacd",
+               "ccabadacd",
+               "bacabadacbaca",
+               "abadacabadaca",
+               "bacabadacbacc",
+               "abadacabadacc",
+               "bacabadacbacd",
+               "abadacabadacd",
+               "dabcbadacaaba",
+               "cbbdacababaca",
+               "dabcbadacaabc",
+               "cbbdacababacc",
+               "dabcbadacaabd",
+               "cbbdacababacd",
+               "dabcbadacbaca",
+               "cbbdacabadaca",
+               "dabcbadacbacc",
+               "cbbdacabadacc",
+               "dabcbadacbacd",
+               "cbbdacabadacd",
+               "ddacaaababaca",
+               "cbabacacaaba",
+               "ddacaaababacc",
+               "cbabacacaabc",
+               "ddacaaababacd",
+               "cbabacacaabd",
+               "ddacaaabadaca",
+               "cbabacacbaca",
+               "ddacaaabadacc",
+               "cbabacacbacc",
+               "ddacaaabadacd",
+               "cbabacacbacd",
+               "abaaabadacbaca",
+               "bacacabadaca",
+               "abaaabadacbacc",
+               "bacacabadacc",
+               "abaaabadacbacd",
+               "bacacabadacd",
+               "cbaaabadacbaca",
+               "ddacacabadaca",
+               "cbaaabadacbacc",
+               "ddacacabadacc",
+               "cbaaabadacbacd",
+               "ddacacabadacd",
+               "cbbaabadacbaca",
+               "dabccabadaca",
+               "cbbaabadacbacc",
+               "dabccabadacc",
+               "cbbaabadacbacd",
+               "dabccabadacd",
+               "ddacabadacbaca",
+               "cbadacabadaca",
+               "ddacabadacbacc",
+               "cbadacabadacc",
+               "ddacabadacbacd",
+               "cbadacabadacd",
+               "bacaaabadacbaca",
+               "ababacacabadaca",
+               "bacaaabadacbacc",
+               "ababacacabadacc",
+               "bacaaabadacbacd",
+               "ababacacabadacd",
+               "dabcbabacacaaba",
+               "cbbdacaaababaca",
+               "dabcbabacacaabc",
+               "cbbdacaaababacc",
+               "dabcbabacacaabd",
+               "cbbdacaaababacd",
+               "dabcbabacacbaca",
+               "cbbdacaaabadaca",
+               "dabcbabacacbacc",
+               "cbbdacaaabadacc",
+               "dabcbabacacbacd",
+               "cbbdacaaabadacd",
+               "dabcbadacabadaca",
+               "cbbdacabadacbaca",
+               "dabcbadacabadacc",
+               "cbbdacabadacbacc"};
+    REQUIRE(p.rules.size() == 258);
+
+    p.validate();
+    presentation::sort_each_rule(p);
+    presentation::sort_rules(p);
+    REQUIRE(presentation::are_rules_sorted(p));
+    REQUIRE(p.rules
+            == std::vector<std::string>({"abb",
+                                         "d",
+                                         "daba",
+                                         "c",
+                                         "abbaba",
+                                         "c",
+                                         "dabd",
+                                         "cbb",
+                                         "dbaca",
+                                         "caba",
+                                         "dbacc",
+                                         "cabc",
+                                         "dbacd",
+                                         "cabd",
+                                         "abaaba",
+                                         "baca",
+                                         "abaabc",
+                                         "bacc",
+                                         "abaabd",
+                                         "bacd",
+                                         "cbbaba",
+                                         "dabc",
+                                         "cbaaba",
+                                         "ddaca",
+                                         "cbaabc",
+                                         "ddacc",
+                                         "cbaabd",
+                                         "ddacd",
+                                         "dabcbb",
+                                         "cbbabd",
+                                         "bacaaba",
+                                         "ababaca",
+                                         "bacaabc",
+                                         "ababacc",
+                                         "bacaabd",
+                                         "ababacd",
+                                         "bacbaca",
+                                         "abadaca",
+                                         "bacbacc",
+                                         "abadacc",
+                                         "bacbacd",
+                                         "abadacd",
+                                         "dabcaba",
+                                         "cbbbaca",
+                                         "dabcabc",
+                                         "cbbbacc",
+                                         "dabcabd",
+                                         "cbbbacd",
+                                         "baabbabaa",
+                                         "abaaba",
+                                         "daababaca",
+                                         "ccaaba",
+                                         "daababacc",
+                                         "ccaabc",
+                                         "daababacd",
+                                         "ccaabd",
+                                         "daabadaca",
+                                         "ccbaca",
+                                         "daabadacc",
+                                         "ccbacc",
+                                         "daabadacd",
+                                         "ccbacd",
+                                         "ddacaaba",
+                                         "cbabaca",
+                                         "ddacaabc",
+                                         "cbabacc",
+                                         "ddacaabd",
+                                         "cbabacd",
+                                         "ddacbaca",
+                                         "cbadaca",
+                                         "ddacbacc",
+                                         "cbadacc",
+                                         "ddacbacd",
+                                         "cbadacd",
+                                         "abababaca",
+                                         "dacaaba",
+                                         "abababacc",
+                                         "dacaabc",
+                                         "abababacd",
+                                         "dacaabd",
+                                         "ababadaca",
+                                         "dacbaca",
+                                         "ababadacc",
+                                         "dacbacc",
+                                         "ababadacd",
+                                         "dacbacd",
+                                         "abaaababaca",
+                                         "bacacaaba",
+                                         "abaaababacc",
+                                         "bacacaabc",
+                                         "abaaababacd",
+                                         "bacacaabd",
+                                         "abaaabadaca",
+                                         "bacacbaca",
+                                         "abaaabadacc",
+                                         "bacacbacc",
+                                         "abaaabadacd",
+                                         "bacacbacd",
+                                         "bacababaca",
+                                         "abadacaaba",
+                                         "bacababacc",
+                                         "abadacaabc",
+                                         "bacababacd",
+                                         "abadacaabd",
+                                         "bacabadaca",
+                                         "abadacbaca",
+                                         "bacabadacc",
+                                         "abadacbacc",
+                                         "bacabadacd",
+                                         "abadacbacd",
+                                         "cbbaababaca",
+                                         "dabccaaba",
+                                         "cbbaababacc",
+                                         "dabccaabc",
+                                         "cbbaababacd",
+                                         "dabccaabd",
+                                         "cbbaabadaca",
+                                         "dabccbaca",
+                                         "cbbaabadacc",
+                                         "dabccbacc",
+                                         "cbbaabadacd",
+                                         "dabccbacd",
+                                         "dabcbabaca",
+                                         "cbbdacaaba",
+                                         "dabcbabacc",
+                                         "cbbdacaabc",
+                                         "dabcbabacd",
+                                         "cbbdacaabd",
+                                         "dabcbadaca",
+                                         "cbbdacbaca",
+                                         "dabcbadacc",
+                                         "cbbdacbacc",
+                                         "dabcbadacd",
+                                         "cbbdacbacd",
+                                         "cbaaababaca",
+                                         "ddacacaaba",
+                                         "cbaaababacc",
+                                         "ddacacaabc",
+                                         "cbaaababacd",
+                                         "ddacacaabd",
+                                         "cbaaabadaca",
+                                         "ddacacbaca",
+                                         "cbaaabadacc",
+                                         "ddacacbacc",
+                                         "cbaaabadacd",
+                                         "ddacacbacd",
+                                         "daabadacbaca",
+                                         "ccabadaca",
+                                         "daabadacbacc",
+                                         "ccabadacc",
+                                         "daabadacbacd",
+                                         "ccabadacd",
+                                         "ddacababaca",
+                                         "cbadacaaba",
+                                         "ddacababacc",
+                                         "cbadacaabc",
+                                         "ddacababacd",
+                                         "cbadacaabd",
+                                         "ddacabadaca",
+                                         "cbadacbaca",
+                                         "ddacabadacc",
+                                         "cbadacbacc",
+                                         "ddacabadacd",
+                                         "cbadacbacd",
+                                         "ababadacbaca",
+                                         "dacabadaca",
+                                         "ababadacbacc",
+                                         "dacabadacc",
+                                         "ababadacbacd",
+                                         "dacabadacd",
+                                         "bacaaababaca",
+                                         "ababacacaaba",
+                                         "bacaaababacc",
+                                         "ababacacaabc",
+                                         "bacaaababacd",
+                                         "ababacacaabd",
+                                         "bacaaabadaca",
+                                         "ababacacbaca",
+                                         "bacaaabadacc",
+                                         "ababacacbacc",
+                                         "bacaaabadacd",
+                                         "ababacacbacd",
+                                         "ddacaaababaca",
+                                         "cbabacacaaba",
+                                         "ddacaaababacc",
+                                         "cbabacacaabc",
+                                         "ddacaaababacd",
+                                         "cbabacacaabd",
+                                         "ddacaaabadaca",
+                                         "cbabacacbaca",
+                                         "ddacaaabadacc",
+                                         "cbabacacbacc",
+                                         "ddacaaabadacd",
+                                         "cbabacacbacd",
+                                         "abaaabadacbaca",
+                                         "bacacabadaca",
+                                         "abaaabadacbacc",
+                                         "bacacabadacc",
+                                         "abaaabadacbacd",
+                                         "bacacabadacd",
+                                         "bacabadacbaca",
+                                         "abadacabadaca",
+                                         "bacabadacbacc",
+                                         "abadacabadacc",
+                                         "bacabadacbacd",
+                                         "abadacabadacd",
+                                         "cbbaabadacbaca",
+                                         "dabccabadaca",
+                                         "cbbaabadacbacc",
+                                         "dabccabadacc",
+                                         "cbbaabadacbacd",
+                                         "dabccabadacd",
+                                         "dabcbadacaaba",
+                                         "cbbdacababaca",
+                                         "dabcbadacaabc",
+                                         "cbbdacababacc",
+                                         "dabcbadacaabd",
+                                         "cbbdacababacd",
+                                         "dabcbadacbaca",
+                                         "cbbdacabadaca",
+                                         "dabcbadacbacc",
+                                         "cbbdacabadacc",
+                                         "dabcbadacbacd",
+                                         "cbbdacabadacd",
+                                         "cbaaabadacbaca",
+                                         "ddacacabadaca",
+                                         "cbaaabadacbacc",
+                                         "ddacacabadacc",
+                                         "cbaaabadacbacd",
+                                         "ddacacabadacd",
+                                         "ddacabadacbaca",
+                                         "cbadacabadaca",
+                                         "ddacabadacbacc",
+                                         "cbadacabadacc",
+                                         "ddacabadacbacd",
+                                         "cbadacabadacd",
+                                         "bacaaabadacbaca",
+                                         "ababacacabadaca",
+                                         "bacaaabadacbacc",
+                                         "ababacacabadacc",
+                                         "bacaaabadacbacd",
+                                         "ababacacabadacd",
+                                         "dabcbabacacaaba",
+                                         "cbbdacaaababaca",
+                                         "dabcbabacacaabc",
+                                         "cbbdacaaababacc",
+                                         "dabcbabacacaabd",
+                                         "cbbdacaaababacd",
+                                         "dabcbabacacbaca",
+                                         "cbbdacaaabadaca",
+                                         "dabcbabacacbacc",
+                                         "cbbdacaaabadacc",
+                                         "dabcbabacacbacd",
+                                         "cbbdacaaabadacd",
+                                         "dabcbadacabadaca",
+                                         "cbbdacabadacbaca",
+                                         "dabcbadacabadacc",
+                                         "cbbdacabadacbacc"}));
+
+    std::vector<std::string> expected;
+    for (auto it = p.rules.cbegin(); it < p.rules.cend(); it += 2) {
+      expected.push_back(*it + *(it + 1));
+    }
+    std::vector<std::string> found = expected;
+    std::sort(found.begin(), found.end(), ShortLexCompare<std::string>());
+    REQUIRE(found == expected);
+    for (size_t i = 0; i != found.size(); ++i) {
+      REQUIRE(std::make_pair(found[i], i) == std::make_pair(expected[i], i));
+    }
+  }
+
 }  // namespace libsemigroups

Reply via email to