Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gap-utils for openSUSE:Factory 
checked in at 2026-07-31 15:31:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gap-utils (Old)
 and      /work/SRC/openSUSE:Factory/.gap-utils.new.2004 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gap-utils"

Fri Jul 31 15:31:08 2026 rev:12 rq:1368516 version:0.97

Changes:
--------
--- /work/SRC/openSUSE:Factory/gap-utils/gap-utils.changes      2026-06-08 
14:25:22.777205282 +0200
+++ /work/SRC/openSUSE:Factory/.gap-utils.new.2004/gap-utils.changes    
2026-07-31 16:07:17.572398574 +0200
@@ -1,0 +2,6 @@
+Thu Jul 30 07:04:42 UTC 2026 - Jan Engelhardt <[email protected]>
+
+- Update to release 0.97
+  * Updates to the CI/CD and test scripts only
+
+-------------------------------------------------------------------

Old:
----
  utils-0.96.tar.gz

New:
----
  utils-0.97.tar.gz

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

Other differences:
------------------
++++++ gap-utils.spec ++++++
--- /var/tmp/diff_new_pack.SqQSoD/_old  2026-07-31 16:07:18.016414024 +0200
+++ /var/tmp/diff_new_pack.SqQSoD/_new  2026-07-31 16:07:18.020414163 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           gap-utils
-Version:        0.96
+Version:        0.97
 Release:        0
 Summary:        GAP: Utility functions in GAP
 License:        GPL-2.0-or-later
@@ -27,8 +27,8 @@
 Source:         
https://github.com/gap-packages/utils/releases/download/v%version/utils-%version.tar.gz
 BuildRequires:  gap-rpm-devel
 BuildRequires:  xz
-Requires:       gap-core >= 4.10.1
-Suggests:       gap-curlinterface >= 2.3.0
+Requires:       gap-core >= 4.12
+Suggests:       gap-curlinterface >= 2.4.0
 BuildArch:      noarch
 
 %description

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.SqQSoD/_old  2026-07-31 16:07:18.056415415 +0200
+++ /var/tmp/diff_new_pack.SqQSoD/_new  2026-07-31 16:07:18.064415694 +0200
@@ -1,5 +1,5 @@
-mtime: 1780822014
-commit: 3c5ca86eddcc9d019f22947ce56d2afb1dfe31946f9d1c90a10b2ab146c29ebd
+mtime: 1785395100
+commit: 4be5da2d92b7572c4edb414067a019da76c55162b2ec36cf7b3f6b9a72c9cf21
 url: https://src.opensuse.org/jengelh/gap-utils
 revision: master
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-07-30 09:05:00.000000000 +0200
@@ -0,0 +1 @@
+.osc

++++++ utils-0.96.tar.gz -> utils-0.97.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/CHANGES.md new/utils-0.97/CHANGES.md
--- old/utils-0.96/CHANGES.md   2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/CHANGES.md   2026-07-29 02:00:00.000000000 +0200
@@ -1,5 +1,8 @@
 # CHANGES log for the 'Utils' package
 
+## Version 0.97 for GAP 4.16.0 (29/07/26)
+ * (29/07/26) various CI updates, etc.
+
 ## Version 0.96 for GAP 4.16.0 (06/06/26)
  * (06/06/26) testall.g adjusted to fix issue in oscar-system/GAP.jl/pull/1379.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/PackageInfo.g new/utils-0.97/PackageInfo.g
--- old/utils-0.96/PackageInfo.g        2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/PackageInfo.g        2026-07-29 02:00:00.000000000 +0200
@@ -7,8 +7,8 @@
 
 PackageName := "utils", 
 Subtitle := "Utility functions in GAP",
-Version := "0.96",
-Date := "06/06/2026", # dd/mm/yyyy format
+Version := "0.97",
+Date := "29/07/2026", # dd/mm/yyyy format
 License := "GPL-2.0-or-later",
 
 Persons := [
@@ -123,9 +123,10 @@
 ),
 
 Dependencies := rec(
-  GAP := ">=4.10.1",
+  GAP := ">=4.12",
   NeededOtherPackages := [ ], 
-  SuggestedOtherPackages := [ [ "curlInterface", ">= 2.3.0" ] ],
+  SuggestedOtherPackages := [ [ "curlInterface", ">= 2.4.0" ] ],
+  TestPackages := [ [ "io", ">= 4.7.0" ] ],
   ExternalConditions := [ ]
 ),
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/doc/_entities.xml 
new/utils-0.97/doc/_entities.xml
--- old/utils-0.96/doc/_entities.xml    2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/doc/_entities.xml    2026-07-29 02:00:00.000000000 +0200
@@ -3,9 +3,9 @@
 <!ENTITY Magma '<M>{\sf Magma}</M>'>
 <!ENTITY MathJax '<M>{\sf MathJax}</M>'>
 <!ENTITY RCWA '<Package>RCWA</Package>'>
-<!ENTITY RELEASEDATE '6 June 2026'>
+<!ENTITY RELEASEDATE '29 July 2026'>
 <!ENTITY RELEASEYEAR '2026'>
 <!ENTITY ResClasses '<Package>ResClasses</Package>'>
 <!ENTITY Utils '<Package>Utils</Package>'>
-<!ENTITY VERSION '0.96'>
+<!ENTITY VERSION '0.97'>
 <!ENTITY XMod '<Package>XMod</Package>'>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/doc/_main.tex new/utils-0.97/doc/_main.tex
--- old/utils-0.96/doc/_main.tex        2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/doc/_main.tex        2026-07-29 02:00:00.000000000 +0200
@@ -100,8 +100,8 @@
 \mbox{}}}\\
 \vfill
 
-{\Huge  0.96 \mbox{}}\\[1cm]
-{ 6 June 2026 \mbox{}}\\[1cm]
+{\Huge  0.97 \mbox{}}\\[1cm]
+{ 29 July 2026 \mbox{}}\\[1cm]
 \mbox{}\\[2cm]
 {\Large \textbf{\strut  Thomas Breuer    \strut\mbox{}}}\\
 {\Large \textbf{\strut  Sebastian Gutsche    \strut\mbox{}}}\\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/doc/chap0.html 
new/utils-0.97/doc/chap0.html
--- old/utils-0.96/doc/chap0.html       2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/doc/chap0.html       2026-07-29 02:00:00.000000000 +0200
@@ -29,10 +29,10 @@
 <h2>Utility functions in <strong class="pkg">GAP</strong></h2>
 
 <p>
-    0.96</p>
+    0.97</p>
 
 <p>
-    6 June 2026
+    29 July 2026
   </p>
 
 </div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/doc/chap0.txt new/utils-0.97/doc/chap0.txt
--- old/utils-0.96/doc/chap0.txt        2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/doc/chap0.txt        2026-07-29 02:00:00.000000000 +0200
@@ -6,10 +6,10 @@
                             Utility functions in GAP 
   
   
-                                      0.96
+                                      0.97
   
   
-                                  6 June 2026
+                                  29 July 2026
   
   
                                  Thomas Breuer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/doc/chap0_mj.html 
new/utils-0.97/doc/chap0_mj.html
--- old/utils-0.96/doc/chap0_mj.html    2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/doc/chap0_mj.html    2026-07-29 02:00:00.000000000 +0200
@@ -32,10 +32,10 @@
 <h2>Utility functions in <strong class="pkg">GAP</strong></h2>
 
 <p>
-    0.96</p>
+    0.97</p>
 
 <p>
-    6 June 2026
+    29 July 2026
   </p>
 
 </div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/doc/download.xml 
new/utils-0.97/doc/download.xml
--- old/utils-0.96/doc/download.xml     2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/doc/download.xml     2026-07-29 02:00:00.000000000 +0200
@@ -82,7 +82,7 @@
 </Item>
 </List>
 <P/>
-<Example><![CDATA[
+<Log><![CDATA[
 gap> url:= "https://www.gap-system.org/index.html";;;
 gap> res1:= Download( url );;
 gap> res1.success;
@@ -94,7 +94,7 @@
 false
 gap> IsBound( res2.error ) and IsString( res2.error );
 true
-]]></Example>
+]]></Log>
 </Description>
 </ManSection>
 
Binary files old/utils-0.96/doc/manual.pdf and new/utils-0.97/doc/manual.pdf 
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/doc/title.xml new/utils-0.97/doc/title.xml
--- old/utils-0.96/doc/title.xml        2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/doc/title.xml        2026-07-29 02:00:00.000000000 +0200
@@ -9,7 +9,7 @@
     Utility functions in &GAP;
   </Subtitle>
   <Version>
-    0.96
+    0.97
   </Version>
   <Author>
     Thomas Breuer
@@ -57,7 +57,7 @@
 <Homepage>https://github.com/cdwensley</Homepage>
   </Author>
   <Date>
-    6 June 2026
+    29 July 2026
   </Date>
   <Abstract>
     The &Utils; package provides a space for utility functions in a variety of 
&GAP; packages to be collected together into a single package.  In this way it 
is hoped that they will become more visible to package authors.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/lib/download.gi 
new/utils-0.97/lib/download.gi
--- old/utils-0.96/lib/download.gi      2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/lib/download.gi      2026-07-29 02:00:00.000000000 +0200
@@ -55,7 +55,7 @@
   name:= "via SingleHTTPRequest (from the IO package)",
   isAvailable:= {} -> IsBoundGlobal( "SingleHTTPRequest" ),
   download:= function( url, opt )
-    local rurl, pos, domain, uri, res;
+    local rurl, pos, authority, domain, port, portstr, uri, fragment, res;
 
     if not StartsWith( url, "http://"; ) then
       return rec( success:= false, error:= "protocol is not http" );
@@ -63,16 +63,67 @@
       return rec( success:= false, error:= "no support for given timeout" );
     fi;
 
-    rurl:= ReplacedString( url, "http://";, "" );
-    pos:= Position( rurl, '/' );
-    domain:= rurl{ [ 1 .. pos-1 ] };
-    uri:= rurl{ [ pos .. Length( rurl ) ] };
+    # Split the URL after 'http://' into the authority and HTTP request target.
+    # A query without an explicit path gets the default path '/'.
+    rurl:= url{ [ 8 .. Length( url ) ] };
+    pos:= PositionProperty( rurl, c -> c in "/?#" );
+    if pos = fail then
+      authority:= rurl;
+      uri:= "/";
+    else
+      authority:= rurl{ [ 1 .. pos-1 ] };
+      uri:= rurl{ [ pos .. Length( rurl ) ] };
+      if StartsWith( uri, "?" ) then
+        uri:= Concatenation( "/", uri );
+      elif StartsWith( uri, "#" ) then
+        uri:= "/";
+      fi;
+    fi;
+
+    # A fragment is interpreted by the client and must not be sent to the
+    # server as part of the request target.
+    fragment:= Position( uri, '#' );
+    if fragment <> fail then
+      uri:= uri{ [ 1 .. fragment-1 ] };
+    fi;
+
+    # Separate the optional port from the host.  IO's HTTP client uses IPv4
+    # sockets, thus bracketed IPv6 addresses are not supported here.
+    domain:= authority;
+    port:= 80;
+    portstr:= fail;
+    if Length( authority ) = 0 or Position( authority, '@' ) <> fail then
+      return rec( success:= false, error:= "invalid URL authority" );
+    elif authority[1] = '[' then
+      return rec( success:= false,
+                  error:= "IPv6 addresses are not supported" );
+    else
+      pos:= Position( authority, ':' );
+      if pos <> fail then
+        if Position( authority, ':', pos ) <> fail then
+          return rec( success:= false, error:= "invalid URL authority" );
+        fi;
+        domain:= authority{ [ 1 .. pos-1 ] };
+        portstr:= authority{ [ pos+1 .. Length( authority ) ] };
+      fi;
+    fi;
+    if Length( domain ) = 0 then
+      return rec( success:= false, error:= "invalid URL authority" );
+    elif portstr <> fail then
+      port:= Int( portstr );
+      if not IsPosInt( port ) or port > 65535 then
+        return rec( success:= false, error:= "invalid URL port" );
+      fi;
+    fi;
+
+    # Preserve the complete authority, including brackets and a non-default
+    # port, in the HTTP Host header.
     if IsBound( opt.target ) and IsString( opt.target ) then
-      res:= ValueGlobal( "SingleHTTPRequest" )( domain, 80, "GET", uri,
-                rec(), false, opt.target );
+      res:= ValueGlobal( "SingleHTTPRequest" )( domain, port, "GET", uri,
+                rec( Host:= authority ), false, opt.target );
     else
-      res:= ValueGlobal( "SingleHTTPRequest" )( domain, 80, "GET", uri,
-                rec(), false, false );
+      res:= ValueGlobal( "SingleHTTPRequest" )( domain, port, "GET", uri,
+                rec( Host:= authority ), false, false );
     fi;
     if res.statuscode = 0 then
       return rec( success:= false,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/tst/download.tst 
new/utils-0.97/tst/download.tst
--- old/utils-0.96/tst/download.tst     2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/tst/download.tst     2026-07-29 02:00:00.000000000 +0200
@@ -1,4 +1,4 @@
-#@local meths, i, urls, pair, url, expected, res1, good1, n, file, res2, 
good2, contents, r, res3, good3, bad
+#@local meths, i, urls, pair, url, expected, res1, good1, n, file, res2, 
good2, contents, r, res3, good3, bad, server, baseurl, iometh
 ############################################################################
 ##
 #W  download.tst               Utils Package                   Thomas Breuer
@@ -11,21 +11,58 @@
 gap> ReadPackage( "utils", "tst/loadall.g" );;
 gap> UtilsLoadingComplete;
 true
+gap> LoadPackage( "io", false );
+true
+gap> ReadPackage( "utils", "tst/http-server.g" );;
+gap> server:= UTILS_StartHTTPTestServer();;
+gap> baseurl:= Concatenation( "http://127.0.0.1:";,
+>                            String( server.port ) );;
 
 ##  Test the available Download methods
 gap> meths:= List( Filtered( Download_Methods, r -> r.isAvailable() ),
 >                  ShallowCopy );;
+gap> iometh:= First( meths,
+>                    r -> StartsWith( r.name, "via SingleHTTPRequest" ) );;
 gap> for i in [ 1 .. Length( meths ) ] do
 >      meths[i].position:= String( i );
 >    od;
-gap> urls:= [ # a http url that gets redirected to https
->             [ "http://www.gap-system.org/index.html";, true ],
->             # a http url that works as such
->             [ "http://www.math.rwth-aachen.de/index.html";, true ],
->             # a https url that exists
->             [ "https://www.gap-system.org/index.html";, true ],
->             # a https url that does not exist
->             [ "https://www.gap-system.org/indexxxxx.html";, false ],
+
+##  Test URL parsing in the SingleHTTPRequest based method.
+gap> res1:= iometh.download( Concatenation( baseurl, "?a=b#fragment" ),
+>                           rec() );;
+gap> res1.success;
+true
+gap> res1:= iometh.download( baseurl, rec() );;
+gap> res1.success;
+true
+gap> res1:= iometh.download( Concatenation( baseurl, "#fragment" ),
+>                           rec() );;
+gap> res1.success;
+true
+gap> res1:= iometh.download( "http:///missing-authority";, rec() );;
+gap> res1.error;
+"invalid URL authority"
+gap> res1:= iometh.download( "http://127.0.0.1:80:90/";, rec() );;
+gap> res1.error;
+"invalid URL authority"
+gap> res1:= iometh.download( "http://:80/";, rec() );;
+gap> res1.error;
+"invalid URL authority"
+gap> res1:= iometh.download( "http://127.0.0.1:not-a-port/";, rec() );;
+gap> res1.success = false;
+true
+gap> res1:= iometh.download( "http://127.0.0.1:65536/";, rec() );;
+gap> res1.success = false;
+true
+gap> res1:= iometh.download(
+>      Concatenation( "http://[::1]:";, String( server.port ), "/" ),
+>      rec() );;
+gap> res1.success = false;
+true
+gap> res1.error;
+"IPv6 addresses are not supported"
+gap> urls:= [ # an http url that works as such
+>             [ Concatenation( baseurl, "/success" ), true ],
 >           ];;
 
 ##  The problem is that the methods do not behave consistently
@@ -33,13 +70,15 @@
 ##  (Well, they even do not agree what failure means.)
 ##  The test results depend on which methods are available at runtime,
 ##  which makes them useless as automatic tests.
-##  Thus we test only working http and https urls.
-gap> urls:= urls{ [ 2, 3 ] };;
+##  Thus we test only a working http url.
 gap> for pair in urls do
 >      url:= pair[1];
 >      expected:= pair[2];
 >      res1:= List( meths, r -> [ r.download( url, rec() ), r.position ] );;
 >      good1:= Filtered( res1, r -> r[1].success = true );;
+>      if expected = true and Length( good1 ) <> Length( meths ) then
+>        Print( "failure for url ", url, "\n" );
+>      fi;
 >      if expected = false and Length( good1 ) > 0 then
 >        Print( "success for url ", url, "?\n" );
 >      fi;
@@ -92,12 +131,23 @@
 >    od;
 
 ##  test timeout
-gap> res1:= Download( "https://httpbun.com/delay/3";, rec( maxTime:= 1 ) );;
+gap> url:= Concatenation( baseurl, "/delay/3" );;
+gap> res1:= Download( url, rec( maxTime:= 1 ) );;
 gap> res1.success = false;
 true
-gap> res1:= Download( "https://httpbun.com/delay/3";, rec( maxTime:= 5 ) );;
+gap> res1:= Download( url, rec( maxTime:= 5 ) );;
 gap> res1.success = true;
 true
 
+##  test errors and redirects
+gap> res1:= Download( Concatenation( baseurl, "/missing" ) );;
+gap> res1.success = false;
+true
+gap> res1:= Download( Concatenation( baseurl, "/redirect" ) );;
+gap> res1.success = true;
+true
+
+gap> UTILS_StopHTTPTestServer( server );;
+
 ##
 gap> STOP_TEST( "download.tst" );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/tst/http-server.g 
new/utils-0.97/tst/http-server.g
--- old/utils-0.96/tst/http-server.g    1970-01-01 01:00:00.000000000 +0100
+++ new/utils-0.97/tst/http-server.g    2026-07-29 02:00:00.000000000 +0200
@@ -0,0 +1,92 @@
+#############################################################################
+##
+##  A small HTTP server for the download tests.
+##
+
+BindGlobal( "UTILS_HandleHTTPTestRequest", function( listener, socket )
+  local connection, line, parts, uri, body, status, location;
+
+  IO_close( listener );
+  connection:= IO_WrapFD( socket, IO.DefaultBufSize, IO.DefaultBufSize );
+  line:= IO_ReadLine( connection );
+  parts:= SplitString( line, " \r\n" );
+  if Length( parts ) < 2 then
+    IO_Close( connection );
+    IO_exit( 1 );
+  fi;
+  uri:= parts[2];
+
+  repeat
+    line:= IO_ReadLine( connection );
+  until line = fail or line = "" or line = "\n" or line = "\r\n";
+
+  body:= "download test response\n";
+  status:= "200 OK";
+  location:= "";
+  if StartsWith( uri, "/delay/3" ) then
+    Sleep( 3 );
+  elif StartsWith( uri, "/missing" ) then
+    body:= "not found\n";
+    status:= "404 Not Found";
+  elif StartsWith( uri, "/redirect" ) then
+    body:= "";
+    status:= "302 Found";
+    location:= "Location: /success\r\n";
+  fi;
+
+  IO_Write( connection,
+      "HTTP/1.1 ", status, "\r\n",
+      location,
+      "Content-Type: text/plain\r\n",
+      "Content-Length: ", String( Length( body ) ), "\r\n",
+      "Connection: close\r\n\r\n",
+      body );
+  IO_Flush( connection );
+  IO_Close( connection );
+  IO_exit( 0 );
+end );
+
+BindGlobal( "UTILS_StartHTTPTestServer", function()
+  local listener, address, port, pid, socket, handler;
+
+  listener:= IO_socket( IO.PF_INET, IO.SOCK_STREAM, "tcp" );
+  if listener = fail or
+     IO_bind( listener, IO_MakeIPAddressPort( "127.0.0.1", 0 ) ) = fail or
+     IO_listen( listener, 8 ) <> true then
+    Error( "cannot start the HTTP test server" );
+  fi;
+  address:= IO_getsockname( listener );
+  port:= 256 * INT_CHAR( address[3] ) + INT_CHAR( address[4] );
+
+  pid:= IO_fork();
+  if pid = 0 then
+    while true do
+      socket:= IO_accept( listener,
+                          IO_MakeIPAddressPort( "0.0.0.0", 0 ) );
+      if socket = fail then
+        IO_exit( 0 );
+      fi;
+      handler:= IO_fork();
+      if handler = 0 then
+        UTILS_HandleHTTPTestRequest( listener, socket );
+      elif handler < 0 then
+        IO_close( socket );
+        IO_exit( 1 );
+      else
+        IO_close( socket );
+        IO_IgnorePid( handler );
+      fi;
+    od;
+  elif pid < 0 then
+    IO_close( listener );
+    Error( "cannot fork the HTTP test server" );
+  fi;
+
+  IO_close( listener );
+  return rec( pid:= pid, port:= port );
+end );
+
+BindGlobal( "UTILS_StopHTTPTestServer", function( server )
+  IO_kill( server.pid, IO.SIGTERM );
+  IO_WaitPid( server.pid, true );
+end );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/tst/utils09.tst 
new/utils-0.97/tst/utils09.tst
--- old/utils-0.96/tst/utils09.tst      2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/tst/utils09.tst      2026-07-29 02:00:00.000000000 +0200
@@ -1,4 +1,4 @@
-# utils, chapter 9
+# utils, chapter 10
 #
 # DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD!
 #
@@ -10,17 +10,99 @@
 #
 gap> START_TEST("utils09.tst");
 
-# doc/download.xml:85-97
-gap> url:= "https://www.gap-system.org/index.html";;;
-gap> res1:= Download( url );;
-gap> res1.success;
+# doc/../lib/gslp.gd:34-46
+gap> gslp:= GeneralizedStraightLineProgram( "union",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+gap> IsGeneralizedStraightLineProgram( gslp );
 true
-gap> IsBound( res1.result ) and IsString( res1.result );
+gap> slp:= StraightLineProgram( [[[1,2]]], 1 );
+<straight line program>
+gap> IsGeneralizedStraightLineProgram( slp );
 true
-gap> res2:= Download( Concatenation( url, "xxx" ) );;
-gap> res2.success;
+gap> IsGeneralizedStraightLineProgram( [ slp, slp ] );
 false
-gap> IsBound( res2.error ) and IsString( res2.error );
+
+# doc/../lib/gslp.gd:194-203
+gap> GeneralizedStraightLineProgram( [[[1,2]]], 1 );
+<straight line program>
+gap> GeneralizedStraightLineProgram( "union",
+> [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+gap> GeneralizedStraightLineProgram( "compose",
+> [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+
+# doc/../lib/gslp.gd:77-83
+gap> gslp:= GeneralizedStraightLineProgram( "union",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+gap> DataOfGeneralizedStraightLineProgram( gslp );
+[ "union", [ <straight line program>, <straight line program> ] ]
+
+# doc/../lib/gslp.gd:111-116
+gap> NrInputsOfGeneralizedStraightLineProgram(
+>        GeneralizedStraightLineProgram( "union",
+>            [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] ) );
+1
+
+# doc/../lib/gslp.gd:146-155
+gap> NrOutputsOfGeneralizedStraightLineProgram(
+>        GeneralizedStraightLineProgram( "union",
+>            [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] ) );
+2
+gap> NrOutputsOfGeneralizedStraightLineProgram(
+>        GeneralizedStraightLineProgram( "compose",
+>            [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] ) );
+1
+
+# doc/../lib/gslp.gd:248-260
+gap> gens:= [ (1,2,3,4,5,6) ];;
+gap> gslp:= GeneralizedStraightLineProgram( "union",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+gap> ResultOfGeneralizedStraightLineProgram( gslp, gens );
+[ (1,3,5)(2,4,6), (1,4)(2,5)(3,6) ]
+gap> gslp:= GeneralizedStraightLineProgram( "compose",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+gap> ResultOfGeneralizedStraightLineProgram( gslp, gens );
+[ () ]
+
+# doc/../lib/gslp.gd:292-317
+gap> gslp:= GeneralizedStraightLineProgram( "union",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+gap> slp:= EquivalentStraightLineProgram( gslp );
+<straight line program>
+gap> Display( slp );
+# input:
+r:= [ g1 ];
+# program:
+# return values:
+[ r[1]^2, r[1]^3 ]
+gap> gslp:= GeneralizedStraightLineProgram( "compose",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
+<generalized straight line program>
+gap> slp:= EquivalentStraightLineProgram( gslp );
+<straight line program>
+gap> Display( slp );
+# input:
+r:= [ g1 ];
+# program:
+r[2]:= r[1]^2;
+r[1]:= r[2];
+# return values:
+[ r[1]^3 ]
+
+# doc/../lib/gslp.gi:220-229
+gap> gslp:= GeneralizedStraightLineProgram( "union",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );;
+gap> IsInternallyConsistent( gslp );
+true
+gap> gslp:= GeneralizedStraightLineProgram( "compose",
+>               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );;
+gap> IsInternallyConsistent( gslp );
 true
 
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/tst/utils10.tst 
new/utils-0.97/tst/utils10.tst
--- old/utils-0.96/tst/utils10.tst      2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/tst/utils10.tst      2026-07-29 02:00:00.000000000 +0200
@@ -1,4 +1,4 @@
-# utils, chapter 10
+# utils, chapter 11
 #
 # DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD!
 #
@@ -10,100 +10,61 @@
 #
 gap> START_TEST("utils10.tst");
 
-# doc/../lib/gslp.gd:34-46
-gap> gslp:= GeneralizedStraightLineProgram( "union",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-gap> IsGeneralizedStraightLineProgram( gslp );
-true
-gap> slp:= StraightLineProgram( [[[1,2]]], 1 );
-<straight line program>
-gap> IsGeneralizedStraightLineProgram( slp );
-true
-gap> IsGeneralizedStraightLineProgram( [ slp, slp ] );
-false
-
-# doc/../lib/gslp.gd:194-203
-gap> GeneralizedStraightLineProgram( [[[1,2]]], 1 );
-<straight line program>
-gap> GeneralizedStraightLineProgram( "union",
-> [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-gap> GeneralizedStraightLineProgram( "compose",
-> [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-
-# doc/../lib/gslp.gd:77-83
-gap> gslp:= GeneralizedStraightLineProgram( "union",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-gap> DataOfGeneralizedStraightLineProgram( gslp );
-[ "union", [ <straight line program>, <straight line program> ] ]
-
-# doc/../lib/gslp.gd:111-116
-gap> NrInputsOfGeneralizedStraightLineProgram(
->        GeneralizedStraightLineProgram( "union",
->            [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] ) );
-1
-
-# doc/../lib/gslp.gd:146-155
-gap> NrOutputsOfGeneralizedStraightLineProgram(
->        GeneralizedStraightLineProgram( "union",
->            [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] ) );
-2
-gap> NrOutputsOfGeneralizedStraightLineProgram(
->        GeneralizedStraightLineProgram( "compose",
->            [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] ) );
-1
-
-# doc/../lib/gslp.gd:248-260
-gap> gens:= [ (1,2,3,4,5,6) ];;
-gap> gslp:= GeneralizedStraightLineProgram( "union",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-gap> ResultOfGeneralizedStraightLineProgram( gslp, gens );
-[ (1,3,5)(2,4,6), (1,4)(2,5)(3,6) ]
-gap> gslp:= GeneralizedStraightLineProgram( "compose",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-gap> ResultOfGeneralizedStraightLineProgram( gslp, gens );
-[ () ]
-
-# doc/../lib/gslp.gd:292-317
-gap> gslp:= GeneralizedStraightLineProgram( "union",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-gap> slp:= EquivalentStraightLineProgram( gslp );
-<straight line program>
-gap> Display( slp );
-# input:
-r:= [ g1 ];
-# program:
-# return values:
-[ r[1]^2, r[1]^3 ]
-gap> gslp:= GeneralizedStraightLineProgram( "compose",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );
-<generalized straight line program>
-gap> slp:= EquivalentStraightLineProgram( gslp );
-<straight line program>
-gap> Display( slp );
-# input:
-r:= [ g1 ];
-# program:
-r[2]:= r[1]^2;
-r[1]:= r[2];
-# return values:
-[ r[1]^3 ]
-
-# doc/../lib/gslp.gi:220-229
-gap> gslp:= GeneralizedStraightLineProgram( "union",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );;
-gap> IsInternallyConsistent( gslp );
-true
-gap> gslp:= GeneralizedStraightLineProgram( "compose",
->               [ [ [[[1,2]]], 1 ], [ [[[1,3]]], 1 ] ] );;
-gap> IsInternallyConsistent( gslp );
-true
+# doc/others.xml:57-62
+gap> IntOrInfinityToLaTeX( 10^3 );
+"1000"
+gap> IntOrInfinityToLaTeX( infinity );
+"\\infty"
+
+# doc/others.xml:75-78
+gap> LaTeXStringFactorsInt( Factorial(12) );
+"2^{10} \\cdot 3^5 \\cdot 5^2 \\cdot 7 \\cdot 11"
+
+# doc/others.xml:120-165
+gap> ## permutation groups
+gap> ConvertToMagmaInputString( Group( (1,2,3,4,5), (3,4,5) ) );
+"PermutationGroup<5|(1,2,3,4,5),\n(3,4,5)>;\n"
+gap> ConvertToMagmaInputString( Group( (1,2,3,4,5) ), "c5" );        
+"c5 := PermutationGroup<5|(1,2,3,4,5)>;\n"
+gap> ## pc-group
+gap> ConvertToMagmaInputString( DihedralGroup( IsPcGroup, 10 ) );
+"PolycyclicGroup< f1,f2 |\nf1^2,\nf2^5,\nf2^f1 = f2^4\n>;\n"
+gap> ## fp-group
+gap> F2 := FreeGroup( 2 );;
+gap> f := F2.1;;  g := F2.2;;
+gap> relq8 := [ f^4, g^4, f*g*f*g^-1, f^2*g^2 ];; 
+gap> q8 := F2/relq8;; 
+gap> ConvertToMagmaInputString( q8 );
+no conversion function yet available for fp-groups
+fail
+gap> ## matrix group
+gap> M := GL(2,5);;  Size(M); 
+480
+gap> s1 := ConvertToMagmaInputString( M );
+"F := GF(5);\nP := GL(2,F);\ngens := [\nP![2,0,0,1],\nP![4,1,4,0]\n];\nsub<P |\
+ gens>;\n"
+gap> Print( s1 );
+F := GF(5);
+P := GL(2,F);
+gens := [
+P![2,0,0,1],
+P![4,1,4,0]
+];
+sub<P | gens>;
+gap> n1 := [ [ Z(9)^0, Z(9)^0 ], [ Z(9)^0, Z(9) ] ];;
+gap> n2 := [ [ Z(9)^0, Z(9)^3 ], [ Z(9)^4, Z(9)^2 ] ];;
+gap> N := Group( n1, n2 );;  Size( N );
+5760
+gap> s2 := ConvertToMagmaInputString( N, "gpN" );;
+gap> Print( s2 );
+F := GF(3^2);
+P := GL(2,F);
+w := PrimitiveElement(F);
+gens := [
+P![ 1, 1, 1,w^1],
+P![ 1,w^3, 2,w^2]
+];
+gpN := sub<P | gens>;
 
 #
 gap> STOP_TEST("utils10.tst", 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/tst/utils11.tst 
new/utils-0.97/tst/utils11.tst
--- old/utils-0.96/tst/utils11.tst      2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/tst/utils11.tst      2026-07-29 02:00:00.000000000 +0200
@@ -1,4 +1,4 @@
-# utils, chapter 11
+# utils, chapter 12
 #
 # DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD!
 #
@@ -10,61 +10,23 @@
 #
 gap> START_TEST("utils11.tst");
 
-# doc/others.xml:57-62
-gap> IntOrInfinityToLaTeX( 10^3 );
-"1000"
-gap> IntOrInfinityToLaTeX( infinity );
-"\\infty"
-
-# doc/others.xml:75-78
-gap> LaTeXStringFactorsInt( Factorial(12) );
-"2^{10} \\cdot 3^5 \\cdot 5^2 \\cdot 7 \\cdot 11"
-
-# doc/others.xml:120-165
-gap> ## permutation groups
-gap> ConvertToMagmaInputString( Group( (1,2,3,4,5), (3,4,5) ) );
-"PermutationGroup<5|(1,2,3,4,5),\n(3,4,5)>;\n"
-gap> ConvertToMagmaInputString( Group( (1,2,3,4,5) ), "c5" );        
-"c5 := PermutationGroup<5|(1,2,3,4,5)>;\n"
-gap> ## pc-group
-gap> ConvertToMagmaInputString( DihedralGroup( IsPcGroup, 10 ) );
-"PolycyclicGroup< f1,f2 |\nf1^2,\nf2^5,\nf2^f1 = f2^4\n>;\n"
-gap> ## fp-group
-gap> F2 := FreeGroup( 2 );;
-gap> f := F2.1;;  g := F2.2;;
-gap> relq8 := [ f^4, g^4, f*g*f*g^-1, f^2*g^2 ];; 
-gap> q8 := F2/relq8;; 
-gap> ConvertToMagmaInputString( q8 );
-no conversion function yet available for fp-groups
-fail
-gap> ## matrix group
-gap> M := GL(2,5);;  Size(M); 
-480
-gap> s1 := ConvertToMagmaInputString( M );
-"F := GF(5);\nP := GL(2,F);\ngens := [\nP![2,0,0,1],\nP![4,1,4,0]\n];\nsub<P |\
- gens>;\n"
-gap> Print( s1 );
-F := GF(5);
-P := GL(2,F);
-gens := [
-P![2,0,0,1],
-P![4,1,4,0]
-];
-sub<P | gens>;
-gap> n1 := [ [ Z(9)^0, Z(9)^0 ], [ Z(9)^0, Z(9) ] ];;
-gap> n2 := [ [ Z(9)^0, Z(9)^3 ], [ Z(9)^4, Z(9)^2 ] ];;
-gap> N := Group( n1, n2 );;  Size( N );
-5760
-gap> s2 := ConvertToMagmaInputString( N, "gpN" );;
-gap> Print( s2 );
-F := GF(3^2);
-P := GL(2,F);
-w := PrimitiveElement(F);
-gens := [
-P![ 1, 1, 1,w^1],
-P![ 1,w^3, 2,w^2]
-];
-gpN := sub<P | gens>;
+# doc/obsolete.xml:49-66
+gap> s3 := SymmetricGroup( 3 );; 
+gap> L := KnownPropertiesOfObject( GeneratorsOfGroup( s3 ) );;
+gap> Perform( L, Display );
+IsFinite
+IsSmallList
+IsGeneratorsOfMagmaWithInverses
+IsAssociative
+IsGeneratorsOfSemigroup
+IsSubsetLocallyFiniteGroup
+gap> Perform( s3, Display ); 
+()
+(2,3)
+(1,3)
+(1,3,2)
+(1,2,3)
+(1,2)
 
 #
 gap> STOP_TEST("utils11.tst", 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/utils-0.96/tst/utils12.tst 
new/utils-0.97/tst/utils12.tst
--- old/utils-0.96/tst/utils12.tst      2026-06-06 02:00:00.000000000 +0200
+++ new/utils-0.97/tst/utils12.tst      1970-01-01 01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-# utils, chapter 12
-#
-# DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD!
-#
-# This file has been generated by AutoDoc. It contains examples extracted from
-# the package documentation. Each example is preceded by a comment which gives
-# the name of a GAPDoc XML file and a line range from which the example were
-# taken. Note that the XML file in turn may have been generated by AutoDoc
-# from some other input.
-#
-gap> START_TEST("utils12.tst");
-
-# doc/obsolete.xml:49-66
-gap> s3 := SymmetricGroup( 3 );; 
-gap> L := KnownPropertiesOfObject( GeneratorsOfGroup( s3 ) );;
-gap> Perform( L, Display );
-IsFinite
-IsSmallList
-IsGeneratorsOfMagmaWithInverses
-IsAssociative
-IsGeneratorsOfSemigroup
-IsSubsetLocallyFiniteGroup
-gap> Perform( s3, Display ); 
-()
-(2,3)
-(1,3)
-(1,3,2)
-(1,2,3)
-(1,2)
-
-#
-gap> STOP_TEST("utils12.tst", 1);

Reply via email to