pw_unit_test: Make framework memory pool size configurable

Tested: Configured value on sh build, size of bundle changed.
Change-Id: Iac834fbf8bef078fd9b2ddd6207831c5d467519b
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/45440
Commit-Queue: Max Koopman <koopman@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
diff --git a/pw_unit_test/BUILD b/pw_unit_test/BUILD
index 99c9eec..312efde 100644
--- a/pw_unit_test/BUILD
+++ b/pw_unit_test/BUILD
@@ -23,6 +23,12 @@
 licenses(["notice"])  # Apache License 2.0
 
 pw_cc_library(
+    name = "config",
+    hdrs = ["public/pw_unit_test/config.h"],
+    includes = ["public"],
+)
+
+pw_cc_library(
     name = "pw_unit_test",
     srcs = [
         "framework.cc",
@@ -37,6 +43,7 @@
         "public_overrides",
     ],
     deps = [
+        ":config",
         "//pw_polyfill",
         "//pw_preprocessor",
         "//pw_string",
diff --git a/pw_unit_test/BUILD.gn b/pw_unit_test/BUILD.gn
index aa80fb9..2f36f7b 100644
--- a/pw_unit_test/BUILD.gn
+++ b/pw_unit_test/BUILD.gn
@@ -14,11 +14,19 @@
 
 import("//build_overrides/pigweed.gni")
 
+import("$dir_pw_build/module_config.gni")
 import("$dir_pw_build/target_types.gni")
 import("$dir_pw_docgen/docs.gni")
 import("$dir_pw_protobuf_compiler/proto.gni")
 import("$dir_pw_unit_test/test.gni")
 
+declare_args() {
+  # The build target that overrides the default configuration options for this
+  # module. This should point to a source set that provides defines through a
+  # public config (which may -include a file or add defines directly).
+  pw_unit_test_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
+}
+
 config("default_config") {
   include_dirs = [
     "public",
@@ -26,10 +34,21 @@
   ]
 }
 
+pw_source_set("config") {
+  public = [ "public/pw_unit_test/config.h" ]
+  public_configs = [ ":default_config" ]
+  public_deps = [
+    dir_pw_polyfill,
+    pw_unit_test_CONFIG,
+  ]
+  visibility = [ ":*" ]
+}
+
 # pw_unit_test core library.
 pw_source_set("pw_unit_test") {
   public_configs = [ ":default_config" ]
   public_deps = [
+    ":config",
     dir_pw_polyfill,
     dir_pw_preprocessor,
     dir_pw_string,
diff --git a/pw_unit_test/docs.rst b/pw_unit_test/docs.rst
index ac16271..e2fd02d 100644
--- a/pw_unit_test/docs.rst
+++ b/pw_unit_test/docs.rst
@@ -288,3 +288,13 @@
 ^^^^^^^^^^^^^^^^
 .. automodule:: pw_unit_test.rpc
   :members: EventHandler, run_tests
+
+Module Configuration Options
+============================
+The following configurations can be adjusted via compile-time configuration of
+this module.
+
+.. c:macro:: PW_UNIT_TEST_CONFIG_MEMORY_POOL_SIZE
+
+  The size of the memory pool to use for test fixture instances. By default this
+  is set to 16K.
diff --git a/pw_unit_test/public/pw_unit_test/config.h b/pw_unit_test/public/pw_unit_test/config.h
new file mode 100644
index 0000000..acdffd4
--- /dev/null
+++ b/pw_unit_test/public/pw_unit_test/config.h
@@ -0,0 +1,35 @@
+// Copyright 2021 The Pigweed Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+// Configuration macros for the unit test module.
+#pragma once
+
+#include <cstddef>
+
+#include "pw_polyfill/language_feature_macros.h"
+
+#ifndef PW_UNIT_TEST_CONFIG_MEMORY_POOL_SIZE
+#define PW_UNIT_TEST_CONFIG_MEMORY_POOL_SIZE 16384
+#endif  // PW_UNIT_TEST_CONFIG_MEMORY_POOL_SIZE
+
+namespace pw {
+namespace unit_test {
+namespace config {
+
+PW_INLINE_VARIABLE constexpr size_t kMemoryPoolSize =
+    PW_UNIT_TEST_CONFIG_MEMORY_POOL_SIZE;
+
+}  // namespace config
+}  // namespace unit_test
+}  // namespace pw
diff --git a/pw_unit_test/public/pw_unit_test/framework.h b/pw_unit_test/public/pw_unit_test/framework.h
index 959cef8..6ba5d94 100644
--- a/pw_unit_test/public/pw_unit_test/framework.h
+++ b/pw_unit_test/public/pw_unit_test/framework.h
@@ -26,6 +26,7 @@
 #include "pw_polyfill/standard.h"
 #include "pw_preprocessor/concat.h"
 #include "pw_preprocessor/util.h"
+#include "pw_unit_test/config.h"
 #include "pw_unit_test/event_handler.h"
 
 #if PW_CXX_STANDARD_IS_SUPPORTED(17)
@@ -300,10 +301,7 @@
   std::span<std::string_view> test_suites_to_run_;
 #endif  // PW_CXX_STANDARD_IS_SUPPORTED(17)
 
-  // Memory region in which to construct test case classes as they are run.
-  // TODO(frolv): Make the memory pool size configurable.
-  static constexpr size_t kTestMemoryPoolSizeBytes = 16384;
-  std::aligned_storage_t<kTestMemoryPoolSizeBytes, alignof(std::max_align_t)>
+  std::aligned_storage_t<config::kMemoryPoolSize, alignof(std::max_align_t)>
       memory_pool_;
 };