Skip to content

Commit aeeb9c1

Browse files
committed
Move collection testing code from StdlibUnittest to a new library
This brings down StdlibUnittest build time to 90 seconds with either a DebugAssert or a ReleaseAssert compiler. The new library, StdlibCollectionTests, is only built when running validation tests.
1 parent 8aebe8d commit aeeb9c1

File tree

92 files changed

+177
-11
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+177
-11
lines changed

cmake/modules/AddSwift.cmake

+5
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,11 @@ function(add_swift_library name)
15451545
add_dependencies("swift-stdlib${VARIANT_SUFFIX}"
15461546
${lipo_target}
15471547
${lipo_target_static})
1548+
if(NOT "${name}" STREQUAL "swiftStdlibCollectionUnittest")
1549+
add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}"
1550+
${lipo_target}
1551+
${lipo_target_static})
1552+
endif()
15481553
endforeach()
15491554
endif()
15501555
endforeach()

stdlib/CMakeLists.txt

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,22 @@
22
add_custom_target(swift-stdlib-all)
33
foreach(SDK ${SWIFT_SDKS})
44
add_custom_target("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
5+
add_custom_target("swift-test-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
56
foreach(ARCH ${SWIFT_SDK_${SDK}_ARCHITECTURES})
67
set(VARIANT_SUFFIX "-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-${ARCH}")
78
add_custom_target("swift-stdlib${VARIANT_SUFFIX}")
9+
add_custom_target("swift-test-stdlib${VARIANT_SUFFIX}")
810
add_dependencies(swift-stdlib-all "swift-stdlib${VARIANT_SUFFIX}")
911
add_dependencies("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}"
1012
"swift-stdlib${VARIANT_SUFFIX}")
13+
add_dependencies("swift-test-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}"
14+
"swift-test-stdlib${VARIANT_SUFFIX}")
1115
endforeach()
1216
endforeach()
13-
add_custom_target(swift-stdlib ALL
17+
add_custom_target(swift-stdlib
1418
DEPENDS "swift-stdlib${SWIFT_PRIMARY_VARIANT_SUFFIX}")
19+
add_custom_target(swift-test-stdlib ALL
20+
DEPENDS "swift-test-stdlib${SWIFT_PRIMARY_VARIANT_SUFFIX}")
1521

1622
if(SWIFT_HOST_VARIANT STREQUAL "linux")
1723
find_package(BSD REQUIRED)

stdlib/private/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
88
# POSIX APIs it imports the Darwin module on Apple platforms, so it can't
99
# be built separately from the SDK overlay.
1010
add_subdirectory(StdlibUnittest)
11+
add_subdirectory(StdlibCollectionUnittest)
1112
add_subdirectory(StdlibUnittestFoundationExtras)
1213
add_subdirectory(SwiftPrivateDarwinExtras)
1314
add_subdirectory(SwiftPrivatePthreadExtras)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
set(swift_stdlib_unittest_compile_flags)
2+
if(SWIFT_SERIALIZE_STDLIB_UNITTEST)
3+
list(APPEND swift_stdlib_unittest_compile_flags "-Xfrontend" "-sil-serialize-all")
4+
endif()
5+
6+
set(swift_stdlib_unittest_framework_depends)
7+
if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")
8+
list(APPEND swift_stdlib_unittest_framework_depends
9+
Foundation)
10+
endif()
11+
12+
add_swift_library(swiftStdlibCollectionUnittest SHARED IS_STDLIB
13+
# This file should be listed the first. Module name is inferred from the
14+
# filename.
15+
StdlibCollectionUnittest.swift
16+
17+
CheckCollectionType.swift
18+
CheckMutableCollectionType.swift.gyb
19+
CheckRangeReplaceableCollectionType.swift
20+
CheckRangeReplaceableSliceType.swift
21+
CheckSequenceType.swift
22+
23+
PRIVATE_LINK_LIBRARIES ${swift_stdlib_unittest_private_link_libraries}
24+
SWIFT_MODULE_DEPENDS StdlibUnittest
25+
SWIFT_COMPILE_FLAGS ${swift_stdlib_unittest_compile_flags}
26+
FRAMEWORK_DEPENDS ${swift_stdlib_unittest_framework_depends}
27+
INSTALL_IN_COMPONENT stdlib-experimental)
28+

stdlib/private/StdlibUnittest/CheckCollectionType.swift stdlib/private/StdlibCollectionUnittest/CheckCollectionType.swift

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import StdlibUnittest
14+
1315
public struct SubscriptRangeTest {
1416
public let expected: [OpaqueValue<Int>]
1517
public let collection: [OpaqueValue<Int>]

stdlib/private/StdlibUnittest/CheckMutableCollectionType.swift.gyb stdlib/private/StdlibCollectionUnittest/CheckMutableCollectionType.swift.gyb

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import StdlibUnittest
14+
1315
// These tests are shared between partition() and sort().
1416
public struct PartitionExhaustiveTest {
1517
public let sequence: [Int]

stdlib/private/StdlibUnittest/CheckRangeReplaceableCollectionType.swift stdlib/private/StdlibCollectionUnittest/CheckRangeReplaceableCollectionType.swift

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import StdlibUnittest
14+
1315
internal enum RangeSelection {
1416
case EmptyRange
1517
case LeftEdge

stdlib/private/StdlibUnittest/CheckRangeReplaceableSliceType.swift stdlib/private/StdlibCollectionUnittest/CheckRangeReplaceableSliceType.swift

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import StdlibUnittest
14+
1315
extension TestSuite {
1416
/// Adds a set of tests for `RangeReplaceableCollectionType` that is also a
1517
/// slice type.

stdlib/private/StdlibUnittest/CheckSequenceType.swift stdlib/private/StdlibCollectionUnittest/CheckSequenceType.swift

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import StdlibUnittest
14+
1315
public struct DropFirstTest {
1416
public var sequence: [Int]
1517
public let dropElements: Int
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//===--- LifetimeTracked.swift --------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See http://swift.org/LICENSE.txt for license information
9+
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
import StdlibUnittest
14+
15+
// Also import modules which are used by StdlibUnittest internally. This
16+
// workaround is needed to link all required libraries in case we compile
17+
// StdlibUnittest with -sil-serialize-all.
18+
import SwiftPrivate
19+
#if _runtime(_ObjC)
20+
import ObjectiveC
21+
#endif
22+

stdlib/private/StdlibUnittest/CMakeLists.txt

-5
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,6 @@ add_swift_library(swiftStdlibUnittest SHARED IS_STDLIB
2727
# filename.
2828
StdlibUnittest.swift.gyb
2929

30-
CheckCollectionType.swift
31-
CheckMutableCollectionType.swift.gyb
32-
CheckRangeReplaceableCollectionType.swift
33-
CheckRangeReplaceableSliceType.swift
34-
CheckSequenceType.swift
3530
InterceptTraps.cpp
3631
LoggingWrappers.swift.gyb
3732
OpaqueIdentityFunctions.cpp

test/CMakeLists.txt

+6-3
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,10 @@ if(PYTHONINTERP_FOUND)
173173
set(test_dependencies)
174174
get_test_dependencies("${SDK}" test_dependencies)
175175
list(APPEND test_dependencies
176-
"swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
176+
"swift-test-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
177+
178+
set(validation_test_dependencies
179+
"swiftStdlibCollectionUnittest-${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
177180

178181
set(test_bin_dir "${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}")
179182
set(validation_test_bin_dir
@@ -206,15 +209,15 @@ if(PYTHONINTERP_FOUND)
206209
${command_upload_stdlib}
207210
${command_clean_test_results_dir}
208211
COMMAND ${lit_command} "${validation_test_bin_dir}"
209-
DEPENDS ${test_dependencies}
212+
DEPENDS ${test_dependencies} ${validation_test_dependencies}
210213
COMMENT "Running Swift validation tests for ${VARIANT_TRIPLE}"
211214
${cmake_3_2_USES_TERMINAL})
212215

213216
add_custom_target("check-swift-all${test_mode_target_suffix}${VARIANT_SUFFIX}"
214217
${command_upload_stdlib}
215218
${command_clean_test_results_dir}
216219
COMMAND ${lit_command} "${validation_test_bin_dir}" "${test_bin_dir}"
217-
DEPENDS ${test_dependencies}
220+
DEPENDS ${test_dependencies} ${validation_test_dependencies}
218221
COMMENT "Running all Swift tests for ${VARIANT_TRIPLE}"
219222
${cmake_3_2_USES_TERMINAL})
220223
endforeach()

utils/build-presets.ini

+7
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ swift-sdks=OSX;IOS;IOS_SIMULATOR;TVOS;TVOS_SIMULATOR;WATCHOS;WATCHOS_SIMULATOR
3737
# Build static standard library because it is used
3838
# to build external projects.
3939
build-swift-static-stdlib=1
40+
build-swift-stdlib-unittest-extra=1
4041

4142
compiler-vendor=apple
4243

@@ -169,6 +170,8 @@ build-ninja
169170
# Don't build static standard library to speed up the build.
170171
build-swift-static-stdlib=0
171172

173+
build-swift-stdlib-unittest-extra=1
174+
172175
compiler-vendor=apple
173176

174177

@@ -319,6 +322,7 @@ build-ninja
319322

320323
# Don't build static standard library to speed up the build.
321324
build-swift-static-stdlib=0
325+
build-swift-stdlib-unittest-extra=1
322326

323327
skip-build-ios
324328
skip-test-ios
@@ -366,6 +370,7 @@ verbose-build=1
366370
build-ninja
367371
# Don't build static standard library to speed up the build.
368372
build-swift-static-stdlib=0
373+
build-swift-stdlib-unittest-extra=1
369374
compiler-vendor=apple
370375

371376
[preset: buildbot_incremental_special_dtrace,tools=RA,stdlib=RD]
@@ -419,6 +424,7 @@ install-xctest
419424
install-prefix=/usr
420425
swift-install-components=compiler;clang-builtin-headers;stdlib;sdk-overlay;license
421426
build-swift-static-stdlib=1
427+
build-swift-stdlib-unittest-extra=1
422428
skip-test-lldb=1
423429

424430
# Executes the lit tests for the installable package that is created
@@ -476,6 +482,7 @@ lldb-build-type=Release
476482
verbose-build=1
477483
build-ninja
478484
build-swift-static-stdlib=1
485+
build-swift-stdlib-unittest-extra=1
479486
compiler-vendor=apple
480487
swift-sdks=OSX;IOS;IOS_SIMULATOR;TVOS;TVOS_SIMULATOR;WATCHOS;WATCHOS_SIMULATOR
481488

utils/build-script-impl

+13-2
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ KNOWN_SETTINGS=(
144144
build-llvm "1" "set to 1 to build LLVM and Clang"
145145
build-swift-tools "1" "set to 1 to build Swift host tools"
146146
build-swift-stdlib "1" "set to 1 to build the Swift standard library"
147+
build-swift-stdlib-unittest-extra "0" "set to 1 to build optional StdlibUnittest components"
147148
build-swift-sdk-overlay "1" "set to 1 to build the Swift SDK overlay"
148149
build-swift-static-stdlib "0" "set to 1 to build static versions of the Swift standard library and SDK overlay"
149150
build-swift-examples "1" "set to 1 to build examples"
@@ -976,8 +977,18 @@ for deployment_target in "${STDLIB_DEPLOYMENT_TARGETS[@]}"; do
976977
;;
977978
esac
978979
if [[ "${build_for_this_target}" ]] ; then
979-
SWIFT_STDLIB_TARGETS=(
980-
"${SWIFT_STDLIB_TARGETS[@]}" "swift-stdlib-${deployment_target}")
980+
if [[ "${BUILD_SWIFT_STDLIB_UNITTEST_EXTRA}" == "1" ]] ; then
981+
SWIFT_STDLIB_TARGETS=(
982+
"${SWIFT_STDLIB_TARGETS[@]}" "swift-stdlib-${deployment_target}")
983+
else
984+
if [[ "${SKIP_TEST_VALIDATION}" ]] ; then
985+
SWIFT_STDLIB_TARGETS=(
986+
"${SWIFT_STDLIB_TARGETS[@]}" "swift-test-stdlib-${deployment_target}")
987+
else
988+
SWIFT_STDLIB_TARGETS=(
989+
"${SWIFT_STDLIB_TARGETS[@]}" "swift-stdlib-${deployment_target}")
990+
fi
991+
fi
981992
fi
982993
if [[ "${perftest_this_target}" ]] ; then
983994
SWIFT_PERFTEST_TARGETS=(

validation-test/stdlib/Algorithm.swift

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// REQUIRES: executable_test
44

55
import StdlibUnittest
6+
import StdlibCollectionUnittest
67
import SwiftPrivate
78

89
// Also import modules which are used by StdlibUnittest internally. This

validation-test/stdlib/CollectionType.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// REQUIRES: executable_test
77

88
import StdlibUnittest
9+
import StdlibCollectionUnittest
910
import SwiftPrivate
1011

1112
// Also import modules which are used by StdlibUnittest internally. This

test/1_stdlib/RangeReplaceable.swift.gyb validation-test/stdlib/RangeReplaceable.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
// REQUIRES: swift_test_mode_optimize_none
1111

1212
import StdlibUnittest
13+
import StdlibCollectionUnittest
1314

1415
// Also import modules which are used by StdlibUnittest internally. This
1516
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/SequenceType.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
% import gyb
99

1010
import StdlibUnittest
11+
import StdlibCollectionUnittest
1112
import SwiftPrivate
1213

1314
// Also import modules which are used by StdlibUnittest internally. This

validation-test/stdlib/Slice.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// REQUIRES: executable_test
77

88
import StdlibUnittest
9+
import StdlibCollectionUnittest
910
import SwiftPrivate
1011

1112
// Also import modules which are used by StdlibUnittest internally. This

validation-test/stdlib/Slice/Inputs/GenerateSliceTests.py

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
// REQUIRES: optimized_stdlib
3636
3737
import StdlibUnittest
38+
import StdlibCollectionUnittest
3839
3940
// Also import modules which are used by StdlibUnittest internally. This
4041
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedBidirectionalMutableCollection_FullWidth.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedBidirectionalMutableCollection_WithPrefix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedBidirectionalMutableCollection_WithPrefixAndSuffix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedBidirectionalMutableCollection_WithSuffix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedForwardMutableCollection_FullWidth.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedForwardMutableCollection_WithPrefix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedForwardMutableCollection_WithPrefixAndSuffix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedForwardMutableCollection_WithSuffix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedRandomAccessMutableCollection_FullWidth.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedRandomAccessMutableCollection_WithPrefix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

validation-test/stdlib/Slice/MutableSlice_Of_DefaultedRandomAccessMutableCollection_WithPrefixAndSuffix.swift.gyb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// REQUIRES: optimized_stdlib
1313

1414
import StdlibUnittest
15+
import StdlibCollectionUnittest
1516

1617
// Also import modules which are used by StdlibUnittest internally. This
1718
// workaround is needed to link all required libraries in case we compile

0 commit comments

Comments
 (0)