Add SHARD_COUNT support and default COST prioritization to absl_cc_test.

Adds optional SHARD_COUNT support to absl_cc_test() in AbseilHelpers.cmake by registering N separate CTest tests with GTEST_TOTAL_SHARDS and GTEST_SHARD_INDEX environment variables, and assigns a higher CTest COST property (100) to sharded tests so CTest schedules them first during parallel test execution.

Also aligns SHARD_COUNT in CMakeLists.txt with shard_count in Bazel BUILD files:
- Propagates existing Bazel shard_count values (btree_test, btree_instantiate_test, crc_memcpy_test, sequence_lock_test, mutex_test) to CMakeLists.txt.
- Adds 4-way sharding in both BUILD and CMakeLists.txt for the remaining slowest tests identified by test suite profiling (long-running CPU/template tests such as raw_hash_set_test, hash_test, cord*_test, str_format_convert_test, and random distribution tests; sleep-bound tests such as waiter_test and simulated_clock_test; and death-test-heavy check tests) to reduce critical-path test latency in both Bazel and CTest.

PiperOrigin-RevId: 1001308801
diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake
index 61e1ae4..271e5ba 100644
--- a/CMake/AbseilHelpers.cmake
+++ b/CMake/AbseilHelpers.cmake
@@ -372,6 +372,7 @@
 # COPTS: List of private compile options
 # DEFINES: List of public defines
 # LINKOPTS: List of link options
+# SHARD_COUNT: Number of shards to split the test into for ctest
 #
 # Note:
 # By default, absl_cc_test will always create a binary named absl_${NAME}.
@@ -405,7 +406,7 @@
 
   cmake_parse_arguments(ABSL_CC_TEST
     ""
-    "NAME"
+    "NAME;SHARD_COUNT"
     "SRCS;COPTS;DEFINES;LINKOPTS;DEPS"
     ${ARGN}
   )
@@ -461,5 +462,16 @@
     target_compile_features(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE})
   endif()
 
-  add_test(NAME ${_NAME} COMMAND ${_NAME})
+  if(ABSL_CC_TEST_SHARD_COUNT AND ABSL_CC_TEST_SHARD_COUNT GREATER 1)
+    math(EXPR _LAST_SHARD "${ABSL_CC_TEST_SHARD_COUNT} - 1")
+    foreach(_SHARD RANGE 0 ${_LAST_SHARD})
+      add_test(NAME "${_NAME}_shard_${_SHARD}" COMMAND ${_NAME})
+      set_tests_properties("${_NAME}_shard_${_SHARD}" PROPERTIES
+        ENVIRONMENT "GTEST_TOTAL_SHARDS=${ABSL_CC_TEST_SHARD_COUNT};GTEST_SHARD_INDEX=${_SHARD}"
+        COST 100
+      )
+    endforeach()
+  else()
+    add_test(NAME ${_NAME} COMMAND ${_NAME})
+  endif()
 endfunction()
diff --git a/absl/base/BUILD.bazel b/absl/base/BUILD.bazel
index 749c54f..2ee5c2b 100644
--- a/absl/base/BUILD.bazel
+++ b/absl/base/BUILD.bazel
@@ -565,6 +565,7 @@
     srcs = ["spinlock_test_common.cc"],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     tags = [
         "no_test_wasm",
     ],
diff --git a/absl/base/CMakeLists.txt b/absl/base/CMakeLists.txt
index 2f8846f..5325df7 100644
--- a/absl/base/CMakeLists.txt
+++ b/absl/base/CMakeLists.txt
@@ -533,6 +533,8 @@
     absl::core_headers
     absl::synchronization
     GTest::gtest_main
+  SHARD_COUNT
+    4
 )
 
 # Internal-only target, do not depend on directly.
diff --git a/absl/container/BUILD.bazel b/absl/container/BUILD.bazel
index 850eaec..7792be0 100644
--- a/absl/container/BUILD.bazel
+++ b/absl/container/BUILD.bazel
@@ -845,6 +845,7 @@
     srcs = ["internal/raw_hash_set_test.cc"],
     copts = ABSL_TEST_COPTS,
     linkstatic = 1,
+    shard_count = 4,
     tags = NOTEST_TAGS_MOBILE + [
         "no_test_chromiumos_arm",
         "no_test_chromiumos_armv7",
diff --git a/absl/container/CMakeLists.txt b/absl/container/CMakeLists.txt
index 7a2641c..0c07fed 100644
--- a/absl/container/CMakeLists.txt
+++ b/absl/container/CMakeLists.txt
@@ -87,6 +87,8 @@
     absl::test_allocator
     absl::test_instance_tracker
     GTest::gmock_main
+  SHARD_COUNT
+    10
 )
 
 absl_cc_test(
@@ -106,6 +108,8 @@
     absl::flags
     absl::raw_logging_internal
     GTest::gmock_main
+  SHARD_COUNT
+    10
 )
 
 # Internal-only target, do not depend on directly.
@@ -871,6 +875,8 @@
     absl::test_instance_tracker
     absl::type_traits
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 # Internal-only target, do not depend on directly.
diff --git a/absl/crc/CMakeLists.txt b/absl/crc/CMakeLists.txt
index fb9beea..e50b242 100644
--- a/absl/crc/CMakeLists.txt
+++ b/absl/crc/CMakeLists.txt
@@ -122,6 +122,8 @@
     absl::string_view
     absl::strings
     GTest::gtest_main
+  SHARD_COUNT
+    3
 )
 
 absl_cc_test(
diff --git a/absl/flags/CMakeLists.txt b/absl/flags/CMakeLists.txt
index 0e40085..162b654 100644
--- a/absl/flags/CMakeLists.txt
+++ b/absl/flags/CMakeLists.txt
@@ -455,6 +455,8 @@
     absl::flags_internal
     absl::time
     GTest::gmock_main
+  SHARD_COUNT
+    31
 )
 
 absl_cc_test(
diff --git a/absl/hash/BUILD.bazel b/absl/hash/BUILD.bazel
index fe76a1d..010668d 100644
--- a/absl/hash/BUILD.bazel
+++ b/absl/hash/BUILD.bazel
@@ -89,6 +89,7 @@
     ],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     deps = [
         ":hash",
         ":hash_testing",
diff --git a/absl/hash/CMakeLists.txt b/absl/hash/CMakeLists.txt
index 2ced4b1..f8e7afa 100644
--- a/absl/hash/CMakeLists.txt
+++ b/absl/hash/CMakeLists.txt
@@ -78,6 +78,8 @@
     absl::string_view
     absl::strings
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
diff --git a/absl/log/BUILD.bazel b/absl/log/BUILD.bazel
index 2c0a8ff..3e15e0b 100644
--- a/absl/log/BUILD.bazel
+++ b/absl/log/BUILD.bazel
@@ -315,6 +315,7 @@
     srcs = ["absl_check_test.cc"],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     tags = [
         "no_test:os:ios",
         "no_test_ios",
@@ -350,6 +351,7 @@
     srcs = ["check_test.cc"],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     tags = [
         "no_test:os:ios",
         "no_test_ios",
diff --git a/absl/log/CMakeLists.txt b/absl/log/CMakeLists.txt
index ebc24f3..1da38e4 100644
--- a/absl/log/CMakeLists.txt
+++ b/absl/log/CMakeLists.txt
@@ -838,6 +838,8 @@
     absl::string_view
     absl::strings
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
@@ -883,6 +885,8 @@
     absl::string_view
     absl::strings
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
diff --git a/absl/random/BUILD.bazel b/absl/random/BUILD.bazel
index edc4e93..d63f8f3 100644
--- a/absl/random/BUILD.bazel
+++ b/absl/random/BUILD.bazel
@@ -199,6 +199,7 @@
     srcs = ["bernoulli_distribution_test.cc"],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     deps = [
         ":distributions",
         ":random",
@@ -217,6 +218,7 @@
     copts = ABSL_TEST_COPTS,
     flaky = 1,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     tags = [
         "no_test_wasm",
     ],
@@ -326,6 +328,7 @@
     ],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     tags = [
         # Too Slow.
         "no_test_android_arm",
diff --git a/absl/random/CMakeLists.txt b/absl/random/CMakeLists.txt
index 8a31015..f9d2d60 100644
--- a/absl/random/CMakeLists.txt
+++ b/absl/random/CMakeLists.txt
@@ -272,6 +272,8 @@
     absl::random_random
     GTest::gmock
     GTest::gtest_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
@@ -295,6 +297,8 @@
     absl::strings
     GTest::gmock
     GTest::gtest_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
@@ -398,6 +402,8 @@
     absl::strings
     GTest::gmock
     GTest::gtest_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
diff --git a/absl/strings/BUILD.bazel b/absl/strings/BUILD.bazel
index 7711ad2..756300e 100644
--- a/absl/strings/BUILD.bazel
+++ b/absl/strings/BUILD.bazel
@@ -598,6 +598,7 @@
     timeout = "long",
     srcs = ["internal/cord_rep_btree_test.cc"],
     copts = ABSL_TEST_COPTS,
+    shard_count = 4,
     visibility = ["//visibility:private"],
     deps = [
         ":cord_internal",
@@ -1039,6 +1040,7 @@
     timeout = "long",
     srcs = ["cord_test.cc"],
     copts = ABSL_TEST_COPTS,
+    shard_count = 4,
     visibility = ["//visibility:private"],
     deps = [
         ":cord",
@@ -1565,6 +1567,7 @@
     timeout = "long",
     srcs = ["internal/str_format/convert_test.cc"],
     copts = ABSL_TEST_COPTS,
+    shard_count = 4,
     visibility = ["//visibility:private"],
     deps = [
         ":str_format",
diff --git a/absl/strings/CMakeLists.txt b/absl/strings/CMakeLists.txt
index 1461d94..8ba84b5 100644
--- a/absl/strings/CMakeLists.txt
+++ b/absl/strings/CMakeLists.txt
@@ -714,6 +714,8 @@
     absl::string_view
     absl::strings
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
@@ -1196,6 +1198,8 @@
     absl::string_view
     absl::strings
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
@@ -1233,6 +1237,8 @@
     absl::string_view
     absl::strings
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
diff --git a/absl/synchronization/BUILD.bazel b/absl/synchronization/BUILD.bazel
index 977af61..7acbec4 100644
--- a/absl/synchronization/BUILD.bazel
+++ b/absl/synchronization/BUILD.bazel
@@ -382,6 +382,7 @@
     copts = ABSL_TEST_COPTS,
     flaky = 1,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     deps = [
         ":kernel_timeout_internal",
         ":synchronization",
diff --git a/absl/synchronization/CMakeLists.txt b/absl/synchronization/CMakeLists.txt
index 3502d11..50129ce 100644
--- a/absl/synchronization/CMakeLists.txt
+++ b/absl/synchronization/CMakeLists.txt
@@ -198,6 +198,8 @@
     absl::thread_pool
     absl::time
     GTest::gmock_main
+  SHARD_COUNT
+    25
 )
 
 absl_cc_test(
@@ -278,6 +280,8 @@
     absl::thread_pool
     absl::time
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(
diff --git a/absl/time/BUILD.bazel b/absl/time/BUILD.bazel
index eaea38a..347e24b 100644
--- a/absl/time/BUILD.bazel
+++ b/absl/time/BUILD.bazel
@@ -181,6 +181,7 @@
     ],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
+    shard_count = 4,
     deps = [
         ":clock_interface",
         ":simulated_clock",
diff --git a/absl/time/CMakeLists.txt b/absl/time/CMakeLists.txt
index b141b62..79b99e8 100644
--- a/absl/time/CMakeLists.txt
+++ b/absl/time/CMakeLists.txt
@@ -202,6 +202,8 @@
     absl::synchronization
     absl::time
     GTest::gmock_main
+  SHARD_COUNT
+    4
 )
 
 absl_cc_test(