Skip to content
  •  
  •  
  •  
5 changes: 2 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ on:
- dev
- boilerplate
- idiomatic
- update.3
- update.4
- ace
- test-consistency
- test-coverage
- rc1
- rc2
- rc3
Expand Down
16 changes: 16 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
# STLSoft - CHANGES <!-- omit in toc -->


## 1.11.1-rc6 - 9th August 2026

* **Test coverage expansion (1.11.2 increment)** — comprehensive unit- and component-test suites across all sub-projects; **~640 new** test programs (from **86** to **~708** buildable on Unix/macOS);
* **ACESTL** — full unit + component coverage (`shims`, `memory/message_block_functions`, `collections/message_queue_sequence`, `network/socket_functions`, `reactor/custom_event_handler`, …); gated on **`HAS_ACE`**;
* **ATLSTL** — **11** unit tests; **`DEFERRED.md`** documents skipped GUI/`module_scope` components;
* **MFCSTL** — **21** new unit tests (collections, shims, string, util);
* **COMSTL** — **27** unit + **1** component (`rot_functions`); **`SKIPPED.md`** for SAPI/typelib/cross-apartment cases;
* **INETSTL** — exception, filesystem traits/functionals, network session/connection (WinInet sequences intentionally excluded);
* **UnixSTL** — **56** tests (full public API);
* **PlatformSTL** — **53** tests (full public API);
* **WinSTL** — **~200** tests (unit + component; GUI/interactive scopes excluded);
* **STLSoft** — **~300** unit + **~13** component tests for substantive components (`meta/`, `obsolete/`, `internal/` excluded);
* Test infrastructure scripts under **`test/scripts/`** (`scaffold_missing_tests.py`, `generate_*_tests.py`, `fix_failed_tests.py`, …);
* **`test.unit.versions`** — aligned with **1.11.1-rc6** (**`_STLSOFT_VER_1_11_1_RC6`**);


## 1.11.1-rc5 - 9th August 2026

* Fixed `stlsoft::basic_simple_string<>#resize()` — expanding a non-empty string no longer over-reads the source buffer (MinGW unit-test segfault in **test.unit.stlsoft.string.simple_string**);
Expand Down
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

| Date | News Item |
| --------------------- | --------------------------------------------------------- |
| 9th August 2026 | Release of [STLSoft 1.11.1 (release candidate 6)](https://github.com/synesissoftware/STLSoft/releases/tag/1.11.1-rc6) — comprehensive unit/component test coverage across all sub-projects |
| 9th August 2026 | Release of [STLSoft 1.11.1 (release candidate 5)](https://github.com/synesissoftware/STLSoft/releases/tag/1.11.1-rc5) |
| 29th July 2026 | Release of [STLSoft 1.11.1 (release candidate 4)](https://github.com/synesissoftware/STLSoft/releases/tag/1.11.1-rc4) |
| 23rd August 2025 | Release of [STLSoft 1.11.1 (release candidate 3)](https://github.com/synesissoftware/STLSoft/releases/tag/1.11.1-rc3) |
Expand Down
1,099 changes: 1,099 additions & 0 deletions TESTING.md

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,19 @@
* [x] ~~~Unit/component tests — adopt **xTests** terse API throughout~~~;
* [ ] Remove **WTL**;
* [ ] Resolve finally the structure and semantics of the top-level execution scripts (**run_all_unit_tests.sh**, **run_all_scratch_tests.sh**, **run_all_examples.sh**, **execute_performance_tests.sh**, and Windows `.cmd` counterparts) on all platforms — discovery globs, execute-bit / artifact restore, zero-match failure, verbosity, and CI wiring;
* [ ] bring in some essential unit-tests from interal repo;
* [ ] bring in some essential unit-tests from internal repo;


### 1.11.2

Dedicated increment: **test analysis and coverage only** — no other product changes in this release.

* [ ] Existing test consistency (deep analysis);
* [x] Coverage of currently untested components — **bulk expansion landed in 1.11.1-rc6** (~640 new test programs);
* [ ] Existing test consistency (deep analysis) — many new tests are compile-verified or smoke-level; behavioural depth still to be improved;
* [ ] Complete coverage of currently tested components (improvement / completion);
* [ ] Coverage of currently untested components;

* [ ] WinSTL / COMSTL / ATLSTL / MFCSTL — Windows CI verification of new suites;
* [ ] STLSoft — deepen behavioural tests for the ~100 compile-only scaffolds; remove or fix vestigial targets;
* [ ] Correct/ensure (and write coding guidelines for) test-function naming;

### 1.11.3

Expand Down
6 changes: 4 additions & 2 deletions include/stlsoft/stlsoft.h
Original file line number Diff line number Diff line change
Expand Up @@ -390,12 +390,14 @@
# define _STLSOFT_VER_1_11_1_RC3 0x010b01c3 /*!< Version 1.11.1 rc 3 (23rd August 2025) */
# define _STLSOFT_VER_1_11_1_RC4 0x010b01c4 /*!< Version 1.11.1 rc 4 (1st July 2026) */
# define _STLSOFT_VER_1_11_1_RC5 0x010b01c5 /*!< Version 1.11.1 rc 5 (9th August 2026) */
# define _STLSOFT_VER_1_11_1_RC6 0x010b01c6 /*!< Version 1.11.1 rc 6 (9th August 2026) */
# define _STLSOFT_VER_1_11_2_A1 0x010b0241 /*!< Version 1.11.2 alpha 1 (9th August 2026) */
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

#define _STLSOFT_VER_MAJOR 1
#define _STLSOFT_VER_MINOR 11
#define _STLSOFT_VER_PATCH 1
#define _STLSOFT_VER_ALPHABETA 0xc5
#define _STLSOFT_VER_PATCH 2
#define _STLSOFT_VER_ALPHABETA 0x41

#define _STLSOFT_VER \
(0\
Expand Down
10 changes: 5 additions & 5 deletions include/unixstl/filesystem/filesystem_traits.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* Unicode specialisations thereof.
*
* Created: 15th November 2002
* Updated: 6th May 2025
* Updated: 9th August 2026
*
* Thanks: To Sergey Nikulov, for spotting a preprocessor typo that broke
* GCC -pedantic; to Michal Makowski and Zar Eindl for reporting
Expand All @@ -14,7 +14,7 @@
*
* Home: http://stlsoft.org/
*
* Copyright (c) 2019-2025, Matthew Wilson and Synesis Information Systems
* Copyright (c) 2019-2026, Matthew Wilson and Synesis Information Systems
* Copyright (c) 2002-2019, Matthew Wilson and Synesis Software
* All rights reserved.
*
Expand Down Expand Up @@ -60,8 +60,8 @@
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
# define UNIXSTL_VER_UNIXSTL_FILESYSTEM_HPP_FILESYSTEM_TRAITS_MAJOR 4
# define UNIXSTL_VER_UNIXSTL_FILESYSTEM_HPP_FILESYSTEM_TRAITS_MINOR 16
# define UNIXSTL_VER_UNIXSTL_FILESYSTEM_HPP_FILESYSTEM_TRAITS_REVISION 1
# define UNIXSTL_VER_UNIXSTL_FILESYSTEM_HPP_FILESYSTEM_TRAITS_EDIT 188
# define UNIXSTL_VER_UNIXSTL_FILESYSTEM_HPP_FILESYSTEM_TRAITS_REVISION 2
# define UNIXSTL_VER_UNIXSTL_FILESYSTEM_HPP_FILESYSTEM_TRAITS_EDIT 189
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */


Expand Down Expand Up @@ -1726,7 +1726,7 @@ struct filesystem_traits<us_char_a_t>
}

private:
#if _STLSOFT_VER >= 0x010b01ff
#if _STLSOFT_VER >= 0x010b02ff

# error Sort get_root_len_() properly
#endif
Expand Down
5 changes: 5 additions & 0 deletions test/component/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@

if(HAS_ACE)

add_subdirectory(acestl)
endif(HAS_ACE)
if(_BUILD_AS_UNIX OR _BUILD_AS_WIN32)

add_subdirectory(inetstl)
Expand All @@ -9,6 +13,7 @@ if(_BUILD_AS_UNIX)
add_subdirectory(unixstl)
endif(_BUILD_AS_UNIX)
if(_BUILD_AS_WIN32)
add_subdirectory(comstl)
add_subdirectory(winstl)
endif(_BUILD_AS_WIN32)

Expand Down
7 changes: 7 additions & 0 deletions test/component/acestl/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
add_subdirectory(collections)
add_subdirectory(network)
add_subdirectory(reactor)
add_subdirectory(shims)


# ############################## end of file ############################# #
4 changes: 4 additions & 0 deletions test/component/acestl/collections/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
add_subdirectory(test.component.acestl.collections.message_queue_sequence)


# ############################## end of file ############################# #
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
define_automated_test_program(test.component.acestl.collections.message_queue_sequence entry.cpp)

target_link_libraries(test.component.acestl.collections.message_queue_sequence
ACE::ACE
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
/* /////////////////////////////////////////////////////////////////////////
* File: test.component.acestl.collections.message_queue_sequence/entry.cpp
*
* Purpose: Component-tests for `acestl::message_queue_sequence`.
*
* Created: 9th August 2026
* Updated: 9th August 2026
* Note: Auto-generated on 9th August 2026 (test initiative); regenerate via test/scripts/ rather than hand-editing layout.
*
* ////////////////////////////////////////////////////////////////////// */



/* /////////////////////////////////////////////////////////////////////////
* includes
*/

#include <acestl/collections/message_queue_sequence.hpp>
#include <xtests/xtests.h>
#include <xtests/terse-api.h>
#include <stlsoft/memory/auto_buffer.hpp>
#include <stlsoft/stlsoft.h>
#include <ace/Message_Queue.h>
#include <ace/Synch_Traits.h>
#include <algorithm>
#include <stdlib.h>
#include <string.h>


/* /////////////////////////////////////////////////////////////////////////
* forward declarations
*/

namespace {

static void TEST_empty_sequence(void);
static void TEST_copy_sequence(void);
} // anonymous namespace


/* /////////////////////////////////////////////////////////////////////////
* main()
*/

int main(int argc, char* argv[])
{
int retCode = EXIT_SUCCESS;
int verbosity = 2;

XTESTS_COMMANDLINE_PARSEVERBOSITY(argc, argv, &verbosity);

if (XTESTS_START_RUNNER("test.component.acestl.collections.message_queue_sequence", verbosity))
{
XTESTS_RUN_CASE(TEST_empty_sequence);
XTESTS_RUN_CASE(TEST_copy_sequence);

XTESTS_PRINT_RESULTS();

XTESTS_END_RUNNER_UPDATE_EXITCODE(&retCode);
}

return retCode;
}


/* /////////////////////////////////////////////////////////////////////////
* names
*/

namespace {

typedef ACE_Message_Queue<ACE_SYNCH> queue_type;
typedef acestl::message_queue_sequence<ACE_SYNCH> sequence_type;
} // anonymous namespace


/* /////////////////////////////////////////////////////////////////////////
* test function implementations
*/

namespace {

static void TEST_empty_sequence()
{
queue_type q;
sequence_type mqs(q);

TEST_INT_EQ(0u, mqs.size());
TEST_BOOLEAN_TRUE(mqs.empty());
TEST_BOOLEAN_TRUE(mqs.begin() == mqs.end());
}

static void TEST_copy_sequence()
{
char const payload[] = "message-queue-sequence";
queue_type q;
ACE_Message_Block *pmb = new ACE_Message_Block(STLSOFT_NUM_ELEMENTS(payload));

STLSOFT_API_EXTERNAL_memfns_memcpy(pmb->wr_ptr(), payload, STLSOFT_NUM_ELEMENTS(payload));
pmb->wr_ptr(STLSOFT_NUM_ELEMENTS(payload));

TEST_INT_EQ(0, q.enqueue(pmb));

sequence_type mqs(q);

TEST_INT_EQ(STLSOFT_NUM_ELEMENTS(payload), mqs.size());
TEST_BOOLEAN_FALSE(mqs.empty());

stlsoft::auto_buffer<char> buff(mqs.size());

std::copy(mqs.begin(), mqs.end(), &buff[0]);

TEST_MS_EQ(payload, &buff[0]);

ACE_Message_Block *pdeq = NULL;

TEST_INT_EQ(0, q.dequeue(pdeq));
TEST_PTR_NE(NULL, pdeq);

pdeq->release();
}
} // anonymous namespace


/* ///////////////////////////// end of file //////////////////////////// */
4 changes: 4 additions & 0 deletions test/component/acestl/network/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
add_subdirectory(test.component.acestl.network.socket_functions)


# ############################## end of file ############################# #
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
define_automated_test_program(test.component.acestl.network.socket_functions entry.cpp)

target_link_libraries(test.component.acestl.network.socket_functions
ACE::ACE
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/* /////////////////////////////////////////////////////////////////////////
* File: test.component.acestl.network.socket_functions/entry.cpp
*
* Purpose: Component-tests for `acestl::close_and_deregister`.
*
* Created: 9th August 2026
* Updated: 9th August 2026
* Note: Auto-generated on 9th August 2026 (test initiative); regenerate via test/scripts/ rather than hand-editing layout.
*
* ////////////////////////////////////////////////////////////////////// */



/* /////////////////////////////////////////////////////////////////////////
* includes
*/

#include <acestl/network/socket_functions.hpp>
#include <xtests/xtests.h>
#include <xtests/terse-api.h>
#include <stlsoft/stlsoft.h>
#include <ace/Reactor.h>
#include <ace/SOCK_Stream.h>
#include <stdlib.h>


/* /////////////////////////////////////////////////////////////////////////
* forward declarations
*/

namespace {

static void TEST_close_and_deregister_invalid_handle(void);
static void TEST_close_and_deregister_open_socket(void);
} // anonymous namespace


/* /////////////////////////////////////////////////////////////////////////
* main()
*/

int main(int argc, char* argv[])
{
int retCode = EXIT_SUCCESS;
int verbosity = 2;

XTESTS_COMMANDLINE_PARSEVERBOSITY(argc, argv, &verbosity);

if (XTESTS_START_RUNNER("test.component.acestl.network.socket_functions", verbosity))
{
XTESTS_RUN_CASE(TEST_close_and_deregister_invalid_handle);
XTESTS_RUN_CASE(TEST_close_and_deregister_open_socket);

XTESTS_PRINT_RESULTS();

XTESTS_END_RUNNER_UPDATE_EXITCODE(&retCode);
}

return retCode;
}


/* /////////////////////////////////////////////////////////////////////////
* test function implementations
*/

namespace {

static void TEST_close_and_deregister_invalid_handle()
{
ACE_SOCK_Stream sk;

TEST_BOOLEAN_FALSE(acestl::close_and_deregister(sk, NULL));
}

static void TEST_close_and_deregister_open_socket()
{
ACE_SOCK_Stream sk;

TEST_INT_EQ(0, sk.open());

TEST_BOOLEAN_TRUE(acestl::close_and_deregister(sk, NULL));
TEST_BOOLEAN_FALSE(acestl::close_and_deregister(sk, NULL));
}
} // anonymous namespace


/* ///////////////////////////// end of file //////////////////////////// */
4 changes: 4 additions & 0 deletions test/component/acestl/reactor/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
add_subdirectory(test.component.acestl.reactor.custom_event_handler)


# ############################## end of file ############################# #
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
define_automated_test_program(test.component.acestl.reactor.custom_event_handler entry.cpp)

target_link_libraries(test.component.acestl.reactor.custom_event_handler
ACE::ACE
)
Loading
Loading