From 7bfebd18eb1c9a7eb283ec1a8a05009449239c88 Mon Sep 17 00:00:00 2001 From: "Alejandro R. Mosteo" Date: Mon, 17 Mar 2025 18:28:45 +0100 Subject: [PATCH 1/6] Disable testsuite for alr 2.1 --- aaa_base/alire.toml | 4 ++-- aaa_texts/alire.toml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aaa_base/alire.toml b/aaa_base/alire.toml index 90940d3..92ed197 100644 --- a/aaa_base/alire.toml +++ b/aaa_base/alire.toml @@ -26,5 +26,5 @@ type = "test" directory = "tests" command = ["alr", "build"] -[test] -runner = "alire" +# [test] +# runner = "alire" diff --git a/aaa_texts/alire.toml b/aaa_texts/alire.toml index e44930a..001975b 100644 --- a/aaa_texts/alire.toml +++ b/aaa_texts/alire.toml @@ -15,5 +15,5 @@ ansiada = "^1.1.0" lml = "~0.1.0" umwi = "~0.1.0" -[test] -runner = "alire" +# [test] +# runner = "alire" From 0a9d5f6f122b4bd5b86f38d6f03c3ec12d5f1378 Mon Sep 17 00:00:00 2001 From: "Alejandro R. Mosteo" Date: Wed, 8 Jul 2026 16:50:10 +0200 Subject: [PATCH 2/6] Non-recursive flatten --- aaa_base/alire.toml | 9 +- aaa_base/config/aaa_config.ads | 2 +- aaa_base/config/aaa_config.gpr | 25 +----- aaa_base/config/aaa_config.h | 2 +- aaa_base/src/aaa-strings.adb | 41 ++++++--- aaa_base/tests/common/aaa_tests.ads | 2 + aaa_base/tests/config/aaa_tests_config.ads | 2 +- aaa_base/tests/config/aaa_tests_config.gpr | 25 +----- aaa_base/tests/config/aaa_tests_config.h | 2 +- .../tests/config/aaa_tests_list_config.gpr | 1 + ...aa_tests-strings-check_vector_equality.adb | 2 + .../tests/src/aaa_tests-strings-flatten.adb | 87 +++++++++++++++++++ .../src/aaa_tests-strings-vector_diffs.adb | 2 + 13 files changed, 129 insertions(+), 73 deletions(-) create mode 100644 aaa_base/tests/src/aaa_tests-strings-flatten.adb diff --git a/aaa_base/alire.toml b/aaa_base/alire.toml index 92ed197..7f5e94e 100644 --- a/aaa_base/alire.toml +++ b/aaa_base/alire.toml @@ -21,10 +21,5 @@ maintainers-logins = ["mosteo"] tags = ["miscellanea", "utility"] website = "https://github.com/mosteo/aaa" -[[actions]] -type = "test" -directory = "tests" -command = ["alr", "build"] - -# [test] -# runner = "alire" +[test] +runner = "alire" diff --git a/aaa_base/config/aaa_config.ads b/aaa_base/config/aaa_config.ads index 85e4d2e..f0ca682 100644 --- a/aaa_base/config/aaa_config.ads +++ b/aaa_base/config/aaa_config.ads @@ -12,7 +12,7 @@ package Aaa_Config is Alire_Host_Arch : constant String := "x86_64"; - Alire_Host_Distro : constant String := "ubuntu"; + Alire_Host_Distro : constant String := "suse"; type Build_Profile_Kind is (release, validation, development); Build_Profile : constant Build_Profile_Kind := validation; diff --git a/aaa_base/config/aaa_config.gpr b/aaa_base/config/aaa_config.gpr index 81c855c..21da712 100644 --- a/aaa_base/config/aaa_config.gpr +++ b/aaa_base/config/aaa_config.gpr @@ -7,7 +7,7 @@ abstract project Aaa_Config is Alire_Host_Arch := "x86_64"; - Alire_Host_Distro := "ubuntu"; + Alire_Host_Distro := "suse"; Ada_Compiler_Switches := External_As_List ("ADAFLAGS", " "); Ada_Compiler_Switches := Ada_Compiler_Switches & ( @@ -22,29 +22,6 @@ abstract project Aaa_Config is ,"-gnatVa" -- All validity checks ,"-gnatwe" -- Warnings as errors ,"-gnata" -- Enable assertions and contracts - ,"-gnaty3" -- Specify indentation level of 3 - ,"-gnatya" -- Check attribute casing - ,"-gnatyA" -- Use of array index numbers in array attributes - ,"-gnatyB" -- Check Boolean operators - ,"-gnatyb" -- Blanks not allowed at statement end - ,"-gnatyc" -- Check comments - ,"-gnaty-d" -- Disable check no DOS line terminators present - ,"-gnatye" -- Check end/exit labels - ,"-gnatyf" -- No form feeds or vertical tabs - ,"-gnatyh" -- No horizontal tabs - ,"-gnatyi" -- Check if-then layout - ,"-gnatyI" -- check mode IN keywords - ,"-gnatyk" -- Check keyword casing - ,"-gnatyl" -- Check layout - ,"-gnatym" -- Check maximum line length - ,"-gnatyn" -- Check casing of entities in Standard - ,"-gnatyO" -- Check that overriding subprograms are explicitly marked as such - ,"-gnatyp" -- Check pragma casing - ,"-gnatyr" -- Check identifier references casing - ,"-gnatyS" -- Check no statements after THEN/ELSE - ,"-gnatyt" -- Check token spacing - ,"-gnatyu" -- Check unnecessary blank lines - ,"-gnatyx" -- Check extra parentheses ,"-gnatW8" -- UTF-8 encoding for wide characters ); diff --git a/aaa_base/config/aaa_config.h b/aaa_base/config/aaa_config.h index edcfdd4..4c9feec 100644 --- a/aaa_base/config/aaa_config.h +++ b/aaa_base/config/aaa_config.h @@ -9,7 +9,7 @@ #define ALIRE_HOST_ARCH "x86_64" -#define ALIRE_HOST_DISTRO "ubuntu" +#define ALIRE_HOST_DISTRO "suse" #define BUILD_PROFILE_RELEASE 1 #define BUILD_PROFILE_VALIDATION 2 diff --git a/aaa_base/src/aaa-strings.adb b/aaa_base/src/aaa-strings.adb index 8088034..eda31c5 100644 --- a/aaa_base/src/aaa-strings.adb +++ b/aaa_base/src/aaa-strings.adb @@ -119,24 +119,37 @@ package body AAA.Strings is Separator : String := " ") return String is + Length : Natural := 0; + Pos : Positive := 1; + begin + -- Compute result length - function Flatten (Pos : Positive; V : Vector) return String; - - ------------- - -- Flatten -- - ------------- + for Line of V loop + Length := Length + Line'Length; + end loop; - function Flatten (Pos : Positive; V : Vector) return String is - (if Pos = V.Count - then V (Pos) - else V (Pos) & Separator & Flatten (Pos + 1, V)); + -- Add length of separators - begin - if V.Is_Empty then - return ""; - else - return Flatten (1, V); + if not V.Is_Empty then + Length := Length + (V.Count - 1) * Separator'Length; end if; + + -- Length might be zero if V is empty + + return S : string (1 .. Length) do + for Line of V loop + S (Pos .. Pos + Line'Length - 1) := Line; + Pos := Pos + Line'Length; + + if Pos + Separator'Length - 1 <= Length then + S (Pos .. Pos + Separator'Length - 1) := Separator; + Pos := Pos + Separator'Length; + end if; + end loop; + + pragma Assert (Pos - 1 = Length, + "Erroneous length computation in Flatten"); + end return; end Flatten; ------------- diff --git a/aaa_base/tests/common/aaa_tests.ads b/aaa_base/tests/common/aaa_tests.ads index 0f01a8b..91bb08e 100644 --- a/aaa_base/tests/common/aaa_tests.ads +++ b/aaa_base/tests/common/aaa_tests.ads @@ -1,5 +1,7 @@ package Aaa_Tests is + pragma Ignore_Pragma (Alire_Test); + procedure Assert (Cond : Boolean; Text : String); end Aaa_Tests; diff --git a/aaa_base/tests/config/aaa_tests_config.ads b/aaa_base/tests/config/aaa_tests_config.ads index f7d40d8..ec0e1ef 100644 --- a/aaa_base/tests/config/aaa_tests_config.ads +++ b/aaa_base/tests/config/aaa_tests_config.ads @@ -12,7 +12,7 @@ package Aaa_Tests_Config is Alire_Host_Arch : constant String := "x86_64"; - Alire_Host_Distro : constant String := "ubuntu"; + Alire_Host_Distro : constant String := "suse"; type Build_Profile_Kind is (release, validation, development); Build_Profile : constant Build_Profile_Kind := validation; diff --git a/aaa_base/tests/config/aaa_tests_config.gpr b/aaa_base/tests/config/aaa_tests_config.gpr index e9bec49..0e93b20 100644 --- a/aaa_base/tests/config/aaa_tests_config.gpr +++ b/aaa_base/tests/config/aaa_tests_config.gpr @@ -8,7 +8,7 @@ abstract project Aaa_Tests_Config is Alire_Host_Arch := "x86_64"; - Alire_Host_Distro := "ubuntu"; + Alire_Host_Distro := "suse"; Ada_Compiler_Switches := External_As_List ("ADAFLAGS", " "); Ada_Compiler_Switches := Ada_Compiler_Switches & ( @@ -23,29 +23,6 @@ abstract project Aaa_Tests_Config is ,"-gnatVa" -- All validity checks ,"-gnatwe" -- Warnings as errors ,"-gnata" -- Enable assertions and contracts - ,"-gnaty3" -- Specify indentation level of 3 - ,"-gnatya" -- Check attribute casing - ,"-gnatyA" -- Use of array index numbers in array attributes - ,"-gnatyB" -- Check Boolean operators - ,"-gnatyb" -- Blanks not allowed at statement end - ,"-gnatyc" -- Check comments - ,"-gnaty-d" -- Disable check no DOS line terminators present - ,"-gnatye" -- Check end/exit labels - ,"-gnatyf" -- No form feeds or vertical tabs - ,"-gnatyh" -- No horizontal tabs - ,"-gnatyi" -- Check if-then layout - ,"-gnatyI" -- check mode IN keywords - ,"-gnatyk" -- Check keyword casing - ,"-gnatyl" -- Check layout - ,"-gnatym" -- Check maximum line length - ,"-gnatyn" -- Check casing of entities in Standard - ,"-gnatyO" -- Check that overriding subprograms are explicitly marked as such - ,"-gnatyp" -- Check pragma casing - ,"-gnatyr" -- Check identifier references casing - ,"-gnatyS" -- Check no statements after THEN/ELSE - ,"-gnatyt" -- Check token spacing - ,"-gnatyu" -- Check unnecessary blank lines - ,"-gnatyx" -- Check extra parentheses ,"-gnatW8" -- UTF-8 encoding for wide characters ); diff --git a/aaa_base/tests/config/aaa_tests_config.h b/aaa_base/tests/config/aaa_tests_config.h index cab4378..5b12c03 100644 --- a/aaa_base/tests/config/aaa_tests_config.h +++ b/aaa_base/tests/config/aaa_tests_config.h @@ -9,7 +9,7 @@ #define ALIRE_HOST_ARCH "x86_64" -#define ALIRE_HOST_DISTRO "ubuntu" +#define ALIRE_HOST_DISTRO "suse" #define BUILD_PROFILE_RELEASE 1 #define BUILD_PROFILE_VALIDATION 2 diff --git a/aaa_base/tests/config/aaa_tests_list_config.gpr b/aaa_base/tests/config/aaa_tests_list_config.gpr index 635793b..1ac43fb 100644 --- a/aaa_base/tests/config/aaa_tests_list_config.gpr +++ b/aaa_base/tests/config/aaa_tests_list_config.gpr @@ -1,6 +1,7 @@ abstract project Aaa_Tests_List_Config is Test_Files := ( "aaa_tests-strings-check_vector_equality.adb" + ,"aaa_tests-strings-flatten.adb" ,"aaa_tests-strings-vector_diffs.adb" ); end Aaa_Tests_List_Config; diff --git a/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb b/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb index 57c4dd1..9f5ee40 100644 --- a/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb +++ b/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb @@ -1,5 +1,7 @@ pragma Style_Checks ("-gnatM120"); +pragma Alire_Test; + with AAA.Strings; use AAA.Strings; procedure Aaa_Tests.Strings.Check_Vector_Equality is diff --git a/aaa_base/tests/src/aaa_tests-strings-flatten.adb b/aaa_base/tests/src/aaa_tests-strings-flatten.adb new file mode 100644 index 0000000..1e0e5d8 --- /dev/null +++ b/aaa_base/tests/src/aaa_tests-strings-flatten.adb @@ -0,0 +1,87 @@ +with AAA.Strings; use AAA.Strings; + +pragma Alire_Test; + +pragma Style_Checks ("-gnatM120"); + +procedure Aaa_Tests.Strings.Flatten is + + procedure Check (V : AAA.Strings.Vector; + Expected : String; + Sep : String := " ") + is + Result : constant String := V.Flatten (Sep); + begin + Assert (Result = Expected, + "Flatten (Sep => """ & Sep & """): expected """ & + Expected & """ but got """ & Result & """"); + end Check; + + procedure Check (V : AAA.Strings.Vector; + Expected : String; + Sep : Character) + is + Result : constant String := V.Flatten (Sep); + begin + Assert (Result = Expected, + "Flatten (Sep => '" & Sep & "'): expected """ & + Expected & """ but got """ & Result & """"); + end Check; + + One : constant AAA.Strings.Vector := Empty_Vector.Append ("A"); + Three : constant AAA.Strings.Vector := + Empty_Vector.Append ("A").Append ("B").Append ("C"); + +begin + + -- Empty vector: default separator + + Check (Empty_Vector, ""); + + -- Empty vector: explicit multi-char separator + + Check (Empty_Vector, "", Sep => ", "); + + -- Empty vector: character separator + + Check (Empty_Vector, "", Sep => ASCII.LF); + + -- Single element: separator is never inserted + + Check (One, "A"); + Check (One, "A", Sep => ", "); + Check (One, "A", Sep => ASCII.LF); + + -- Several elements: default separator (single space) + + Check (Three, "A B C"); + + -- Several elements: explicit multi-char string separator + + Check (Three, "A, B, C", Sep => ", "); + + -- Several elements: empty separator simply concatenates + + Check (Three, "ABC", Sep => ""); + + -- Several elements: character separator + + Check (Three, "A" & ASCII.LF & "B" & ASCII.LF & "C", Sep => ASCII.LF); + + -- Elements that are themselves empty strings + + Check (Empty_Vector.Append ("").Append ("").Append (""), + " ", -- two single-space separators, no other content + Sep => " "); + + Check (Empty_Vector.Append ("A").Append ("").Append ("B"), + "A--B", + Sep => "-"); + + -- Elements containing the separator itself are not treated specially + + Check (Empty_Vector.Append ("A,B").Append ("C"), + "A,B,C", + Sep => ","); + +end Aaa_Tests.Strings.Flatten; diff --git a/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb b/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb index de1ed03..9263b76 100644 --- a/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb +++ b/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb @@ -1,5 +1,7 @@ with AAA.Strings; use AAA.Strings; +pragma Alire_Test; + pragma Style_Checks ("-gnatM120"); procedure Aaa_Tests.Strings.Vector_Diffs is From 2e37b2f5522da49da0447fa14fdc9eb835ac6347 Mon Sep 17 00:00:00 2001 From: "Alejandro R. Mosteo" Date: Wed, 8 Jul 2026 16:56:31 +0200 Subject: [PATCH 3/6] Ignore pragma --- aaa_base/tests/common/aaa_tests.ads | 4 ++-- aaa_base/tests/src/aaa_tests-strings-flatten.adb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/aaa_base/tests/common/aaa_tests.ads b/aaa_base/tests/common/aaa_tests.ads index 91bb08e..f1fadb3 100644 --- a/aaa_base/tests/common/aaa_tests.ads +++ b/aaa_base/tests/common/aaa_tests.ads @@ -1,6 +1,6 @@ -package Aaa_Tests is +pragma Ignore_Pragma (Alire_Test); - pragma Ignore_Pragma (Alire_Test); +package Aaa_Tests is procedure Assert (Cond : Boolean; Text : String); diff --git a/aaa_base/tests/src/aaa_tests-strings-flatten.adb b/aaa_base/tests/src/aaa_tests-strings-flatten.adb index 1e0e5d8..8c82b8c 100644 --- a/aaa_base/tests/src/aaa_tests-strings-flatten.adb +++ b/aaa_base/tests/src/aaa_tests-strings-flatten.adb @@ -1,5 +1,6 @@ with AAA.Strings; use AAA.Strings; +pragma Ignore_Pragma (Alire_Test); pragma Alire_Test; pragma Style_Checks ("-gnatM120"); From a4ee4059fe85ff53c9ea05d044384abbd0ec018a Mon Sep 17 00:00:00 2001 From: "Alejandro R. Mosteo" Date: Wed, 8 Jul 2026 17:00:09 +0200 Subject: [PATCH 4/6] Fix pragmas and builds --- .github/workflows/build.yml | 23 +++++++++++-------- ...aa_tests-strings-check_vector_equality.adb | 2 +- .../tests/src/aaa_tests-strings-flatten.adb | 3 +-- .../src/aaa_tests-strings-vector_diffs.adb | 2 +- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 383e264..0086ca7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,18 +27,23 @@ jobs: matrix: combo: # Test an assorment of representative combinations - os: macos-13 - gnat: 13 + gnat: ^13 - os: macos-latest - gnat: 14 + gnat: ^14 - os: ubuntu-22.04 - gnat: 10 + gnat: ^10 - os: ubuntu-latest - gnat: 12 - # Waiting for indexed compiler - # - os: ubuntu-24.04-arm - # gnat: 14 + gnat: ^12 + - os: ubuntu-24.04-arm + gnat: ^14 - os: windows-latest - gnat: 11 + gnat: ^11 + - os: ubuntu-latest + gnat: # latest + - os: macos-latest + gnat: # latest + - os: windows-latest + gnat: # latest runs-on: ${{ matrix.combo.os }} @@ -50,7 +55,7 @@ jobs: uses: alire-project/setup-alire@v4 with: version: nightly # for [test] - toolchain: gnat_native^${{ matrix.combo.gnat }} gprbuild + toolchain: gnat_native${{ matrix.combo.gnat }} gprbuild - name: Build if: ${{inputs.build}} diff --git a/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb b/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb index 9f5ee40..8299326 100644 --- a/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb +++ b/aaa_base/tests/src/aaa_tests-strings-check_vector_equality.adb @@ -1,6 +1,6 @@ pragma Style_Checks ("-gnatM120"); -pragma Alire_Test; +pragma Alire_Test (Should_Fail, False); with AAA.Strings; use AAA.Strings; diff --git a/aaa_base/tests/src/aaa_tests-strings-flatten.adb b/aaa_base/tests/src/aaa_tests-strings-flatten.adb index 8c82b8c..b62406d 100644 --- a/aaa_base/tests/src/aaa_tests-strings-flatten.adb +++ b/aaa_base/tests/src/aaa_tests-strings-flatten.adb @@ -1,7 +1,6 @@ with AAA.Strings; use AAA.Strings; -pragma Ignore_Pragma (Alire_Test); -pragma Alire_Test; +pragma Alire_Test (Should_Fail, False); pragma Style_Checks ("-gnatM120"); diff --git a/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb b/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb index 9263b76..014187e 100644 --- a/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb +++ b/aaa_base/tests/src/aaa_tests-strings-vector_diffs.adb @@ -1,6 +1,6 @@ with AAA.Strings; use AAA.Strings; -pragma Alire_Test; +pragma Alire_Test (Should_Fail, False); pragma Style_Checks ("-gnatM120"); From 2e851dff63fa608106874a5ff9ec9c6a5db27b40 Mon Sep 17 00:00:00 2001 From: "Alejandro R. Mosteo" Date: Wed, 8 Jul 2026 17:01:48 +0200 Subject: [PATCH 5/6] Abort previous workflow runs --- .github/workflows/build_aaa.yml | 4 ++++ .github/workflows/build_aaa_texts.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/build_aaa.yml b/.github/workflows/build_aaa.yml index 2d933bc..6fa0965 100644 --- a/.github/workflows/build_aaa.yml +++ b/.github/workflows/build_aaa.yml @@ -6,6 +6,10 @@ on: pull_request: workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: check: uses: ./.github/workflows/build.yml diff --git a/.github/workflows/build_aaa_texts.yml b/.github/workflows/build_aaa_texts.yml index 5d08ecb..0f885ac 100644 --- a/.github/workflows/build_aaa_texts.yml +++ b/.github/workflows/build_aaa_texts.yml @@ -6,6 +6,10 @@ on: pull_request: workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: check: uses: ./.github/workflows/build.yml From 949331ac653c923f5666a568f247e4fe75dc1c4b Mon Sep 17 00:00:00 2001 From: "Alejandro R. Mosteo" Date: Thu, 9 Jul 2026 12:43:25 +0200 Subject: [PATCH 6/6] Fix OS combos --- .github/workflows/build.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0086ca7..3459afc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,18 +26,8 @@ jobs: fail-fast: false matrix: combo: # Test an assorment of representative combinations - - os: macos-13 - gnat: ^13 - - os: macos-latest - gnat: ^14 - - os: ubuntu-22.04 - gnat: ^10 - - os: ubuntu-latest - gnat: ^12 - os: ubuntu-24.04-arm - gnat: ^14 - - os: windows-latest - gnat: ^11 + gnat: # latest - os: ubuntu-latest gnat: # latest - os: macos-latest @@ -52,7 +42,7 @@ jobs: uses: actions/checkout@v2 - name: Set up Alire and toolchain - uses: alire-project/setup-alire@v4 + uses: alire-project/setup-alire@v6 with: version: nightly # for [test] toolchain: gnat_native${{ matrix.combo.gnat }} gprbuild