Compare commits
260 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 06fd5ea31a | |||
| 36f17aa442 | |||
| 6c891952f4 | |||
| 3bac27b7a8 | |||
| 94d4b11aec | |||
| 4be394e313 | |||
| 891ecf6e2d | |||
| 736e0ea7da | |||
| c63ab5a3aa | |||
| f06553a74d | |||
| 72f8248df1 | |||
| 8ef9e9263f | |||
| ab03176239 | |||
| 4df7502e09 | |||
| 9bf57b0504 | |||
| 92ae96cf2a | |||
| b120d60c55 | |||
| cb4cb74a00 | |||
| 6bbbee5447 | |||
| e5bc9eceae | |||
| f153d5df84 | |||
| 1164a68fc8 | |||
| 596396a8e8 | |||
| 027494878b | |||
| 74f50a4c71 | |||
| ad37e7c91f | |||
| 4c236e1b82 | |||
| d78cc12e8d | |||
| 8866b3e301 | |||
| c3c5931187 | |||
| af7d973978 | |||
| ab67e0fea8 | |||
| 14e4501035 | |||
| a569fc06f5 | |||
| 465ea731a3 | |||
| 8a7247d9d4 | |||
| 909bed0ada | |||
| 5a5a8cc62d | |||
| e44b3a7f4c | |||
| ecdc5f971b | |||
| efcb0db2e0 | |||
| 1743d4dc3f | |||
| fb67bd25b0 | |||
| 69c8843b76 | |||
| 36ff800650 | |||
| 13101672c2 | |||
| 7abeecbf58 | |||
| 13bf59d5bd | |||
| 47f66b1abd | |||
| 42bb82b87b | |||
| 30c36e66fd | |||
| 3f6f0750cf | |||
| ae2cc6dd55 | |||
| 0d48ec751a | |||
| d2dec8bba0 | |||
| e8795b26df | |||
| ab7784b97f | |||
| 9adcc6f84c | |||
| 4ccfd1b9a3 | |||
| f08ff3e872 | |||
| f0da8a43be | |||
| dbd6b816db | |||
| 9818933b59 | |||
| 88cc1ad101 | |||
| 4cd37bd207 | |||
| 5e62daeff2 | |||
| 52e42cd938 | |||
| dbf4484048 | |||
| 804f2847b4 | |||
| 46952da3c3 | |||
| acb62df760 | |||
| f303e02f63 | |||
| 244d0128c9 | |||
| 0d5e16fc4f | |||
| ecd3f176e5 | |||
| ac3f8fa5eb | |||
| 19046fb4a8 | |||
| 005ef5c3ee | |||
| 68f2557694 | |||
| 72d4779e9b | |||
| 8547583792 | |||
| 3688348461 | |||
| f875439709 | |||
| 1920f07525 | |||
| 69ed90dcfc | |||
| 33fa9622ce | |||
| 468ad1c83a | |||
| 174c21d58f | |||
| 5f076fccbb | |||
| 642b5623b7 | |||
| 03b5817530 | |||
| 7ba07fcef1 | |||
| 0e1273e2ab | |||
| 7b8b3c39a3 | |||
| 1e5c2926a7 | |||
| b678702e3d | |||
| 4e4b205dcb | |||
| b345a3e8df | |||
| 2cf9220874 | |||
| 08e9ff5371 | |||
| e7adba0cb9 | |||
| 5a288f4197 | |||
| 56bfdfc953 | |||
| 34efc031a4 | |||
| 3541842cd3 | |||
| d75fe1429b | |||
| f8d5a75dd5 | |||
| 596a7d2c1b | |||
| f2a320bc6b | |||
| f36353d61f | |||
| fb30ee0cc3 | |||
| 4234d43565 | |||
| 77d0b4937a | |||
| 4c89d79979 | |||
| 397e3e4c20 | |||
| a4abc2ee8b | |||
| 2e54a9935b | |||
| ea47632047 | |||
| 1d9696939a | |||
| 1a26252cf7 | |||
| 0d73c529f2 | |||
| 42030fb42a | |||
| e689725b4d | |||
| b896bb0751 | |||
| 37bfcd67b2 | |||
| cb7638e658 | |||
| 95e5cc9c11 | |||
| 917cb33775 | |||
| 0b061bb25d | |||
| 1d439a86ed | |||
| be3d9f1c69 | |||
| f89f30b9d1 | |||
| 9821943fff | |||
| d609a252f8 | |||
| 642d7e34f4 | |||
| 9faf5ab0ea | |||
| f1a207a3e6 | |||
| aeac204817 | |||
| 32ef58d871 | |||
| 6ee0ceaa48 | |||
| 0b6c95022e | |||
| b733108558 | |||
| 14cb718fe2 | |||
| 77dbbf1c1f | |||
| 4be64d3c09 | |||
| 2699924867 | |||
| 87b46f36e1 | |||
| 28cd25d536 | |||
| 122814a5cd | |||
| b49641a892 | |||
| f8630257e6 | |||
| 46d4c52934 | |||
| fb66d1e9d8 | |||
| 638d4ae0d1 | |||
| f3d18a63fa | |||
| d01a024ae7 | |||
| a9a37b7978 | |||
| d87cac83e5 | |||
| 754d4096da | |||
| c5d09d3bc0 | |||
| 5877a0a683 | |||
| 5b6c8e3541 | |||
| 502a9e128e | |||
| be22dfd473 | |||
| a027b5c88b | |||
| 5f71a748f5 | |||
| 220b435d2a | |||
| 1120534fde | |||
| 3dfa4db66a | |||
| 3fe91a8722 | |||
| efb886e6c9 | |||
| a0b52c1d28 | |||
| ccb19e2f1d | |||
| 7d2362fe63 | |||
| 117efdb7bd | |||
| d84ddf7f40 | |||
| 73ee947220 | |||
| 9715568f02 | |||
| 751bbe1bcc | |||
| af87ceac65 | |||
| 99f26c7f93 | |||
| 8e43c679de | |||
| b18549782d | |||
| 5b4de32ee2 | |||
| 64924a208c | |||
| 310c182dc3 | |||
| c7ac65504d | |||
| ce50489b8f | |||
| b6d563a3cc | |||
| bb3ee42176 | |||
| b0251e74d3 | |||
| c8d61b939b | |||
| b832b9925c | |||
| 21b9930d36 | |||
| f81ab4e6a0 | |||
| f53a24821a | |||
| a742de8c3d | |||
| 855e6f6a0f | |||
| 6cd117b224 | |||
| dd71f6e196 | |||
| a63943c0ae | |||
| 3d78836dcd | |||
| be180eeaf4 | |||
| 8a2127d8f4 | |||
| 616815b08c | |||
| 90c35cb532 | |||
| b892a31bd9 | |||
| 699727683d | |||
| 8efd15b99a | |||
| a043a863a7 | |||
| ccdb7bf482 | |||
| c5a5e91d2f | |||
| b53a974021 | |||
| 066b38d0ec | |||
| 8b9d033d7d | |||
| befb924574 | |||
| e9fa5e8191 | |||
| fa8cb4d120 | |||
| d7daeb0518 | |||
| 9b6c798a17 | |||
| 959f4f0eb1 | |||
| 040aadd65f | |||
| b6a99e3ffe | |||
| 20d4d7e7c4 | |||
| a8a69e4570 | |||
| cea6cb0952 | |||
| fae6eb2617 | |||
| 0e3030af48 | |||
| 9a255de350 | |||
| ca1fc87240 | |||
| dff7877e06 | |||
| 32ec1a11ce | |||
| 4d8f31303a | |||
| b4da0afe8b | |||
| 34e3aa1c95 | |||
| 0ec1461200 | |||
| 3706b45822 | |||
| 2438623b7c | |||
| af69193370 | |||
| 20c169a7b8 | |||
| 87efd44e09 | |||
| e7bba55479 | |||
| 4dcdf588ee | |||
| 4065061d25 | |||
| 60ffb98742 | |||
| d70db906df | |||
| 30bb351de2 | |||
| 0022833380 | |||
| 1219d6dd8a | |||
| c5e6b63a9c | |||
| a2d0ef2c1b | |||
| 61729a772b | |||
| 5e51f91e07 | |||
| 5acd33d10a | |||
| 1a4623ceff | |||
| 8016abd95b | |||
| e58469f8e4 | |||
| 100e077a0d | |||
| 72ccef23af | |||
| 1a9ac85931 |
@@ -0,0 +1,61 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
macos-11:
|
||||
name: macOS 11 (Xcode ${{ matrix.xcode }})
|
||||
runs-on: macos-11
|
||||
strategy:
|
||||
matrix:
|
||||
# https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md#xcode
|
||||
xcode:
|
||||
- "13.0" # Swift 5.5
|
||||
- "12.5.1" # Swift 5.4.2
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Select Xcode
|
||||
run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
|
||||
- name: Build
|
||||
run: swift build -v
|
||||
- name: Test
|
||||
run: swift test -v
|
||||
|
||||
macos-10_15:
|
||||
name: macOS 10.15 (Xcode ${{ matrix.xcode }})
|
||||
runs-on: macos-10.15
|
||||
strategy:
|
||||
matrix:
|
||||
# https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md#xcode
|
||||
xcode:
|
||||
- "12.3" # Swift 5.3.2
|
||||
- "12.2" # Swift 5.3.1
|
||||
- "11.7" # Swift 5.2.4
|
||||
- "11.3.1" # Swift 5.1.3
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Select Xcode
|
||||
run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
|
||||
- name: Build
|
||||
run: swift build -v
|
||||
- name: Test
|
||||
run: swift test -v
|
||||
|
||||
linux:
|
||||
name: Linux
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: swift:5.3
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Build
|
||||
run: swift build -v
|
||||
- name: Test
|
||||
run: swift test -v
|
||||
+8
-27
@@ -1,30 +1,11 @@
|
||||
# OS X
|
||||
# SPM
|
||||
.build
|
||||
.swiftpm
|
||||
|
||||
# Xcode
|
||||
xcuserdata/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Ruby
|
||||
.ruby-*
|
||||
.rbenv-*
|
||||
|
||||
# Xcode
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
*.xctimeline
|
||||
|
||||
# Carthage
|
||||
Carthage/Checkouts
|
||||
Carthage/**/OrderedDictionary*
|
||||
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
language: objective-c
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
||||
xcode_project: OrderedDictionary.xcodeproj
|
||||
xcode_scheme: OrderedDictionary-iOS
|
||||
osx_image: xcode7
|
||||
xcode_sdk: iphonesimulator
|
||||
|
||||
script:
|
||||
- xcodebuild clean build test -project OrderedDictionary.xcodeproj -scheme OrderedDictionary-iOS -destination "platform=iOS Simulator,name=iPhone 6,OS=9.0"
|
||||
@@ -1 +0,0 @@
|
||||
github "Quick/Nimble" "e84623d953d811f74a2afcda4fa0c8121e7dad7d"
|
||||
@@ -1 +0,0 @@
|
||||
github "Quick/Nimble" "e84623d953d811f74a2afcda4fa0c8121e7dad7d"
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.xcode.dsym.net.jeffhui.Nimble</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>dSYM</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
Binary file not shown.
-1
@@ -1 +0,0 @@
|
||||
Versions/Current/Headers
|
||||
-1
@@ -1 +0,0 @@
|
||||
Versions/Current/Modules
|
||||
-1
@@ -1 +0,0 @@
|
||||
Versions/Current/Nimble
|
||||
-1
@@ -1 +0,0 @@
|
||||
Versions/Current/Resources
|
||||
-129
@@ -1,129 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class NMBExpectation;
|
||||
@class NMBObjCBeCloseToMatcher;
|
||||
@class NMBObjCRaiseExceptionMatcher;
|
||||
@protocol NMBMatcher;
|
||||
|
||||
|
||||
#define NIMBLE_EXPORT FOUNDATION_EXPORT
|
||||
|
||||
#ifdef NIMBLE_DISABLE_SHORT_SYNTAX
|
||||
#define NIMBLE_SHORT(PROTO, ORIGINAL)
|
||||
#else
|
||||
#define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); }
|
||||
#endif
|
||||
|
||||
NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line);
|
||||
NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line);
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_equal(id expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> equal(id expectedValue),
|
||||
NMB_equal(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue),
|
||||
NMB_beCloseTo(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beAnInstanceOf(Class expectedClass);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beAnInstanceOf(Class expectedClass),
|
||||
NMB_beAnInstanceOf(expectedClass));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beAKindOf(Class expectedClass);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beAKindOf(Class expectedClass),
|
||||
NMB_beAKindOf(expectedClass));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beginWith(id itemElementOrSubstring);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beginWith(id itemElementOrSubstring),
|
||||
NMB_beginWith(itemElementOrSubstring));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThan(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beGreaterThan(NSNumber *expectedValue),
|
||||
NMB_beGreaterThan(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beGreaterThanOrEqualTo(NSNumber *expectedValue),
|
||||
NMB_beGreaterThanOrEqualTo(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beIdenticalTo(id expectedInstance);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beIdenticalTo(id expectedInstance),
|
||||
NMB_beIdenticalTo(expectedInstance));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beLessThan(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beLessThan(NSNumber *expectedValue),
|
||||
NMB_beLessThan(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beLessThanOrEqualTo(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beLessThanOrEqualTo(NSNumber *expectedValue),
|
||||
NMB_beLessThanOrEqualTo(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beTruthy(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beTruthy(void),
|
||||
NMB_beTruthy());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beFalsy(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beFalsy(void),
|
||||
NMB_beFalsy());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beTrue(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beTrue(void),
|
||||
NMB_beTrue());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beFalse(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beFalse(void),
|
||||
NMB_beFalse());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beNil(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beNil(void),
|
||||
NMB_beNil());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beEmpty(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beEmpty(void),
|
||||
NMB_beEmpty());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION;
|
||||
#define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil)
|
||||
#ifndef NIMBLE_DISABLE_SHORT_SYNTAX
|
||||
#define contain(...) NMB_contain(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_endWith(id itemElementOrSubstring);
|
||||
NIMBLE_SHORT(id<NMBMatcher> endWith(id itemElementOrSubstring),
|
||||
NMB_endWith(itemElementOrSubstring));
|
||||
|
||||
NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void);
|
||||
NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void),
|
||||
NMB_raiseException());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_match(id expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> match(id expectedValue),
|
||||
NMB_match(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_allPass(id matcher);
|
||||
NIMBLE_SHORT(id<NMBMatcher> allPass(id matcher),
|
||||
NMB_allPass(matcher));
|
||||
|
||||
// In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__,
|
||||
// define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout
|
||||
// and action arguments. See https://github.com/Quick/Quick/pull/185 for details.
|
||||
typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void)));
|
||||
typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void)));
|
||||
|
||||
NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line);
|
||||
NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line);
|
||||
|
||||
NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line);
|
||||
|
||||
#define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__)
|
||||
#define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__)
|
||||
|
||||
#ifndef NIMBLE_DISABLE_SHORT_SYNTAX
|
||||
#define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__)
|
||||
#define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__)
|
||||
#define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__)
|
||||
#define fail() failWithMessage(@"fail() always fails")
|
||||
|
||||
|
||||
#define waitUntilTimeout NMB_waitUntilTimeout
|
||||
#define waitUntil NMB_waitUntil
|
||||
#endif
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface NMBExceptionCapture : NSObject
|
||||
|
||||
- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally;
|
||||
- (void)tryBlock:(void(^)())unsafeBlock;
|
||||
|
||||
@end
|
||||
-364
@@ -1,364 +0,0 @@
|
||||
// Generated by Apple Swift version 2.0 (swiftlang-700.0.57.3 clang-700.0.72)
|
||||
#pragma clang diagnostic push
|
||||
|
||||
#if defined(__has_include) && __has_include(<swift/objc-prologue.h>)
|
||||
# include <swift/objc-prologue.h>
|
||||
#endif
|
||||
|
||||
#pragma clang diagnostic ignored "-Wauto-import"
|
||||
#include <objc/NSObject.h>
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#if defined(__has_include) && __has_include(<uchar.h>)
|
||||
# include <uchar.h>
|
||||
#elif !defined(__cplusplus) || __cplusplus < 201103L
|
||||
typedef uint_least16_t char16_t;
|
||||
typedef uint_least32_t char32_t;
|
||||
#endif
|
||||
|
||||
typedef struct _NSZone NSZone;
|
||||
|
||||
#if !defined(SWIFT_PASTE)
|
||||
# define SWIFT_PASTE_HELPER(x, y) x##y
|
||||
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
|
||||
#endif
|
||||
#if !defined(SWIFT_METATYPE)
|
||||
# define SWIFT_METATYPE(X) Class
|
||||
#endif
|
||||
|
||||
#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
|
||||
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
|
||||
#else
|
||||
# define SWIFT_RUNTIME_NAME(X)
|
||||
#endif
|
||||
#if defined(__has_attribute) && __has_attribute(swift_name)
|
||||
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
|
||||
#else
|
||||
# define SWIFT_COMPILE_NAME(X)
|
||||
#endif
|
||||
#if !defined(SWIFT_CLASS_EXTRA)
|
||||
# define SWIFT_CLASS_EXTRA
|
||||
#endif
|
||||
#if !defined(SWIFT_PROTOCOL_EXTRA)
|
||||
# define SWIFT_PROTOCOL_EXTRA
|
||||
#endif
|
||||
#if !defined(SWIFT_ENUM_EXTRA)
|
||||
# define SWIFT_ENUM_EXTRA
|
||||
#endif
|
||||
#if !defined(SWIFT_CLASS)
|
||||
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
|
||||
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
|
||||
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||
# else
|
||||
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(SWIFT_PROTOCOL)
|
||||
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
|
||||
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
|
||||
#endif
|
||||
|
||||
#if !defined(SWIFT_EXTENSION)
|
||||
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
|
||||
#endif
|
||||
|
||||
#if !defined(OBJC_DESIGNATED_INITIALIZER)
|
||||
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
|
||||
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
|
||||
# else
|
||||
# define OBJC_DESIGNATED_INITIALIZER
|
||||
# endif
|
||||
#endif
|
||||
#if !defined(SWIFT_ENUM)
|
||||
# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_EXTRA _name : _type
|
||||
#endif
|
||||
typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
|
||||
typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
|
||||
typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
|
||||
typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
|
||||
typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
|
||||
typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
|
||||
typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
|
||||
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
|
||||
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
|
||||
#if defined(__has_feature) && __has_feature(modules)
|
||||
@import ObjectiveC;
|
||||
@import Foundation;
|
||||
#endif
|
||||
|
||||
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
|
||||
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
|
||||
|
||||
|
||||
/// Encapsulates the failure message that matchers can report to the end user.
|
||||
///
|
||||
/// This is shared state between Nimble and matchers that mutate this value.
|
||||
SWIFT_CLASS("_TtC6Nimble14FailureMessage")
|
||||
@interface FailureMessage : NSObject
|
||||
@property (nonatomic, copy) NSString * __nonnull expected;
|
||||
@property (nonatomic, copy) NSString * __nullable actualValue;
|
||||
@property (nonatomic, copy) NSString * __nonnull to;
|
||||
@property (nonatomic, copy) NSString * __nonnull postfixMessage;
|
||||
@property (nonatomic, copy) NSString * __nonnull postfixActual;
|
||||
@property (nonatomic, copy) NSString * __nullable userDescription;
|
||||
@property (nonatomic, copy) NSString * __nonnull stringValue;
|
||||
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
|
||||
- (nonnull instancetype)initWithStringValue:(NSString * __nonnull)stringValue OBJC_DESIGNATED_INITIALIZER;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types that support only beEmpty()
|
||||
SWIFT_PROTOCOL("_TtP6Nimble13NMBCollection_")
|
||||
@protocol NMBCollection
|
||||
@property (nonatomic, readonly) NSInteger count;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.
|
||||
///
|
||||
/// Types that conform to Swift's Comparable protocol will work implicitly too
|
||||
SWIFT_PROTOCOL("_TtP6Nimble13NMBComparable_")
|
||||
@protocol NMBComparable
|
||||
- (NSComparisonResult)NMB_compare:(id <NMBComparable> __null_unspecified)otherObject;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types that support contain() matcher.
|
||||
SWIFT_PROTOCOL("_TtP6Nimble12NMBContainer_")
|
||||
@protocol NMBContainer
|
||||
- (BOOL)containsObject:(id __null_unspecified)object;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types to support beCloseTo() matcher
|
||||
SWIFT_PROTOCOL("_TtP6Nimble20NMBDoubleConvertible_")
|
||||
@protocol NMBDoubleConvertible
|
||||
@property (nonatomic, readonly) double doubleValue;
|
||||
@end
|
||||
|
||||
@protocol NMBMatcher;
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble14NMBExpectation")
|
||||
@interface NMBExpectation : NSObject
|
||||
- (nonnull instancetype)initWithActualBlock:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock negative:(BOOL)negative file:(NSString * __nonnull)file line:(NSUInteger)line OBJC_DESIGNATED_INITIALIZER;
|
||||
@property (nonatomic, readonly, copy) NMBExpectation * __nonnull (^ __nonnull withTimeout)(NSTimeInterval);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull to)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNot)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNotWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull notTo)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull notToWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventually)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventuallyWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventuallyNot)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventuallyNotWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNotEventually)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNotEventuallyWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
+ (void)failWithMessage:(NSString * __nonnull)message file:(NSString * __nonnull)file line:(NSUInteger)line;
|
||||
@end
|
||||
|
||||
@class SourceLocation;
|
||||
|
||||
|
||||
/// Objective-C interface to the Swift variant of Matcher.
|
||||
SWIFT_PROTOCOL("_TtP6Nimble10NMBMatcher_")
|
||||
@protocol NMBMatcher
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@end
|
||||
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble23NMBObjCBeCloseToMatcher")
|
||||
@interface NMBObjCBeCloseToMatcher : NSObject <NMBMatcher>
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualExpression failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualExpression failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@property (nonatomic, readonly, copy) NMBObjCBeCloseToMatcher * __nonnull (^ __nonnull within)(double);
|
||||
@end
|
||||
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble14NMBObjCMatcher")
|
||||
@interface NMBObjCMatcher : NSObject <NMBMatcher>
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beEmptyMatcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beIdenticalToMatcher:(NSObject * __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beginWithMatcher:(id __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beGreaterThanOrEqualToMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)containMatcher:(NSArray<NSObject *> * __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beGreaterThanMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beLessThanMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)equalMatcher:(NSObject * __nonnull)expected;
|
||||
@end
|
||||
|
||||
@class NSString;
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)matchMatcher:(NSString * __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)beAKindOfMatcher:(Class __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)allPassMatcher:(NMBObjCMatcher * __nonnull)matcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)beAnInstanceOfMatcher:(Class __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beLessThanOrEqualToMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
@class NSNumber;
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCBeCloseToMatcher * __nonnull)beCloseToMatcher:(NSNumber * __nonnull)expected within:(double)within;
|
||||
@end
|
||||
|
||||
@class NMBObjCRaiseExceptionMatcher;
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCRaiseExceptionMatcher * __nonnull)raiseExceptionMatcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)endWithMatcher:(id __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beNilMatcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beTruthyMatcher;
|
||||
+ (NMBObjCMatcher * __nonnull)beFalsyMatcher;
|
||||
+ (NMBObjCMatcher * __nonnull)beTrueMatcher;
|
||||
+ (NMBObjCMatcher * __nonnull)beFalseMatcher;
|
||||
@end
|
||||
|
||||
@class NSDictionary;
|
||||
@class NSException;
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble28NMBObjCRaiseExceptionMatcher")
|
||||
@interface NMBObjCRaiseExceptionMatcher : NSObject <NMBMatcher>
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull named)(NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull reason)(NSString * __nullable);
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull userInfo)(NSDictionary * __nullable);
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull satisfyingBlock)(void (^ __nullable)(NSException * __nonnull));
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types that support beginWith(), endWith(), beEmpty() matchers
|
||||
SWIFT_PROTOCOL("_TtP6Nimble20NMBOrderedCollection_")
|
||||
@protocol NMBOrderedCollection <NMBCollection>
|
||||
- (NSInteger)indexOfObject:(id __null_unspecified)object;
|
||||
@end
|
||||
|
||||
|
||||
@interface NSArray (SWIFT_EXTENSION(Nimble)) <NMBContainer>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSArray (SWIFT_EXTENSION(Nimble)) <NMBOrderedCollection, NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSArray (SWIFT_EXTENSION(Nimble))
|
||||
@end
|
||||
|
||||
|
||||
@interface NSDictionary (SWIFT_EXTENSION(Nimble)) <NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSHashTable (SWIFT_EXTENSION(Nimble)) <NMBContainer>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSHashTable (SWIFT_EXTENSION(Nimble)) <NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSNumber (SWIFT_EXTENSION(Nimble)) <NMBDoubleConvertible>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSNumber (SWIFT_EXTENSION(Nimble)) <NMBComparable>
|
||||
- (NSComparisonResult)NMB_compare:(id <NMBComparable> __null_unspecified)otherObject;
|
||||
@end
|
||||
|
||||
|
||||
@interface NSSet (SWIFT_EXTENSION(Nimble)) <NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSSet (SWIFT_EXTENSION(Nimble)) <NMBContainer>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSString (SWIFT_EXTENSION(Nimble)) <NMBComparable>
|
||||
- (NSComparisonResult)NMB_compare:(id <NMBComparable> __null_unspecified)otherObject;
|
||||
@end
|
||||
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble14SourceLocation")
|
||||
@interface SourceLocation : NSObject
|
||||
@property (nonatomic, readonly, copy) NSString * __nonnull file;
|
||||
@property (nonatomic, readonly) NSUInteger line;
|
||||
@property (nonatomic, readonly, copy) NSString * __nonnull description;
|
||||
@end
|
||||
|
||||
#pragma clang diagnostic pop
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Nimble/NMBExceptionCapture.h>
|
||||
#import <Nimble/DSL.h>
|
||||
|
||||
FOUNDATION_EXPORT double NimbleVersionNumber;
|
||||
FOUNDATION_EXPORT const unsigned char NimbleVersionString[];
|
||||
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
-10
@@ -1,10 +0,0 @@
|
||||
framework module Nimble {
|
||||
umbrella header "Nimble.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
|
||||
module Nimble.Swift {
|
||||
header "Nimble-Swift.h"
|
||||
}
|
||||
BIN
Binary file not shown.
-51
@@ -1,51 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildMachineOSBuild</key>
|
||||
<string>14F27</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Nimble</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.jeffhui.Nimble</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Nimble</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>7A192o</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>GM</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>15A244e</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.11</string>
|
||||
<key>DTXcode</key>
|
||||
<string>0700</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>7A192o</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2014 Jeff Hui. All rights reserved.</string>
|
||||
<key>UIDeviceFamily</key>
|
||||
<array>
|
||||
<integer>1</integer>
|
||||
<integer>2</integer>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
-1
@@ -1 +0,0 @@
|
||||
A
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.xcode.dsym.net.jeffhui.Nimble</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>dSYM</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
Binary file not shown.
-129
@@ -1,129 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class NMBExpectation;
|
||||
@class NMBObjCBeCloseToMatcher;
|
||||
@class NMBObjCRaiseExceptionMatcher;
|
||||
@protocol NMBMatcher;
|
||||
|
||||
|
||||
#define NIMBLE_EXPORT FOUNDATION_EXPORT
|
||||
|
||||
#ifdef NIMBLE_DISABLE_SHORT_SYNTAX
|
||||
#define NIMBLE_SHORT(PROTO, ORIGINAL)
|
||||
#else
|
||||
#define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); }
|
||||
#endif
|
||||
|
||||
NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line);
|
||||
NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line);
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_equal(id expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> equal(id expectedValue),
|
||||
NMB_equal(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue),
|
||||
NMB_beCloseTo(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beAnInstanceOf(Class expectedClass);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beAnInstanceOf(Class expectedClass),
|
||||
NMB_beAnInstanceOf(expectedClass));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beAKindOf(Class expectedClass);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beAKindOf(Class expectedClass),
|
||||
NMB_beAKindOf(expectedClass));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beginWith(id itemElementOrSubstring);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beginWith(id itemElementOrSubstring),
|
||||
NMB_beginWith(itemElementOrSubstring));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThan(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beGreaterThan(NSNumber *expectedValue),
|
||||
NMB_beGreaterThan(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beGreaterThanOrEqualTo(NSNumber *expectedValue),
|
||||
NMB_beGreaterThanOrEqualTo(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beIdenticalTo(id expectedInstance);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beIdenticalTo(id expectedInstance),
|
||||
NMB_beIdenticalTo(expectedInstance));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beLessThan(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beLessThan(NSNumber *expectedValue),
|
||||
NMB_beLessThan(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beLessThanOrEqualTo(NSNumber *expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beLessThanOrEqualTo(NSNumber *expectedValue),
|
||||
NMB_beLessThanOrEqualTo(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beTruthy(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beTruthy(void),
|
||||
NMB_beTruthy());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beFalsy(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beFalsy(void),
|
||||
NMB_beFalsy());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beTrue(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beTrue(void),
|
||||
NMB_beTrue());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beFalse(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beFalse(void),
|
||||
NMB_beFalse());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beNil(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beNil(void),
|
||||
NMB_beNil());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_beEmpty(void);
|
||||
NIMBLE_SHORT(id<NMBMatcher> beEmpty(void),
|
||||
NMB_beEmpty());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION;
|
||||
#define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil)
|
||||
#ifndef NIMBLE_DISABLE_SHORT_SYNTAX
|
||||
#define contain(...) NMB_contain(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_endWith(id itemElementOrSubstring);
|
||||
NIMBLE_SHORT(id<NMBMatcher> endWith(id itemElementOrSubstring),
|
||||
NMB_endWith(itemElementOrSubstring));
|
||||
|
||||
NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void);
|
||||
NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void),
|
||||
NMB_raiseException());
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_match(id expectedValue);
|
||||
NIMBLE_SHORT(id<NMBMatcher> match(id expectedValue),
|
||||
NMB_match(expectedValue));
|
||||
|
||||
NIMBLE_EXPORT id<NMBMatcher> NMB_allPass(id matcher);
|
||||
NIMBLE_SHORT(id<NMBMatcher> allPass(id matcher),
|
||||
NMB_allPass(matcher));
|
||||
|
||||
// In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__,
|
||||
// define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout
|
||||
// and action arguments. See https://github.com/Quick/Quick/pull/185 for details.
|
||||
typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void)));
|
||||
typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void)));
|
||||
|
||||
NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line);
|
||||
NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line);
|
||||
|
||||
NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line);
|
||||
|
||||
#define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__)
|
||||
#define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__)
|
||||
|
||||
#ifndef NIMBLE_DISABLE_SHORT_SYNTAX
|
||||
#define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__)
|
||||
#define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__)
|
||||
#define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__)
|
||||
#define fail() failWithMessage(@"fail() always fails")
|
||||
|
||||
|
||||
#define waitUntilTimeout NMB_waitUntilTimeout
|
||||
#define waitUntil NMB_waitUntil
|
||||
#endif
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface NMBExceptionCapture : NSObject
|
||||
|
||||
- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally;
|
||||
- (void)tryBlock:(void(^)())unsafeBlock;
|
||||
|
||||
@end
|
||||
-364
@@ -1,364 +0,0 @@
|
||||
// Generated by Apple Swift version 2.0 (swiftlang-700.0.57.3 clang-700.0.72)
|
||||
#pragma clang diagnostic push
|
||||
|
||||
#if defined(__has_include) && __has_include(<swift/objc-prologue.h>)
|
||||
# include <swift/objc-prologue.h>
|
||||
#endif
|
||||
|
||||
#pragma clang diagnostic ignored "-Wauto-import"
|
||||
#include <objc/NSObject.h>
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#if defined(__has_include) && __has_include(<uchar.h>)
|
||||
# include <uchar.h>
|
||||
#elif !defined(__cplusplus) || __cplusplus < 201103L
|
||||
typedef uint_least16_t char16_t;
|
||||
typedef uint_least32_t char32_t;
|
||||
#endif
|
||||
|
||||
typedef struct _NSZone NSZone;
|
||||
|
||||
#if !defined(SWIFT_PASTE)
|
||||
# define SWIFT_PASTE_HELPER(x, y) x##y
|
||||
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
|
||||
#endif
|
||||
#if !defined(SWIFT_METATYPE)
|
||||
# define SWIFT_METATYPE(X) Class
|
||||
#endif
|
||||
|
||||
#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
|
||||
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
|
||||
#else
|
||||
# define SWIFT_RUNTIME_NAME(X)
|
||||
#endif
|
||||
#if defined(__has_attribute) && __has_attribute(swift_name)
|
||||
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
|
||||
#else
|
||||
# define SWIFT_COMPILE_NAME(X)
|
||||
#endif
|
||||
#if !defined(SWIFT_CLASS_EXTRA)
|
||||
# define SWIFT_CLASS_EXTRA
|
||||
#endif
|
||||
#if !defined(SWIFT_PROTOCOL_EXTRA)
|
||||
# define SWIFT_PROTOCOL_EXTRA
|
||||
#endif
|
||||
#if !defined(SWIFT_ENUM_EXTRA)
|
||||
# define SWIFT_ENUM_EXTRA
|
||||
#endif
|
||||
#if !defined(SWIFT_CLASS)
|
||||
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
|
||||
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
|
||||
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||
# else
|
||||
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(SWIFT_PROTOCOL)
|
||||
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
|
||||
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
|
||||
#endif
|
||||
|
||||
#if !defined(SWIFT_EXTENSION)
|
||||
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
|
||||
#endif
|
||||
|
||||
#if !defined(OBJC_DESIGNATED_INITIALIZER)
|
||||
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
|
||||
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
|
||||
# else
|
||||
# define OBJC_DESIGNATED_INITIALIZER
|
||||
# endif
|
||||
#endif
|
||||
#if !defined(SWIFT_ENUM)
|
||||
# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_EXTRA _name : _type
|
||||
#endif
|
||||
typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
|
||||
typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
|
||||
typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
|
||||
typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
|
||||
typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
|
||||
typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
|
||||
typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
|
||||
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
|
||||
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
|
||||
#if defined(__has_feature) && __has_feature(modules)
|
||||
@import ObjectiveC;
|
||||
@import Foundation;
|
||||
#endif
|
||||
|
||||
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
|
||||
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
|
||||
|
||||
|
||||
/// Encapsulates the failure message that matchers can report to the end user.
|
||||
///
|
||||
/// This is shared state between Nimble and matchers that mutate this value.
|
||||
SWIFT_CLASS("_TtC6Nimble14FailureMessage")
|
||||
@interface FailureMessage : NSObject
|
||||
@property (nonatomic, copy) NSString * __nonnull expected;
|
||||
@property (nonatomic, copy) NSString * __nullable actualValue;
|
||||
@property (nonatomic, copy) NSString * __nonnull to;
|
||||
@property (nonatomic, copy) NSString * __nonnull postfixMessage;
|
||||
@property (nonatomic, copy) NSString * __nonnull postfixActual;
|
||||
@property (nonatomic, copy) NSString * __nullable userDescription;
|
||||
@property (nonatomic, copy) NSString * __nonnull stringValue;
|
||||
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
|
||||
- (nonnull instancetype)initWithStringValue:(NSString * __nonnull)stringValue OBJC_DESIGNATED_INITIALIZER;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types that support only beEmpty()
|
||||
SWIFT_PROTOCOL("_TtP6Nimble13NMBCollection_")
|
||||
@protocol NMBCollection
|
||||
@property (nonatomic, readonly) NSInteger count;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.
|
||||
///
|
||||
/// Types that conform to Swift's Comparable protocol will work implicitly too
|
||||
SWIFT_PROTOCOL("_TtP6Nimble13NMBComparable_")
|
||||
@protocol NMBComparable
|
||||
- (NSComparisonResult)NMB_compare:(id <NMBComparable> __null_unspecified)otherObject;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types that support contain() matcher.
|
||||
SWIFT_PROTOCOL("_TtP6Nimble12NMBContainer_")
|
||||
@protocol NMBContainer
|
||||
- (BOOL)containsObject:(id __null_unspecified)object;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types to support beCloseTo() matcher
|
||||
SWIFT_PROTOCOL("_TtP6Nimble20NMBDoubleConvertible_")
|
||||
@protocol NMBDoubleConvertible
|
||||
@property (nonatomic, readonly) double doubleValue;
|
||||
@end
|
||||
|
||||
@protocol NMBMatcher;
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble14NMBExpectation")
|
||||
@interface NMBExpectation : NSObject
|
||||
- (nonnull instancetype)initWithActualBlock:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock negative:(BOOL)negative file:(NSString * __nonnull)file line:(NSUInteger)line OBJC_DESIGNATED_INITIALIZER;
|
||||
@property (nonatomic, readonly, copy) NMBExpectation * __nonnull (^ __nonnull withTimeout)(NSTimeInterval);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull to)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNot)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNotWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull notTo)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull notToWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventually)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventuallyWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventuallyNot)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toEventuallyNotWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNotEventually)(id <NMBMatcher> __nonnull);
|
||||
@property (nonatomic, readonly, copy) void (^ __nonnull toNotEventuallyWithDescription)(id <NMBMatcher> __nonnull, NSString * __nonnull);
|
||||
+ (void)failWithMessage:(NSString * __nonnull)message file:(NSString * __nonnull)file line:(NSUInteger)line;
|
||||
@end
|
||||
|
||||
@class SourceLocation;
|
||||
|
||||
|
||||
/// Objective-C interface to the Swift variant of Matcher.
|
||||
SWIFT_PROTOCOL("_TtP6Nimble10NMBMatcher_")
|
||||
@protocol NMBMatcher
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@end
|
||||
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble23NMBObjCBeCloseToMatcher")
|
||||
@interface NMBObjCBeCloseToMatcher : NSObject <NMBMatcher>
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualExpression failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualExpression failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@property (nonatomic, readonly, copy) NMBObjCBeCloseToMatcher * __nonnull (^ __nonnull within)(double);
|
||||
@end
|
||||
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble14NMBObjCMatcher")
|
||||
@interface NMBObjCMatcher : NSObject <NMBMatcher>
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beEmptyMatcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beIdenticalToMatcher:(NSObject * __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beginWithMatcher:(id __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beGreaterThanOrEqualToMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)containMatcher:(NSArray<NSObject *> * __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beGreaterThanMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beLessThanMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)equalMatcher:(NSObject * __nonnull)expected;
|
||||
@end
|
||||
|
||||
@class NSString;
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)matchMatcher:(NSString * __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)beAKindOfMatcher:(Class __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)allPassMatcher:(NMBObjCMatcher * __nonnull)matcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (id <NMBMatcher> __nonnull)beAnInstanceOfMatcher:(Class __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beLessThanOrEqualToMatcher:(id <NMBComparable> __nullable)expected;
|
||||
@end
|
||||
|
||||
@class NSNumber;
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCBeCloseToMatcher * __nonnull)beCloseToMatcher:(NSNumber * __nonnull)expected within:(double)within;
|
||||
@end
|
||||
|
||||
@class NMBObjCRaiseExceptionMatcher;
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCRaiseExceptionMatcher * __nonnull)raiseExceptionMatcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)endWithMatcher:(id __nonnull)expected;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beNilMatcher;
|
||||
@end
|
||||
|
||||
|
||||
@interface NMBObjCMatcher (SWIFT_EXTENSION(Nimble))
|
||||
+ (NMBObjCMatcher * __nonnull)beTruthyMatcher;
|
||||
+ (NMBObjCMatcher * __nonnull)beFalsyMatcher;
|
||||
+ (NMBObjCMatcher * __nonnull)beTrueMatcher;
|
||||
+ (NMBObjCMatcher * __nonnull)beFalseMatcher;
|
||||
@end
|
||||
|
||||
@class NSDictionary;
|
||||
@class NSException;
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble28NMBObjCRaiseExceptionMatcher")
|
||||
@interface NMBObjCRaiseExceptionMatcher : NSObject <NMBMatcher>
|
||||
- (BOOL)matches:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
- (BOOL)doesNotMatch:(NSObject * __null_unspecified (^ __nonnull)(void))actualBlock failureMessage:(FailureMessage * __nonnull)failureMessage location:(SourceLocation * __nonnull)location;
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull named)(NSString * __nonnull);
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull reason)(NSString * __nullable);
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull userInfo)(NSDictionary * __nullable);
|
||||
@property (nonatomic, readonly, copy) NMBObjCRaiseExceptionMatcher * __nonnull (^ __nonnull satisfyingBlock)(void (^ __nullable)(NSException * __nonnull));
|
||||
@end
|
||||
|
||||
|
||||
|
||||
/// Protocol for types that support beginWith(), endWith(), beEmpty() matchers
|
||||
SWIFT_PROTOCOL("_TtP6Nimble20NMBOrderedCollection_")
|
||||
@protocol NMBOrderedCollection <NMBCollection>
|
||||
- (NSInteger)indexOfObject:(id __null_unspecified)object;
|
||||
@end
|
||||
|
||||
|
||||
@interface NSArray (SWIFT_EXTENSION(Nimble)) <NMBContainer>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSArray (SWIFT_EXTENSION(Nimble)) <NMBOrderedCollection, NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSArray (SWIFT_EXTENSION(Nimble))
|
||||
@end
|
||||
|
||||
|
||||
@interface NSDictionary (SWIFT_EXTENSION(Nimble)) <NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSHashTable (SWIFT_EXTENSION(Nimble)) <NMBContainer>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSHashTable (SWIFT_EXTENSION(Nimble)) <NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSNumber (SWIFT_EXTENSION(Nimble)) <NMBDoubleConvertible>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSNumber (SWIFT_EXTENSION(Nimble)) <NMBComparable>
|
||||
- (NSComparisonResult)NMB_compare:(id <NMBComparable> __null_unspecified)otherObject;
|
||||
@end
|
||||
|
||||
|
||||
@interface NSSet (SWIFT_EXTENSION(Nimble)) <NMBCollection>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSSet (SWIFT_EXTENSION(Nimble)) <NMBContainer>
|
||||
@end
|
||||
|
||||
|
||||
@interface NSString (SWIFT_EXTENSION(Nimble)) <NMBComparable>
|
||||
- (NSComparisonResult)NMB_compare:(id <NMBComparable> __null_unspecified)otherObject;
|
||||
@end
|
||||
|
||||
|
||||
SWIFT_CLASS("_TtC6Nimble14SourceLocation")
|
||||
@interface SourceLocation : NSObject
|
||||
@property (nonatomic, readonly, copy) NSString * __nonnull file;
|
||||
@property (nonatomic, readonly) NSUInteger line;
|
||||
@property (nonatomic, readonly, copy) NSString * __nonnull description;
|
||||
@end
|
||||
|
||||
#pragma clang diagnostic pop
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Nimble/NMBExceptionCapture.h>
|
||||
#import <Nimble/DSL.h>
|
||||
|
||||
FOUNDATION_EXPORT double NimbleVersionNumber;
|
||||
FOUNDATION_EXPORT const unsigned char NimbleVersionString[];
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
-10
@@ -1,10 +0,0 @@
|
||||
framework module Nimble {
|
||||
umbrella header "Nimble.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
|
||||
module Nimble.Swift {
|
||||
header "Nimble-Swift.h"
|
||||
}
|
||||
BIN
Binary file not shown.
-183
@@ -1,183 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>files</key>
|
||||
<dict>
|
||||
<key>Headers/DSL.h</key>
|
||||
<data>
|
||||
auYzCIxlY2jTkyI1BlljW3KUTJY=
|
||||
</data>
|
||||
<key>Headers/NMBExceptionCapture.h</key>
|
||||
<data>
|
||||
ncXv+PqMUjLHOJpiFz6BKmTAq5o=
|
||||
</data>
|
||||
<key>Headers/Nimble-Swift.h</key>
|
||||
<data>
|
||||
ix7zUf4GFfA4sevTnSKvAsAN3xM=
|
||||
</data>
|
||||
<key>Headers/Nimble.h</key>
|
||||
<data>
|
||||
HXkPd6XbqY7QmdFCpOCNIHhI4v0=
|
||||
</data>
|
||||
<key>Info.plist</key>
|
||||
<data>
|
||||
m9rBh3svN6G89okFeorwD5OH+2g=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm.swiftdoc</key>
|
||||
<data>
|
||||
lSaVfyH8XbRz0WDbmqKJxc5QtbY=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm.swiftmodule</key>
|
||||
<data>
|
||||
NseDOVaErTA347+6KjeL5eI3+kI=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm64.swiftdoc</key>
|
||||
<data>
|
||||
6W52hA33Ca+9qq8Yiql4aY8+0Rk=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm64.swiftmodule</key>
|
||||
<data>
|
||||
Yn3aQiLuskjb8JCg2+JAqYVrN/Y=
|
||||
</data>
|
||||
<key>Modules/module.modulemap</key>
|
||||
<data>
|
||||
HraXvk1VTxnsGdY8oSlKGNkdg60=
|
||||
</data>
|
||||
</dict>
|
||||
<key>files2</key>
|
||||
<dict>
|
||||
<key>Headers/DSL.h</key>
|
||||
<data>
|
||||
auYzCIxlY2jTkyI1BlljW3KUTJY=
|
||||
</data>
|
||||
<key>Headers/NMBExceptionCapture.h</key>
|
||||
<data>
|
||||
ncXv+PqMUjLHOJpiFz6BKmTAq5o=
|
||||
</data>
|
||||
<key>Headers/Nimble-Swift.h</key>
|
||||
<data>
|
||||
ix7zUf4GFfA4sevTnSKvAsAN3xM=
|
||||
</data>
|
||||
<key>Headers/Nimble.h</key>
|
||||
<data>
|
||||
HXkPd6XbqY7QmdFCpOCNIHhI4v0=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm.swiftdoc</key>
|
||||
<data>
|
||||
lSaVfyH8XbRz0WDbmqKJxc5QtbY=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm.swiftmodule</key>
|
||||
<data>
|
||||
NseDOVaErTA347+6KjeL5eI3+kI=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm64.swiftdoc</key>
|
||||
<data>
|
||||
6W52hA33Ca+9qq8Yiql4aY8+0Rk=
|
||||
</data>
|
||||
<key>Modules/Nimble.swiftmodule/arm64.swiftmodule</key>
|
||||
<data>
|
||||
Yn3aQiLuskjb8JCg2+JAqYVrN/Y=
|
||||
</data>
|
||||
<key>Modules/module.modulemap</key>
|
||||
<data>
|
||||
HraXvk1VTxnsGdY8oSlKGNkdg60=
|
||||
</data>
|
||||
</dict>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^[^/]+$</key>
|
||||
<dict>
|
||||
<key>nested</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>10</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Lukas Kubanek
|
||||
Copyright © 2015-2021 Lukas Kubanek
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -7,260 +7,276 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
803F9CD51B92324C002F728F /* OrderedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 803F9CD21B92324C002F728F /* OrderedDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
803F9CD81B9232EE002F728F /* OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803F9CD71B9232EE002F728F /* OrderedDictionary.swift */; settings = {ASSET_TAGS = (); }; };
|
||||
803F9CF41B925B1C002F728F /* OrderedDictionary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 803F9CC61B923207002F728F /* OrderedDictionary.framework */; settings = {ASSET_TAGS = (); }; };
|
||||
803F9CFD1B925B4C002F728F /* OrderedDictionaryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803F9CFC1B925B4C002F728F /* OrderedDictionaryTests.swift */; settings = {ASSET_TAGS = (); }; };
|
||||
803F9D001B925BBF002F728F /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 803F9CE91B925AE5002F728F /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
803F9D011B925BE9002F728F /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 803F9CE91B925AE5002F728F /* Nimble.framework */; };
|
||||
8060976B1B92F2D200DB20CF /* OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803F9CD71B9232EE002F728F /* OrderedDictionary.swift */; };
|
||||
8060976C1B92F2D900DB20CF /* OrderedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 803F9CD21B92324C002F728F /* OrderedDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
806097761B92F44F00DB20CF /* OrderedDictionary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 806097631B92F20400DB20CF /* OrderedDictionary.framework */; settings = {ASSET_TAGS = (); }; };
|
||||
8060977C1B92F4A000DB20CF /* OrderedDictionaryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803F9CFC1B925B4C002F728F /* OrderedDictionaryTests.swift */; };
|
||||
806097801B92F4F000DB20CF /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8060977F1B92F4F000DB20CF /* Nimble.framework */; settings = {ASSET_TAGS = (); }; };
|
||||
806097821B92F4FC00DB20CF /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8060977F1B92F4F000DB20CF /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
8048C8AB22D8911B0086B88B /* OrderedDictionary+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8048C8AA22D8911B0086B88B /* OrderedDictionary+Deprecated.swift */; };
|
||||
8048C8AC22D8911B0086B88B /* OrderedDictionary+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8048C8AA22D8911B0086B88B /* OrderedDictionary+Deprecated.swift */; };
|
||||
8055B0421E201C5D009DC3EE /* OrderedDictionary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8055B0381E201C5D009DC3EE /* OrderedDictionary.framework */; };
|
||||
80A203A11F3F483700622481 /* OrderedDictionary+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A203A01F3F483700622481 /* OrderedDictionary+Codable.swift */; };
|
||||
80A203A21F3F4C1F00622481 /* OrderedDictionary+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A203A01F3F483700622481 /* OrderedDictionary+Codable.swift */; };
|
||||
80B28EA01E201EC9007E3A77 /* OrderedDictionary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80B28E971E201EC8007E3A77 /* OrderedDictionary.framework */; };
|
||||
80BE579A252B278D00F85D45 /* XCTUnwrapShim.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE5799252B278D00F85D45 /* XCTUnwrapShim.swift */; };
|
||||
80BE579B252B278D00F85D45 /* XCTUnwrapShim.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE5799252B278D00F85D45 /* XCTUnwrapShim.swift */; };
|
||||
80BE57A5252B3F6000F85D45 /* SubscriptAmbiguityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE57A4252B3F6000F85D45 /* SubscriptAmbiguityTests.swift */; };
|
||||
80BE57A6252B3F6000F85D45 /* SubscriptAmbiguityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE57A4252B3F6000F85D45 /* SubscriptAmbiguityTests.swift */; };
|
||||
80BE57D4252BAB9400F85D45 /* OrderedDictionarySlice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE57D3252BAB9400F85D45 /* OrderedDictionarySlice.swift */; };
|
||||
80BE57D5252BAB9400F85D45 /* OrderedDictionarySlice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE57D3252BAB9400F85D45 /* OrderedDictionarySlice.swift */; };
|
||||
80BE57DF252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE57DE252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift */; };
|
||||
80BE57E0252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BE57DE252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift */; };
|
||||
80BFD01B252B049E002B3C05 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD01A252B049E002B3C05 /* InitializationTests.swift */; };
|
||||
80BFD01C252B049E002B3C05 /* InitializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD01A252B049E002B3C05 /* InitializationTests.swift */; };
|
||||
80BFD02A252B069F002B3C05 /* SortingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD029252B069F002B3C05 /* SortingTests.swift */; };
|
||||
80BFD02B252B069F002B3C05 /* SortingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD029252B069F002B3C05 /* SortingTests.swift */; };
|
||||
80BFD031252B06EB002B3C05 /* DescriptionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD030252B06EB002B3C05 /* DescriptionTests.swift */; };
|
||||
80BFD032252B06EB002B3C05 /* DescriptionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD030252B06EB002B3C05 /* DescriptionTests.swift */; };
|
||||
80BFD040252B0740002B3C05 /* CodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD03F252B0740002B3C05 /* CodingTests.swift */; };
|
||||
80BFD041252B0740002B3C05 /* CodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD03F252B0740002B3C05 /* CodingTests.swift */; };
|
||||
80BFD04B252B0951002B3C05 /* CapacityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD04A252B0951002B3C05 /* CapacityTests.swift */; };
|
||||
80BFD04C252B0951002B3C05 /* CapacityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD04A252B0951002B3C05 /* CapacityTests.swift */; };
|
||||
80BFD052252B09DC002B3C05 /* ReorderingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD051252B09DC002B3C05 /* ReorderingTests.swift */; };
|
||||
80BFD053252B09DC002B3C05 /* ReorderingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD051252B09DC002B3C05 /* ReorderingTests.swift */; };
|
||||
80BFD061252B0A7F002B3C05 /* RemovalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD060252B0A7F002B3C05 /* RemovalTests.swift */; };
|
||||
80BFD062252B0A7F002B3C05 /* RemovalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD060252B0A7F002B3C05 /* RemovalTests.swift */; };
|
||||
80BFD070252B0C16002B3C05 /* AccessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD06F252B0C16002B3C05 /* AccessTests.swift */; };
|
||||
80BFD071252B0C16002B3C05 /* AccessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD06F252B0C16002B3C05 /* AccessTests.swift */; };
|
||||
80BFD077252B0D94002B3C05 /* MapFilterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD076252B0D94002B3C05 /* MapFilterTests.swift */; };
|
||||
80BFD078252B0D94002B3C05 /* MapFilterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD076252B0D94002B3C05 /* MapFilterTests.swift */; };
|
||||
80BFD07E252B0E19002B3C05 /* UpdatesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD07D252B0E19002B3C05 /* UpdatesTests.swift */; };
|
||||
80BFD07F252B0E19002B3C05 /* UpdatesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD07D252B0E19002B3C05 /* UpdatesTests.swift */; };
|
||||
80BFD0A8252B1C96002B3C05 /* InsertionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD0A7252B1C96002B3C05 /* InsertionsTests.swift */; };
|
||||
80BFD0A9252B1C96002B3C05 /* InsertionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFD0A7252B1C96002B3C05 /* InsertionsTests.swift */; };
|
||||
80E8E21D1E20301E00395E49 /* OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E8E21C1E20301E00395E49 /* OrderedDictionary.swift */; };
|
||||
80E8E21F1E20425B00395E49 /* OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E8E21C1E20301E00395E49 /* OrderedDictionary.swift */; };
|
||||
80E8E2301E2133D100395E49 /* OrderedDictionary+Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E8E22F1E2133D100395E49 /* OrderedDictionary+Description.swift */; };
|
||||
80E8E2311E2133D100395E49 /* OrderedDictionary+Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E8E22F1E2133D100395E49 /* OrderedDictionary+Description.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
803F9CF51B925B1C002F728F /* PBXContainerItemProxy */ = {
|
||||
8055B0431E201C5D009DC3EE /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 803F9CBD1B923207002F728F /* Project object */;
|
||||
containerPortal = 8055B02F1E201C5D009DC3EE /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 803F9CC51B923207002F728F;
|
||||
remoteGlobalIDString = 8055B0371E201C5D009DC3EE;
|
||||
remoteInfo = OrderedDictionary;
|
||||
};
|
||||
806097771B92F44F00DB20CF /* PBXContainerItemProxy */ = {
|
||||
80B28EA11E201EC9007E3A77 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 803F9CBD1B923207002F728F /* Project object */;
|
||||
containerPortal = 8055B02F1E201C5D009DC3EE /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 806097621B92F20400DB20CF;
|
||||
remoteGlobalIDString = 80B28E961E201EC8007E3A77;
|
||||
remoteInfo = "OrderedDictionary-iOS";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
803F9CFF1B925BA2002F728F /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
803F9D001B925BBF002F728F /* Nimble.framework in CopyFiles */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
806097811B92F4F500DB20CF /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
806097821B92F4FC00DB20CF /* Nimble.framework in CopyFiles */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
803F9CC61B923207002F728F /* OrderedDictionary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedDictionary.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
803F9CD21B92324C002F728F /* OrderedDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrderedDictionary.h; sourceTree = "<group>"; };
|
||||
803F9CD41B92324C002F728F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
803F9CD71B9232EE002F728F /* OrderedDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedDictionary.swift; sourceTree = "<group>"; };
|
||||
803F9CE91B925AE5002F728F /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/Mac/Nimble.framework; sourceTree = "<group>"; };
|
||||
803F9CEF1B925B1C002F728F /* OrderedDictionary-OSX-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OrderedDictionary-OSX-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
803F9CFC1B925B4C002F728F /* OrderedDictionaryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedDictionaryTests.swift; sourceTree = "<group>"; };
|
||||
803F9CFE1B925B56002F728F /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-Tests.plist"; path = "Supporting Files/Info-Tests.plist"; sourceTree = SOURCE_ROOT; };
|
||||
806097631B92F20400DB20CF /* OrderedDictionary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedDictionary.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
806097711B92F44F00DB20CF /* OrderedDictionary-iOS-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OrderedDictionary-iOS-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8060977F1B92F4F000DB20CF /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/iOS/Nimble.framework; sourceTree = "<group>"; };
|
||||
80F94F181B926A60000A96E7 /* OrderedDictionary.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = OrderedDictionary.playground; sourceTree = "<group>"; };
|
||||
8048C8AA22D8911B0086B88B /* OrderedDictionary+Deprecated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderedDictionary+Deprecated.swift"; sourceTree = "<group>"; };
|
||||
8055B0381E201C5D009DC3EE /* OrderedDictionary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedDictionary.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8055B0411E201C5D009DC3EE /* OrderedDictionary_Mac_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OrderedDictionary_Mac_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
80A203A01F3F483700622481 /* OrderedDictionary+Codable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderedDictionary+Codable.swift"; sourceTree = "<group>"; };
|
||||
80B28E971E201EC8007E3A77 /* OrderedDictionary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedDictionary.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
80B28E9F1E201EC9007E3A77 /* OrderedDictionary_iOS_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OrderedDictionary_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
80B28EB41E201F81007E3A77 /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Tests.plist"; sourceTree = "<group>"; };
|
||||
80B28EB51E201F81007E3A77 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
80BE5799252B278D00F85D45 /* XCTUnwrapShim.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTUnwrapShim.swift; sourceTree = "<group>"; };
|
||||
80BE57A4252B3F6000F85D45 /* SubscriptAmbiguityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptAmbiguityTests.swift; sourceTree = "<group>"; };
|
||||
80BE57D3252BAB9400F85D45 /* OrderedDictionarySlice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderedDictionarySlice.swift; sourceTree = "<group>"; };
|
||||
80BE57DE252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Dictionary+OrderedDictionary.swift"; sourceTree = "<group>"; };
|
||||
80BFD01A252B049E002B3C05 /* InitializationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitializationTests.swift; sourceTree = "<group>"; };
|
||||
80BFD029252B069F002B3C05 /* SortingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortingTests.swift; sourceTree = "<group>"; };
|
||||
80BFD030252B06EB002B3C05 /* DescriptionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DescriptionTests.swift; sourceTree = "<group>"; };
|
||||
80BFD03F252B0740002B3C05 /* CodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodingTests.swift; sourceTree = "<group>"; };
|
||||
80BFD04A252B0951002B3C05 /* CapacityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CapacityTests.swift; sourceTree = "<group>"; };
|
||||
80BFD051252B09DC002B3C05 /* ReorderingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReorderingTests.swift; sourceTree = "<group>"; };
|
||||
80BFD060252B0A7F002B3C05 /* RemovalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemovalTests.swift; sourceTree = "<group>"; };
|
||||
80BFD06F252B0C16002B3C05 /* AccessTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessTests.swift; sourceTree = "<group>"; };
|
||||
80BFD076252B0D94002B3C05 /* MapFilterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapFilterTests.swift; sourceTree = "<group>"; };
|
||||
80BFD07D252B0E19002B3C05 /* UpdatesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdatesTests.swift; sourceTree = "<group>"; };
|
||||
80BFD0A7252B1C96002B3C05 /* InsertionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionsTests.swift; sourceTree = "<group>"; };
|
||||
80DE329220F4CAFA0053EDA7 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
|
||||
80DE329320F4DD910053EDA7 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||
80DE329420F4DD910053EDA7 /* LICENSE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = "<group>"; };
|
||||
80E8E21C1E20301E00395E49 /* OrderedDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedDictionary.swift; sourceTree = "<group>"; };
|
||||
80E8E22F1E2133D100395E49 /* OrderedDictionary+Description.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "OrderedDictionary+Description.swift"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
803F9CC21B923207002F728F /* Frameworks */ = {
|
||||
8055B0341E201C5D009DC3EE /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
803F9CEC1B925B1C002F728F /* Frameworks */ = {
|
||||
8055B03E1E201C5D009DC3EE /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
803F9CF41B925B1C002F728F /* OrderedDictionary.framework in Frameworks */,
|
||||
803F9D011B925BE9002F728F /* Nimble.framework in Frameworks */,
|
||||
8055B0421E201C5D009DC3EE /* OrderedDictionary.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
8060975F1B92F20400DB20CF /* Frameworks */ = {
|
||||
80B28E931E201EC8007E3A77 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
8060976E1B92F44F00DB20CF /* Frameworks */ = {
|
||||
80B28E9C1E201EC9007E3A77 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
806097761B92F44F00DB20CF /* OrderedDictionary.framework in Frameworks */,
|
||||
806097801B92F4F000DB20CF /* Nimble.framework in Frameworks */,
|
||||
80B28EA01E201EC9007E3A77 /* OrderedDictionary.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
803F9CBC1B923207002F728F = {
|
||||
8055B02E1E201C5D009DC3EE = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
803F9CD11B92324C002F728F /* Sources */,
|
||||
80F94F171B926A60000A96E7 /* Playgrounds */,
|
||||
803F9CFB1B925B4C002F728F /* Tests */,
|
||||
803F9CD31B92324C002F728F /* Supporting Files */,
|
||||
803F9CE81B9259F3002F728F /* Frameworks */,
|
||||
803F9CC71B923207002F728F /* Products */,
|
||||
80DE329320F4DD910053EDA7 /* README.md */,
|
||||
80DE329420F4DD910053EDA7 /* LICENSE.md */,
|
||||
80DE329220F4CAFA0053EDA7 /* Package.swift */,
|
||||
8055B0521E201D24009DC3EE /* Sources */,
|
||||
8055B0571E201DF3009DC3EE /* Tests */,
|
||||
80B28EB31E201F81007E3A77 /* Supporting Files */,
|
||||
8055B0391E201C5D009DC3EE /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
803F9CC71B923207002F728F /* Products */ = {
|
||||
8055B0391E201C5D009DC3EE /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
803F9CC61B923207002F728F /* OrderedDictionary.framework */,
|
||||
803F9CEF1B925B1C002F728F /* OrderedDictionary-OSX-Tests.xctest */,
|
||||
806097631B92F20400DB20CF /* OrderedDictionary.framework */,
|
||||
806097711B92F44F00DB20CF /* OrderedDictionary-iOS-Tests.xctest */,
|
||||
8055B0381E201C5D009DC3EE /* OrderedDictionary.framework */,
|
||||
8055B0411E201C5D009DC3EE /* OrderedDictionary_Mac_Tests.xctest */,
|
||||
80B28E971E201EC8007E3A77 /* OrderedDictionary.framework */,
|
||||
80B28E9F1E201EC9007E3A77 /* OrderedDictionary_iOS_Tests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
803F9CD11B92324C002F728F /* Sources */ = {
|
||||
8055B0521E201D24009DC3EE /* Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
803F9CD21B92324C002F728F /* OrderedDictionary.h */,
|
||||
803F9CD71B9232EE002F728F /* OrderedDictionary.swift */,
|
||||
80B7BC2B261A65C100EB2CA2 /* OrderedDictionary */,
|
||||
);
|
||||
path = Sources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
803F9CD31B92324C002F728F /* Supporting Files */ = {
|
||||
8055B0571E201DF3009DC3EE /* Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
803F9CD41B92324C002F728F /* Info.plist */,
|
||||
803F9CFE1B925B56002F728F /* Info-Tests.plist */,
|
||||
);
|
||||
path = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
803F9CE81B9259F3002F728F /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8060977D1B92F4D900DB20CF /* OSX */,
|
||||
8060977E1B92F4DF00DB20CF /* iOS */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
803F9CFB1B925B4C002F728F /* Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
803F9CFC1B925B4C002F728F /* OrderedDictionaryTests.swift */,
|
||||
80AF1630252A48080065B656 /* OrderedDictionaryTests */,
|
||||
);
|
||||
path = Tests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8060977D1B92F4D900DB20CF /* OSX */ = {
|
||||
80AF1630252A48080065B656 /* OrderedDictionaryTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
803F9CE91B925AE5002F728F /* Nimble.framework */,
|
||||
80BFD01A252B049E002B3C05 /* InitializationTests.swift */,
|
||||
80BFD06F252B0C16002B3C05 /* AccessTests.swift */,
|
||||
80BFD0A7252B1C96002B3C05 /* InsertionsTests.swift */,
|
||||
80BFD07D252B0E19002B3C05 /* UpdatesTests.swift */,
|
||||
80BFD060252B0A7F002B3C05 /* RemovalTests.swift */,
|
||||
80BE57A4252B3F6000F85D45 /* SubscriptAmbiguityTests.swift */,
|
||||
80BFD076252B0D94002B3C05 /* MapFilterTests.swift */,
|
||||
80BFD051252B09DC002B3C05 /* ReorderingTests.swift */,
|
||||
80BFD029252B069F002B3C05 /* SortingTests.swift */,
|
||||
80BFD04A252B0951002B3C05 /* CapacityTests.swift */,
|
||||
80BFD03F252B0740002B3C05 /* CodingTests.swift */,
|
||||
80BFD030252B06EB002B3C05 /* DescriptionTests.swift */,
|
||||
80BE5799252B278D00F85D45 /* XCTUnwrapShim.swift */,
|
||||
);
|
||||
name = OSX;
|
||||
path = OrderedDictionaryTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8060977E1B92F4DF00DB20CF /* iOS */ = {
|
||||
80B28EB31E201F81007E3A77 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8060977F1B92F4F000DB20CF /* Nimble.framework */,
|
||||
80B28EB51E201F81007E3A77 /* Info.plist */,
|
||||
80B28EB41E201F81007E3A77 /* Info-Tests.plist */,
|
||||
);
|
||||
name = iOS;
|
||||
path = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
80F94F171B926A60000A96E7 /* Playgrounds */ = {
|
||||
80B7BC2B261A65C100EB2CA2 /* OrderedDictionary */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
80F94F181B926A60000A96E7 /* OrderedDictionary.playground */,
|
||||
80E8E21C1E20301E00395E49 /* OrderedDictionary.swift */,
|
||||
80A203A01F3F483700622481 /* OrderedDictionary+Codable.swift */,
|
||||
80E8E22F1E2133D100395E49 /* OrderedDictionary+Description.swift */,
|
||||
8048C8AA22D8911B0086B88B /* OrderedDictionary+Deprecated.swift */,
|
||||
80BE57D3252BAB9400F85D45 /* OrderedDictionarySlice.swift */,
|
||||
80BE57DE252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift */,
|
||||
);
|
||||
path = Playgrounds;
|
||||
path = OrderedDictionary;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
803F9CC31B923207002F728F /* Headers */ = {
|
||||
8055B0351E201C5D009DC3EE /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
803F9CD51B92324C002F728F /* OrderedDictionary.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
806097601B92F20400DB20CF /* Headers */ = {
|
||||
80B28E941E201EC8007E3A77 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8060976C1B92F2D900DB20CF /* OrderedDictionary.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
803F9CC51B923207002F728F /* OrderedDictionary-OSX */ = {
|
||||
8055B0371E201C5D009DC3EE /* OrderedDictionary-Mac */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 803F9CCE1B923207002F728F /* Build configuration list for PBXNativeTarget "OrderedDictionary-OSX" */;
|
||||
buildConfigurationList = 8055B04C1E201C5D009DC3EE /* Build configuration list for PBXNativeTarget "OrderedDictionary-Mac" */;
|
||||
buildPhases = (
|
||||
803F9CC11B923207002F728F /* Sources */,
|
||||
803F9CC21B923207002F728F /* Frameworks */,
|
||||
803F9CC31B923207002F728F /* Headers */,
|
||||
803F9CC41B923207002F728F /* Resources */,
|
||||
8055B0331E201C5D009DC3EE /* Sources */,
|
||||
8055B0341E201C5D009DC3EE /* Frameworks */,
|
||||
8055B0351E201C5D009DC3EE /* Headers */,
|
||||
8055B0361E201C5D009DC3EE /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "OrderedDictionary-OSX";
|
||||
name = "OrderedDictionary-Mac";
|
||||
productName = OrderedDictionary;
|
||||
productReference = 803F9CC61B923207002F728F /* OrderedDictionary.framework */;
|
||||
productReference = 8055B0381E201C5D009DC3EE /* OrderedDictionary.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
803F9CEE1B925B1C002F728F /* OrderedDictionary-OSX-Tests */ = {
|
||||
8055B0401E201C5D009DC3EE /* OrderedDictionary-Mac-Tests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 803F9CF71B925B1C002F728F /* Build configuration list for PBXNativeTarget "OrderedDictionary-OSX-Tests" */;
|
||||
buildConfigurationList = 8055B04F1E201C5D009DC3EE /* Build configuration list for PBXNativeTarget "OrderedDictionary-Mac-Tests" */;
|
||||
buildPhases = (
|
||||
803F9CEB1B925B1C002F728F /* Sources */,
|
||||
803F9CEC1B925B1C002F728F /* Frameworks */,
|
||||
803F9CED1B925B1C002F728F /* Resources */,
|
||||
803F9CFF1B925BA2002F728F /* CopyFiles */,
|
||||
8055B03D1E201C5D009DC3EE /* Sources */,
|
||||
8055B03E1E201C5D009DC3EE /* Frameworks */,
|
||||
8055B03F1E201C5D009DC3EE /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
803F9CF61B925B1C002F728F /* PBXTargetDependency */,
|
||||
8055B0441E201C5D009DC3EE /* PBXTargetDependency */,
|
||||
);
|
||||
name = "OrderedDictionary-OSX-Tests";
|
||||
name = "OrderedDictionary-Mac-Tests";
|
||||
productName = OrderedDictionaryTests;
|
||||
productReference = 803F9CEF1B925B1C002F728F /* OrderedDictionary-OSX-Tests.xctest */;
|
||||
productReference = 8055B0411E201C5D009DC3EE /* OrderedDictionary_Mac_Tests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
806097621B92F20400DB20CF /* OrderedDictionary-iOS */ = {
|
||||
80B28E961E201EC8007E3A77 /* OrderedDictionary-iOS */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 806097681B92F20400DB20CF /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS" */;
|
||||
buildConfigurationList = 80B28EA81E201EC9007E3A77 /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS" */;
|
||||
buildPhases = (
|
||||
8060975E1B92F20400DB20CF /* Sources */,
|
||||
8060975F1B92F20400DB20CF /* Frameworks */,
|
||||
806097601B92F20400DB20CF /* Headers */,
|
||||
806097611B92F20400DB20CF /* Resources */,
|
||||
80B28E921E201EC8007E3A77 /* Sources */,
|
||||
80B28E931E201EC8007E3A77 /* Frameworks */,
|
||||
80B28E941E201EC8007E3A77 /* Headers */,
|
||||
80B28E951E201EC8007E3A77 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -268,95 +284,103 @@
|
||||
);
|
||||
name = "OrderedDictionary-iOS";
|
||||
productName = "OrderedDictionary-iOS";
|
||||
productReference = 806097631B92F20400DB20CF /* OrderedDictionary.framework */;
|
||||
productReference = 80B28E971E201EC8007E3A77 /* OrderedDictionary.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
806097701B92F44F00DB20CF /* OrderedDictionary-iOS-Tests */ = {
|
||||
80B28E9E1E201EC9007E3A77 /* OrderedDictionary-iOS-Tests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 806097791B92F44F00DB20CF /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS-Tests" */;
|
||||
buildConfigurationList = 80B28EAB1E201EC9007E3A77 /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS-Tests" */;
|
||||
buildPhases = (
|
||||
8060976D1B92F44F00DB20CF /* Sources */,
|
||||
8060976E1B92F44F00DB20CF /* Frameworks */,
|
||||
8060976F1B92F44F00DB20CF /* Resources */,
|
||||
806097811B92F4F500DB20CF /* CopyFiles */,
|
||||
80B28E9B1E201EC9007E3A77 /* Sources */,
|
||||
80B28E9C1E201EC9007E3A77 /* Frameworks */,
|
||||
80B28E9D1E201EC9007E3A77 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
806097781B92F44F00DB20CF /* PBXTargetDependency */,
|
||||
80B28EA21E201EC9007E3A77 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "OrderedDictionary-iOS-Tests";
|
||||
productName = "OrderedDictionary-iOS-Tests";
|
||||
productReference = 806097711B92F44F00DB20CF /* OrderedDictionary-iOS-Tests.xctest */;
|
||||
productName = "OrderedDictionary-iOSTests";
|
||||
productReference = 80B28E9F1E201EC9007E3A77 /* OrderedDictionary_iOS_Tests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
803F9CBD1B923207002F728F /* Project object */ = {
|
||||
8055B02F1E201C5D009DC3EE /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0700;
|
||||
LastUpgradeCheck = 0700;
|
||||
LastSwiftUpdateCheck = 0820;
|
||||
LastUpgradeCheck = 1320;
|
||||
ORGANIZATIONNAME = "Lukas Kubanek";
|
||||
TargetAttributes = {
|
||||
803F9CC51B923207002F728F = {
|
||||
CreatedOnToolsVersion = 7.0;
|
||||
8055B0371E201C5D009DC3EE = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
LastSwiftMigration = 1020;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
803F9CEE1B925B1C002F728F = {
|
||||
CreatedOnToolsVersion = 7.0;
|
||||
8055B0401E201C5D009DC3EE = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
LastSwiftMigration = 1020;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
806097621B92F20400DB20CF = {
|
||||
CreatedOnToolsVersion = 7.0;
|
||||
80B28E961E201EC8007E3A77 = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
LastSwiftMigration = 1020;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
806097701B92F44F00DB20CF = {
|
||||
CreatedOnToolsVersion = 7.0;
|
||||
80B28E9E1E201EC9007E3A77 = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
LastSwiftMigration = 1020;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 803F9CC01B923207002F728F /* Build configuration list for PBXProject "OrderedDictionary" */;
|
||||
buildConfigurationList = 8055B0321E201C5D009DC3EE /* Build configuration list for PBXProject "OrderedDictionary" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 803F9CBC1B923207002F728F;
|
||||
productRefGroup = 803F9CC71B923207002F728F /* Products */;
|
||||
mainGroup = 8055B02E1E201C5D009DC3EE;
|
||||
productRefGroup = 8055B0391E201C5D009DC3EE /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
803F9CC51B923207002F728F /* OrderedDictionary-OSX */,
|
||||
803F9CEE1B925B1C002F728F /* OrderedDictionary-OSX-Tests */,
|
||||
806097621B92F20400DB20CF /* OrderedDictionary-iOS */,
|
||||
806097701B92F44F00DB20CF /* OrderedDictionary-iOS-Tests */,
|
||||
8055B0371E201C5D009DC3EE /* OrderedDictionary-Mac */,
|
||||
8055B0401E201C5D009DC3EE /* OrderedDictionary-Mac-Tests */,
|
||||
80B28E961E201EC8007E3A77 /* OrderedDictionary-iOS */,
|
||||
80B28E9E1E201EC9007E3A77 /* OrderedDictionary-iOS-Tests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
803F9CC41B923207002F728F /* Resources */ = {
|
||||
8055B0361E201C5D009DC3EE /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
803F9CED1B925B1C002F728F /* Resources */ = {
|
||||
8055B03F1E201C5D009DC3EE /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
806097611B92F20400DB20CF /* Resources */ = {
|
||||
80B28E951E201EC8007E3A77 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
8060976F1B92F44F00DB20CF /* Resources */ = {
|
||||
80B28E9D1E201EC9007E3A77 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
@@ -366,71 +390,120 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
803F9CC11B923207002F728F /* Sources */ = {
|
||||
8055B0331E201C5D009DC3EE /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
803F9CD81B9232EE002F728F /* OrderedDictionary.swift in Sources */,
|
||||
8048C8AB22D8911B0086B88B /* OrderedDictionary+Deprecated.swift in Sources */,
|
||||
80E8E2301E2133D100395E49 /* OrderedDictionary+Description.swift in Sources */,
|
||||
80E8E21D1E20301E00395E49 /* OrderedDictionary.swift in Sources */,
|
||||
80BE57D4252BAB9400F85D45 /* OrderedDictionarySlice.swift in Sources */,
|
||||
80A203A11F3F483700622481 /* OrderedDictionary+Codable.swift in Sources */,
|
||||
80BE57DF252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
803F9CEB1B925B1C002F728F /* Sources */ = {
|
||||
8055B03D1E201C5D009DC3EE /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
803F9CFD1B925B4C002F728F /* OrderedDictionaryTests.swift in Sources */,
|
||||
80BFD061252B0A7F002B3C05 /* RemovalTests.swift in Sources */,
|
||||
80BFD031252B06EB002B3C05 /* DescriptionTests.swift in Sources */,
|
||||
80BFD077252B0D94002B3C05 /* MapFilterTests.swift in Sources */,
|
||||
80BFD070252B0C16002B3C05 /* AccessTests.swift in Sources */,
|
||||
80BFD052252B09DC002B3C05 /* ReorderingTests.swift in Sources */,
|
||||
80BFD04B252B0951002B3C05 /* CapacityTests.swift in Sources */,
|
||||
80BFD02A252B069F002B3C05 /* SortingTests.swift in Sources */,
|
||||
80BFD07E252B0E19002B3C05 /* UpdatesTests.swift in Sources */,
|
||||
80BFD0A8252B1C96002B3C05 /* InsertionsTests.swift in Sources */,
|
||||
80BFD040252B0740002B3C05 /* CodingTests.swift in Sources */,
|
||||
80BE57A5252B3F6000F85D45 /* SubscriptAmbiguityTests.swift in Sources */,
|
||||
80BFD01B252B049E002B3C05 /* InitializationTests.swift in Sources */,
|
||||
80BE579A252B278D00F85D45 /* XCTUnwrapShim.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
8060975E1B92F20400DB20CF /* Sources */ = {
|
||||
80B28E921E201EC8007E3A77 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8060976B1B92F2D200DB20CF /* OrderedDictionary.swift in Sources */,
|
||||
8048C8AC22D8911B0086B88B /* OrderedDictionary+Deprecated.swift in Sources */,
|
||||
80E8E2311E2133D100395E49 /* OrderedDictionary+Description.swift in Sources */,
|
||||
80E8E21F1E20425B00395E49 /* OrderedDictionary.swift in Sources */,
|
||||
80BE57D5252BAB9400F85D45 /* OrderedDictionarySlice.swift in Sources */,
|
||||
80A203A21F3F4C1F00622481 /* OrderedDictionary+Codable.swift in Sources */,
|
||||
80BE57E0252BADEE00F85D45 /* Dictionary+OrderedDictionary.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
8060976D1B92F44F00DB20CF /* Sources */ = {
|
||||
80B28E9B1E201EC9007E3A77 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8060977C1B92F4A000DB20CF /* OrderedDictionaryTests.swift in Sources */,
|
||||
80BFD062252B0A7F002B3C05 /* RemovalTests.swift in Sources */,
|
||||
80BFD032252B06EB002B3C05 /* DescriptionTests.swift in Sources */,
|
||||
80BFD078252B0D94002B3C05 /* MapFilterTests.swift in Sources */,
|
||||
80BFD071252B0C16002B3C05 /* AccessTests.swift in Sources */,
|
||||
80BFD053252B09DC002B3C05 /* ReorderingTests.swift in Sources */,
|
||||
80BFD04C252B0951002B3C05 /* CapacityTests.swift in Sources */,
|
||||
80BFD02B252B069F002B3C05 /* SortingTests.swift in Sources */,
|
||||
80BFD07F252B0E19002B3C05 /* UpdatesTests.swift in Sources */,
|
||||
80BFD0A9252B1C96002B3C05 /* InsertionsTests.swift in Sources */,
|
||||
80BFD041252B0740002B3C05 /* CodingTests.swift in Sources */,
|
||||
80BE57A6252B3F6000F85D45 /* SubscriptAmbiguityTests.swift in Sources */,
|
||||
80BFD01C252B049E002B3C05 /* InitializationTests.swift in Sources */,
|
||||
80BE579B252B278D00F85D45 /* XCTUnwrapShim.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
803F9CF61B925B1C002F728F /* PBXTargetDependency */ = {
|
||||
8055B0441E201C5D009DC3EE /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 803F9CC51B923207002F728F /* OrderedDictionary-OSX */;
|
||||
targetProxy = 803F9CF51B925B1C002F728F /* PBXContainerItemProxy */;
|
||||
target = 8055B0371E201C5D009DC3EE /* OrderedDictionary-Mac */;
|
||||
targetProxy = 8055B0431E201C5D009DC3EE /* PBXContainerItemProxy */;
|
||||
};
|
||||
806097781B92F44F00DB20CF /* PBXTargetDependency */ = {
|
||||
80B28EA21E201EC9007E3A77 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 806097621B92F20400DB20CF /* OrderedDictionary-iOS */;
|
||||
targetProxy = 806097771B92F44F00DB20CF /* PBXContainerItemProxy */;
|
||||
target = 80B28E961E201EC8007E3A77 /* OrderedDictionary-iOS */;
|
||||
targetProxy = 80B28EA11E201EC9007E3A77 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
803F9CCC1B923207002F728F /* Debug */ = {
|
||||
8055B04A1E201C5D009DC3EE /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
@@ -450,33 +523,52 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
803F9CCD1B923207002F728F /* Release */ = {
|
||||
8055B04B1E201C5D009DC3EE /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
@@ -490,95 +582,95 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
803F9CCF1B923207002F728F /* Debug */ = {
|
||||
8055B04D1E201C5D009DC3EE /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
CLANG_ENABLE_CODE_COVERAGE = NO;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||
);
|
||||
FRAMEWORK_VERSION = A;
|
||||
INFOPLIST_FILE = "Supporting Files/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||
MARKETING_VERSION = 4.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lukaskubanek.OrderedDictionary;
|
||||
PRODUCT_NAME = OrderedDictionary;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
803F9CD01B923207002F728F /* Release */ = {
|
||||
8055B04E1E201C5D009DC3EE /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
CLANG_ENABLE_CODE_COVERAGE = NO;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||
);
|
||||
FRAMEWORK_VERSION = A;
|
||||
INFOPLIST_FILE = "Supporting Files/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||
MARKETING_VERSION = 4.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lukaskubanek.OrderedDictionary;
|
||||
PRODUCT_NAME = OrderedDictionary;
|
||||
SKIP_INSTALL = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
803F9CF81B925B1C002F728F /* Debug */ = {
|
||||
8055B0501E201C5D009DC3EE /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||
);
|
||||
INFOPLIST_FILE = "Supporting Files/Info-Tests.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lukaskubanek.OrderedDictionaryTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
803F9CF91B925B1C002F728F /* Release */ = {
|
||||
8055B0511E201C5D009DC3EE /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||
);
|
||||
INFOPLIST_FILE = "Supporting Files/Info-Tests.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lukaskubanek.OrderedDictionaryTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
806097691B92F20400DB20CF /* Debug */ = {
|
||||
80B28EA91E201EC9007E3A77 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
CLANG_ENABLE_CODE_COVERAGE = NO;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
@@ -586,6 +678,7 @@
|
||||
INFOPLIST_FILE = "Supporting Files/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
MARKETING_VERSION = 4.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lukaskubanek.OrderedDictionary;
|
||||
PRODUCT_NAME = OrderedDictionary;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -594,10 +687,13 @@
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
8060976A1B92F20400DB20CF /* Release */ = {
|
||||
80B28EAA1E201EC9007E3A77 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
CLANG_ENABLE_CODE_COVERAGE = NO;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
@@ -605,6 +701,7 @@
|
||||
INFOPLIST_FILE = "Supporting Files/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
MARKETING_VERSION = 4.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lukaskubanek.OrderedDictionary;
|
||||
PRODUCT_NAME = OrderedDictionary;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -614,34 +711,26 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
8060977A1B92F44F00DB20CF /* Debug */ = {
|
||||
80B28EAC1E201EC9007E3A77 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
||||
);
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
INFOPLIST_FILE = "Supporting Files/Info-Tests.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.lukaskubanek.OrderedDictionary-iOS-Tests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.lukaskubanek.OrderedDictionary-iOSTests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
8060977B1B92F44F00DB20CF /* Release */ = {
|
||||
80B28EAD1E201EC9007E3A77 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
||||
);
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
INFOPLIST_FILE = "Supporting Files/Info-Tests.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.lukaskubanek.OrderedDictionary-iOS-Tests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.lukaskubanek.OrderedDictionary-iOSTests";
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
@@ -650,50 +739,52 @@
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
803F9CC01B923207002F728F /* Build configuration list for PBXProject "OrderedDictionary" */ = {
|
||||
8055B0321E201C5D009DC3EE /* Build configuration list for PBXProject "OrderedDictionary" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
803F9CCC1B923207002F728F /* Debug */,
|
||||
803F9CCD1B923207002F728F /* Release */,
|
||||
8055B04A1E201C5D009DC3EE /* Debug */,
|
||||
8055B04B1E201C5D009DC3EE /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
803F9CCE1B923207002F728F /* Build configuration list for PBXNativeTarget "OrderedDictionary-OSX" */ = {
|
||||
8055B04C1E201C5D009DC3EE /* Build configuration list for PBXNativeTarget "OrderedDictionary-Mac" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
803F9CCF1B923207002F728F /* Debug */,
|
||||
803F9CD01B923207002F728F /* Release */,
|
||||
8055B04D1E201C5D009DC3EE /* Debug */,
|
||||
8055B04E1E201C5D009DC3EE /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
803F9CF71B925B1C002F728F /* Build configuration list for PBXNativeTarget "OrderedDictionary-OSX-Tests" */ = {
|
||||
8055B04F1E201C5D009DC3EE /* Build configuration list for PBXNativeTarget "OrderedDictionary-Mac-Tests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
803F9CF81B925B1C002F728F /* Debug */,
|
||||
803F9CF91B925B1C002F728F /* Release */,
|
||||
8055B0501E201C5D009DC3EE /* Debug */,
|
||||
8055B0511E201C5D009DC3EE /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
806097681B92F20400DB20CF /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS" */ = {
|
||||
80B28EA81E201EC9007E3A77 /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
806097691B92F20400DB20CF /* Debug */,
|
||||
8060976A1B92F20400DB20CF /* Release */,
|
||||
80B28EA91E201EC9007E3A77 /* Debug */,
|
||||
80B28EAA1E201EC9007E3A77 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
806097791B92F44F00DB20CF /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS-Tests" */ = {
|
||||
80B28EAB1E201EC9007E3A77 /* Build configuration list for PBXNativeTarget "OrderedDictionary-iOS-Tests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
8060977A1B92F44F00DB20CF /* Debug */,
|
||||
8060977B1B92F44F00DB20CF /* Release */,
|
||||
80B28EAC1E201EC9007E3A77 /* Debug */,
|
||||
80B28EAD1E201EC9007E3A77 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 803F9CBD1B923207002F728F /* Project object */;
|
||||
rootObject = 8055B02F1E201C5D009DC3EE /* Project object */;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
+10
-23
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0700"
|
||||
LastUpgradeVersion = "1320"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -14,9 +14,9 @@
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "803F9CC51B923207002F728F"
|
||||
BlueprintIdentifier = "8055B0371E201C5D009DC3EE"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-OSX"
|
||||
BlueprintName = "OrderedDictionary-Mac"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
@@ -33,24 +33,13 @@
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "803F9CEE1B925B1C002F728F"
|
||||
BuildableName = "OrderedDictionary-OSX-Tests.xctest"
|
||||
BlueprintName = "OrderedDictionary-OSX-Tests"
|
||||
BlueprintIdentifier = "8055B0401E201C5D009DC3EE"
|
||||
BuildableName = "OrderedDictionary_Mac_Tests.xctest"
|
||||
BlueprintName = "OrderedDictionary-Mac-Tests"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "803F9CC51B923207002F728F"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-OSX"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
@@ -65,14 +54,12 @@
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "803F9CC51B923207002F728F"
|
||||
BlueprintIdentifier = "8055B0371E201C5D009DC3EE"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-OSX"
|
||||
BlueprintName = "OrderedDictionary-Mac"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
@@ -83,9 +70,9 @@
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "803F9CC51B923207002F728F"
|
||||
BlueprintIdentifier = "8055B0371E201C5D009DC3EE"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-OSX"
|
||||
BlueprintName = "OrderedDictionary-Mac"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0700"
|
||||
LastUpgradeVersion = "1320"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -14,7 +14,7 @@
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "806097621B92F20400DB20CF"
|
||||
BlueprintIdentifier = "80B28E961E201EC8007E3A77"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-iOS"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
@@ -26,31 +26,19 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
codeCoverageEnabled = "YES">
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "806097701B92F44F00DB20CF"
|
||||
BuildableName = "OrderedDictionary-iOS-Tests.xctest"
|
||||
BlueprintIdentifier = "80B28E9E1E201EC9007E3A77"
|
||||
BuildableName = "OrderedDictionary_iOS_Tests.xctest"
|
||||
BlueprintName = "OrderedDictionary-iOS-Tests"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "806097621B92F20400DB20CF"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-iOS"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
@@ -65,14 +53,12 @@
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "806097621B92F20400DB20CF"
|
||||
BlueprintIdentifier = "80B28E961E201EC8007E3A77"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-iOS"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
@@ -83,7 +69,7 @@
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "806097621B92F20400DB20CF"
|
||||
BlueprintIdentifier = "80B28E961E201EC8007E3A77"
|
||||
BuildableName = "OrderedDictionary.framework"
|
||||
BlueprintName = "OrderedDictionary-iOS"
|
||||
ReferencedContainer = "container:OrderedDictionary.xcodeproj">
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
// swift-tools-version:5.0
|
||||
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "OrderedDictionary",
|
||||
products: [
|
||||
.library(
|
||||
name: "OrderedDictionary",
|
||||
targets: ["OrderedDictionary"]
|
||||
)
|
||||
],
|
||||
dependencies: [],
|
||||
targets: [
|
||||
.target(
|
||||
name: "OrderedDictionary",
|
||||
dependencies: []
|
||||
),
|
||||
.testTarget(
|
||||
name: "OrderedDictionaryTests",
|
||||
dependencies: ["OrderedDictionary"]
|
||||
)
|
||||
]
|
||||
)
|
||||
@@ -1,65 +0,0 @@
|
||||
import OrderedDictionary
|
||||
|
||||
////
|
||||
// Initialize an ordered dictionary using an array of key-value pairs
|
||||
////
|
||||
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = [
|
||||
("A", 1),
|
||||
("B", 2),
|
||||
("C", 3),
|
||||
("D", 4)
|
||||
]
|
||||
|
||||
print(orderedDictionary) // => [A: 1, B: 2, C: 3, D: 4]
|
||||
|
||||
////
|
||||
// Loop through the contents
|
||||
////
|
||||
|
||||
for (index, (key, value)) in orderedDictionary.enumerate() {
|
||||
print("\(index): (\(key): \(value))")
|
||||
}
|
||||
|
||||
// => 0: (A: 1)
|
||||
// => 1: (B: 2)
|
||||
// => 2: (C: 3)
|
||||
// => 3: (D: 4)
|
||||
|
||||
////
|
||||
// Modify the values by setting the value for key
|
||||
////
|
||||
|
||||
orderedDictionary["A"] = 100
|
||||
orderedDictionary["E"] = 5
|
||||
orderedDictionary["B"] = nil
|
||||
orderedDictionary.updateValue(42, forKey: "D")
|
||||
|
||||
print(orderedDictionary) // => [A: 100, C: 3, D: 42, E: 5]
|
||||
|
||||
print(orderedDictionary["A"]) // => Optional(100)
|
||||
print(orderedDictionary["B"]) // => nil
|
||||
print(orderedDictionary["C"]) // => Optional(3)
|
||||
print(orderedDictionary["D"]) // => Optional(42)
|
||||
print(orderedDictionary["E"]) // => Optional(5)
|
||||
|
||||
////
|
||||
// Modify the values by setting the element for index
|
||||
////
|
||||
|
||||
orderedDictionary[2] = ("F", 235)
|
||||
orderedDictionary.updateElement(("K", 12), atIndex: 1)
|
||||
orderedDictionary.removeAtIndex(0)
|
||||
|
||||
print(orderedDictionary) // => [K: 12, F: 235, E: 5]
|
||||
|
||||
print(orderedDictionary[0]) // => ("K", 12)
|
||||
print(orderedDictionary[1]) // => ("F", 235)
|
||||
print(orderedDictionary[2]) // => ("E", 5)
|
||||
// print(orderedDictionary[3]) // => fatal error
|
||||
|
||||
print(orderedDictionary.indexForKey("K")) // => Optional(0)
|
||||
print(orderedDictionary.indexForKey("F")) // => Optional(1)
|
||||
print(orderedDictionary.indexForKey("E")) // => Optional(2)
|
||||
print(orderedDictionary.indexForKey("A")) // => nil
|
||||
print(orderedDictionary.indexForKey("C")) // => nil
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='osx' requires-full-environment='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
||||
@@ -1,126 +1,86 @@
|
||||
# OrderedDictionary
|
||||
|
||||
[![][image-1]][1] [![][image-2]][2] [![][image-3]][3] ![][image-4] [![][image-5]][4] [![][image-6]][5]
|
||||
<p align="left">
|
||||
<a href="https://github.com/lukaskubanek/OrderedDictionary/releases">
|
||||
<img src="https://img.shields.io/github/release/lukaskubanek/OrderedDictionary/all.svg?style=flat-square">
|
||||
</a>
|
||||
<a href="https://developer.apple.com/swift">
|
||||
<img src="https://img.shields.io/badge/Swift-5.0-orange.svg?style=flat-square" alt="Swift 5.0">
|
||||
</a>
|
||||
<a href="https://swift.org/package-manager">
|
||||
<img src="https://img.shields.io/badge/SPM-compatible-brightgreen.svg?style=flat-square" alt="Swift Package Manager">
|
||||
</a>
|
||||
<a href="https://github.com/Carthage/Carthage">
|
||||
<img src="https://img.shields.io/badge/Carthage-compatible-brightgreen.svg?style=flat-square" alt="Carthage">
|
||||
</a>
|
||||
<a href="LICENSE.md">
|
||||
<img src="https://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat-square" alt="License: MIT">
|
||||
</a>
|
||||
<a href="https://twitter.com/lukaskubanek">
|
||||
<img src="https://img.shields.io/badge/contact-@lukaskubanek-olive.svg?style=flat-square" alt="Twitter: @lukaskubanek">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
This is a lightweight implementation of an ordered dictionary data structure in Swift packed into a µframework.
|
||||
OrderedDictionary is a lightweight implementation of an ordered dictionary data structure in Swift.
|
||||
|
||||
`OrderedDictionary` is an immutable generic collection which combines the features of `Dictionary` and `Array`. Like `Dictionary` it stores key-value pairs and maps the keys to values. Additionally these pairs are sorted by zero-based integer index like in `Array`. The `OrderedDictionary` provides similar APIs to the collections from the Swift standard library and allows accessing the content by keys or indexes.
|
||||
The `OrderedDictionary<Key: Hashable, Value>` struct is a generic collection that combines the features of the `Dictionary` and `Array` data structures from the Swift standard library. Like `Dictionary`, it stores key-value pairs with each key being unique and maps each key to an associated value. Like `Array`, it stores those pairs sorted and accessible by a zero-based integer index.
|
||||
|
||||
Internally `OrderedDictionary` uses a backing store composed of an instance of `Dictionary` for storing the key-value pairs and an instance of `Array` for managing the ordered keys.
|
||||
`OrderedDictionary` provides similar APIs to collections available in the Swift standard library like accessing contents by keys or indices, inserting and removing elements, iterating, sorting, transforming, filtering, etc.
|
||||
|
||||
Internally, `OrderedDictionary` uses backing storage composed of a `Dictionary` for storing the key-value pairs and an `Array` for managing the ordered keys. This is certainly not the most performant implementation one can achieve, but it gets its job done while reusing most functionality from the Swift standard library.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Swift 2.0
|
||||
- Xcode 7.0 GM
|
||||
- iOS 8.0+ / OS X 10.10+
|
||||
- Swift 5.0 or later
|
||||
- Xcode 11 or later
|
||||
- iOS 8 or later / macOS 10.10 or later
|
||||
|
||||
*For support of older Swift versions, please refer to older versions of this library. For Swift 4.2, use version 3.x, and for Swift 4.0-4.1, use version 2.x.*
|
||||
|
||||
*The requirements for Xcode and OS versions only apply when the library is integrated as a framework or via the Xcode project.*
|
||||
|
||||
## Installation
|
||||
|
||||
The easiest way to integrate `OrderedDictionary` to your project is to use [Carthage][6]. Add following line to your `Cartfile`:
|
||||
### Swift Package Manager
|
||||
|
||||
```
|
||||
github "lukaskubanek/OrderedDictionary" ~> 0.3
|
||||
```
|
||||
|
||||
Then drag the `OrderedDictionary.xcodeproj` or the `OrderedDictionary.framework` into your project/workspace and link against the `OrderedDictionary.framework`.
|
||||
|
||||
Finally make sure the framework gets copied into your application bundle.
|
||||
|
||||
## Example Usage
|
||||
To install OrderedDictionary using the [Swift Package Manager](https://swift.org/package-manager/), add it as a dependency into your `Package.swift` file:
|
||||
|
||||
```swift
|
||||
import OrderedDictionary
|
||||
|
||||
////
|
||||
// Initialize an ordered dictionary using an array of key-value pairs
|
||||
////
|
||||
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = [
|
||||
("A", 1),
|
||||
("B", 2),
|
||||
("C", 3),
|
||||
("D", 4)
|
||||
]
|
||||
|
||||
print(orderedDictionary) // => [A: 1, B: 2, C: 3, D: 4]
|
||||
|
||||
////
|
||||
// Loop through the contents
|
||||
////
|
||||
|
||||
for (index, (key, value)) in orderedDictionary.enumerate() {
|
||||
print("\(index): (\(key): \(value))")
|
||||
}
|
||||
|
||||
// => 0: (A: 1)
|
||||
// => 1: (B: 2)
|
||||
// => 2: (C: 3)
|
||||
// => 3: (D: 4)
|
||||
|
||||
////
|
||||
// Modify the values by setting the value for key
|
||||
////
|
||||
|
||||
orderedDictionary["A"] = 100
|
||||
orderedDictionary["E"] = 5
|
||||
orderedDictionary["B"] = nil
|
||||
orderedDictionary.updateValue(42, forKey: "D")
|
||||
|
||||
print(orderedDictionary) // => [A: 100, C: 3, D: 42, E: 5]
|
||||
|
||||
print(orderedDictionary["A"]) // => Optional(100)
|
||||
print(orderedDictionary["B"]) // => nil
|
||||
print(orderedDictionary["C"]) // => Optional(3)
|
||||
print(orderedDictionary["D"]) // => Optional(42)
|
||||
print(orderedDictionary["E"]) // => Optional(5)
|
||||
|
||||
////
|
||||
// Modify the values by setting the element for index
|
||||
////
|
||||
|
||||
orderedDictionary[2] = ("F", 235)
|
||||
orderedDictionary.updateElement(("K", 12), atIndex: 1)
|
||||
orderedDictionary.removeAtIndex(0)
|
||||
|
||||
print(orderedDictionary) // => [K: 12, F: 235, E: 5]
|
||||
|
||||
print(orderedDictionary[0]) // => ("K", 12)
|
||||
print(orderedDictionary[1]) // => ("F", 235)
|
||||
print(orderedDictionary[2]) // => ("E", 5)
|
||||
// print(orderedDictionary[3]) // => fatal error
|
||||
|
||||
print(orderedDictionary.indexForKey("K")) // => Optional(0)
|
||||
print(orderedDictionary.indexForKey("F")) // => Optional(1)
|
||||
print(orderedDictionary.indexForKey("E")) // => Optional(2)
|
||||
print(orderedDictionary.indexForKey("A")) // => nil
|
||||
print(orderedDictionary.indexForKey("C")) // => nil
|
||||
let package = Package(
|
||||
...
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/lukaskubanek/OrderedDictionary.git", from: "4.0.0")
|
||||
],
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
## Author
|
||||
### Carthage
|
||||
|
||||
Lukas Kubanek // [lukaskubanek.com][11] // [@kubanekl][12]
|
||||
To install OrderedDictionary using [Carthage](https://github.com/Carthage/Carthage), add it as a dependency into your `Cartfile`:
|
||||
|
||||
## License
|
||||
```plain
|
||||
github "lukaskubanek/OrderedDictionary" ~> 4.0
|
||||
```
|
||||
|
||||
`OrderedDictionary` is released under the [MIT License][13].
|
||||
Then drag either the `OrderedDictionary.xcodeproj` or the `OrderedDictionary.framework` into your Xcode project/workspace and link your target against the `OrderedDictionary.framework`. Make sure that the framework [gets copied](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) to your application bundle.
|
||||
|
||||
[1]: https://travis-ci.org/lukaskubanek/OrderedDictionary
|
||||
[2]: https://github.com/lukaskubanek/OrderedDictionary/releases
|
||||
[3]: https://developer.apple.com/swift/
|
||||
[4]: https://github.com/Carthage/Carthage
|
||||
[5]: LICENSE.md
|
||||
[6]: https://github.com/Carthage/Carthage/
|
||||
[7]: https://developer.apple.com/swift/
|
||||
[8]: https://github.com/lukaskubanek/OrderedDictionary/releases
|
||||
[9]: https://developer.apple.com/swift/
|
||||
[10]: https://github.com/Carthage/Carthage
|
||||
[11]: http://lukaskubanek.com
|
||||
[12]: https://twitter.com/kubanekl
|
||||
[13]: LICENSE.md
|
||||
### Git Submodules
|
||||
|
||||
[image-1]: https://img.shields.io/travis/lukaskubanek/OrderedDictionary.svg?style=flat-square
|
||||
[image-2]: https://img.shields.io/github/release/lukaskubanek/OrderedDictionary.svg?style=flat-square
|
||||
[image-3]: https://img.shields.io/badge/Swift-2.0-orange.svg?style=flat-square
|
||||
[image-4]: https://img.shields.io/badge/platform-OS_X%20&_iOS-yellowgreen.svg?style=flat-square
|
||||
[image-5]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat-square "Carthage compatible"
|
||||
[image-6]: https://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat-square "License"
|
||||
You can also install OrderedDictionary via [Git submodules](http://git-scm.com/book/en/v2/Git-Tools-Submodules) and integrate the project `OrderedDictionary.xcodeproj` from the submodule directly into your Xcode workspace.
|
||||
|
||||
### Note About CocoaPods
|
||||
|
||||
Although there has been a high demand for [CocoaPods](https://cocoapods.org) support, this distribution method won't be officially supported by this library. If you really want to integrate this library via CocoaPods, you can create and maintain a custom podspec (see the last section of [this post](https://guides.cocoapods.org/syntax/podfile.html#pod)).
|
||||
|
||||
## Usage & Docs
|
||||
|
||||
For the explanation of the API of `OrderedDictionary` and examples on how to use this data structure, please refer to the [documentation comments](Sources/OrderedDictionary/OrderedDictionary.swift) or the [comprehensive test suite](Tests/OrderedDictionaryTests).
|
||||
|
||||
## Changelog
|
||||
|
||||
To view the changelog, refer to GitHub's [releases page](https://github.com/lukaskubanek/OrderedDictionary/releases). If you're upgrading from version 3.x, you might want to check out the list of changes made in [version 4.0](https://github.com/lukaskubanek/OrderedDictionary/releases/tag/v4.0.0).
|
||||
|
||||
## Credits
|
||||
|
||||
OrderedDictionary was built by [@lukaskubanek](https://twitter.com/lukaskubanek), the founder and developer of [Diagrams](https://diagrams.app), a native diagram editor for Mac. This data structure is being used extensively for powering Diagrams' data model.
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
//
|
||||
// OrderedDictionary.h
|
||||
// OrderedDictionary
|
||||
//
|
||||
// Created by Lukas Kubanek on 29/08/15.
|
||||
// Copyright © 2015 Lukas Kubanek. All rights reserved.
|
||||
//
|
||||
|
||||
extern double OrderedDictionaryVersionNumber;
|
||||
extern const unsigned char OrderedDictionaryVersionString[];
|
||||
@@ -1,220 +0,0 @@
|
||||
//
|
||||
// OrderedDictionary.swift
|
||||
// OrderedDictionary
|
||||
//
|
||||
// Created by Lukas Kubanek on 29/08/15.
|
||||
// Copyright © 2015 Lukas Kubanek. All rights reserved.
|
||||
//
|
||||
|
||||
public struct OrderedDictionary<Key: Hashable, Value>: CollectionType, ArrayLiteralConvertible, CustomStringConvertible {
|
||||
|
||||
// MARK: - Initialization
|
||||
|
||||
public init() {
|
||||
self.orderedKeys = []
|
||||
self.keysToValues = [:]
|
||||
}
|
||||
|
||||
public init(elements: [Element]) {
|
||||
self.init()
|
||||
|
||||
for element in elements {
|
||||
self[element.0] = element.1
|
||||
}
|
||||
}
|
||||
|
||||
public init(arrayLiteral elements: Element...) {
|
||||
self.init(elements: elements)
|
||||
}
|
||||
|
||||
// MARK: - Type Aliases
|
||||
|
||||
public typealias Element = (Key, Value)
|
||||
public typealias Index = Int
|
||||
|
||||
// MARK: - Managing Content Using Keys
|
||||
|
||||
public subscript(key: Key) -> Value? {
|
||||
get {
|
||||
return keysToValues[key]
|
||||
}
|
||||
set(newValue) {
|
||||
if let newValue = newValue {
|
||||
updateValue(newValue, forKey: key)
|
||||
} else {
|
||||
removeValueForKey(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func containsKey(key: Key) -> Bool {
|
||||
return orderedKeys.contains(key)
|
||||
}
|
||||
|
||||
public mutating func updateValue(value: Value, forKey key: Key) -> Value? {
|
||||
if orderedKeys.contains(key) {
|
||||
guard let currentValue = keysToValues[key] else {
|
||||
fatalError("Inconsistency error occured in OrderedDictionary")
|
||||
}
|
||||
|
||||
keysToValues[key] = value
|
||||
|
||||
return currentValue
|
||||
} else {
|
||||
orderedKeys.append(key)
|
||||
keysToValues[key] = value
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
public mutating func removeValueForKey(key: Key) -> Value? {
|
||||
if let index = orderedKeys.indexOf(key) {
|
||||
guard let currentValue = keysToValues[key] else {
|
||||
fatalError("Inconsistency error occured in OrderedDictionary")
|
||||
}
|
||||
|
||||
orderedKeys.removeAtIndex(index)
|
||||
keysToValues[key] = nil
|
||||
|
||||
return currentValue
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
public mutating func removeAll(keepCapacity keepCapacity: Bool = true) {
|
||||
orderedKeys.removeAll(keepCapacity: keepCapacity)
|
||||
keysToValues.removeAll(keepCapacity: keepCapacity)
|
||||
}
|
||||
|
||||
// MARK: - Managing Content Using Indexes
|
||||
|
||||
public subscript(index: Index) -> Element {
|
||||
get {
|
||||
guard let element = elementAtIndex(index) else {
|
||||
fatalError("OrderedDictionary index out of range")
|
||||
}
|
||||
|
||||
return element
|
||||
}
|
||||
set(newValue) {
|
||||
updateElement(newValue, atIndex: index)
|
||||
}
|
||||
}
|
||||
|
||||
public func indexForKey(key: Key) -> Index? {
|
||||
return orderedKeys.indexOf(key)
|
||||
}
|
||||
|
||||
public func elementAtIndex(index: Index) -> Element? {
|
||||
guard orderedKeys.indices.contains(index) else { return nil }
|
||||
|
||||
let key = orderedKeys[index]
|
||||
|
||||
guard let value = self.keysToValues[key] else {
|
||||
fatalError("Inconsistency error occured in OrderedDictionary")
|
||||
}
|
||||
|
||||
return (key, value)
|
||||
}
|
||||
|
||||
public mutating func insertElement(newElement: Element, atIndex index: Index) -> Value? {
|
||||
guard index >= 0 else {
|
||||
fatalError("Negative OrderedDictionary index is out of range")
|
||||
}
|
||||
|
||||
guard index <= count else {
|
||||
fatalError("OrderedDictionary index out of range")
|
||||
}
|
||||
|
||||
let (key, value) = (newElement.0, newElement.1)
|
||||
|
||||
let adjustedIndex: Int
|
||||
let currentValue: Value?
|
||||
|
||||
if let currentIndex = orderedKeys.indexOf(key) {
|
||||
currentValue = keysToValues[key]
|
||||
adjustedIndex = (currentIndex < index - 1) ? index - 1 : index
|
||||
|
||||
orderedKeys.removeAtIndex(currentIndex)
|
||||
keysToValues[key] = nil
|
||||
} else {
|
||||
currentValue = nil
|
||||
adjustedIndex = index
|
||||
}
|
||||
|
||||
orderedKeys.insert(key, atIndex: adjustedIndex)
|
||||
keysToValues[key] = value
|
||||
|
||||
return currentValue
|
||||
}
|
||||
|
||||
public mutating func updateElement(element: Element, atIndex index: Index) -> Element? {
|
||||
guard let currentElement = elementAtIndex(index) else {
|
||||
fatalError("OrderedDictionary index out of range")
|
||||
}
|
||||
|
||||
let (newKey, newValue) = (element.0, element.1)
|
||||
|
||||
orderedKeys[index] = newKey
|
||||
keysToValues[newKey] = newValue
|
||||
|
||||
return currentElement
|
||||
}
|
||||
|
||||
public mutating func removeAtIndex(index: Index) -> Element? {
|
||||
if let element = elementAtIndex(index) {
|
||||
orderedKeys.removeAtIndex(index)
|
||||
keysToValues.removeValueForKey(element.0)
|
||||
|
||||
return element
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Description
|
||||
|
||||
public var description: String {
|
||||
let content = map({ "\($0.0): \($0.1)" }).joinWithSeparator(", ")
|
||||
return "[\(content)]"
|
||||
}
|
||||
|
||||
// MARK: - Backing Store
|
||||
|
||||
private var orderedKeys: [Key]
|
||||
private var keysToValues: [Key: Value]
|
||||
|
||||
// MARK: - SequenceType & Indexable Conformance
|
||||
|
||||
public func generate() -> AnyGenerator<Element> {
|
||||
var nextIndex = 0
|
||||
let lastIndex = self.count
|
||||
|
||||
return anyGenerator {
|
||||
guard nextIndex < lastIndex else { return nil }
|
||||
|
||||
let nextKey = self.orderedKeys[nextIndex]
|
||||
|
||||
guard let nextValue = self.keysToValues[nextKey] else {
|
||||
fatalError("Inconsistency error occured in OrderedDictionary")
|
||||
}
|
||||
|
||||
let element = (nextKey, nextValue)
|
||||
|
||||
nextIndex++
|
||||
|
||||
return element
|
||||
}
|
||||
}
|
||||
|
||||
public var startIndex: Index { return orderedKeys.startIndex }
|
||||
|
||||
public var endIndex: Index { return orderedKeys.endIndex }
|
||||
|
||||
}
|
||||
|
||||
public func == <Key: Equatable, Value: Equatable>(lhs: OrderedDictionary<Key, Value>, rhs: OrderedDictionary<Key, Value>) -> Bool {
|
||||
return lhs.orderedKeys == rhs.orderedKeys && lhs.keysToValues == rhs.keysToValues
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
extension Dictionary {
|
||||
|
||||
/// Returns an ordered dictionary containing the key-value pairs from the dictionary, sorted
|
||||
/// using the given sort function.
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - areInIncreasingOrder: The sort function which compares the key-value pairs.
|
||||
/// - Returns: The ordered dictionary.
|
||||
///
|
||||
/// - SeeAlso: `OrderedDictionary.init(unsorted:areInIncreasingOrder:)`
|
||||
public func sorted(
|
||||
by areInIncreasingOrder: (Element, Element) throws -> Bool
|
||||
) rethrows -> OrderedDictionary<Key, Value> {
|
||||
return try OrderedDictionary(
|
||||
unsorted: self,
|
||||
areInIncreasingOrder: areInIncreasingOrder
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
extension OrderedDictionary: Encodable where Key: Encodable, Value: Encodable {
|
||||
|
||||
/// Encodes the contents of this ordered dictionary into the given encoder.
|
||||
public func encode(to encoder: Encoder) throws {
|
||||
// Encode the ordered dictionary as an array of alternating key-value pairs.
|
||||
var container = encoder.unkeyedContainer()
|
||||
|
||||
for (key, value) in self {
|
||||
try container.encode(key)
|
||||
try container.encode(value)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension OrderedDictionary: Decodable where Key: Decodable, Value: Decodable {
|
||||
|
||||
/// Creates a new ordered dictionary by decoding from the given decoder.
|
||||
public init(from decoder: Decoder) throws {
|
||||
// Decode the ordered dictionary from an array of alternating key-value pairs.
|
||||
self.init()
|
||||
|
||||
var container = try decoder.unkeyedContainer()
|
||||
|
||||
while !container.isAtEnd {
|
||||
let key = try container.decode(Key.self)
|
||||
guard !container.isAtEnd else { throw DecodingError.unkeyedContainerReachedEndBeforeValue(decoder.codingPath) }
|
||||
let value = try container.decode(Value.self)
|
||||
|
||||
self[key] = value
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension DecodingError {
|
||||
|
||||
fileprivate static func unkeyedContainerReachedEndBeforeValue(
|
||||
_ codingPath: [CodingKey]
|
||||
) -> DecodingError {
|
||||
return DecodingError.dataCorrupted(
|
||||
DecodingError.Context(
|
||||
codingPath: codingPath,
|
||||
debugDescription: "Unkeyed container reached end before value in key-value pair."
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
extension OrderedDictionary {
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Initialization
|
||||
// ============================================================================ //
|
||||
|
||||
@available(*, deprecated, message: "Please use init(values:uniquelyKeyedBy:).", renamed: "init(values:uniquelyKeyedBy:)")
|
||||
public init<S: Sequence>(
|
||||
values: S,
|
||||
keyedBy extractKey: (Value) -> Key
|
||||
) where S.Element == Value {
|
||||
self.init(values: values, uniquelyKeyedBy: extractKey)
|
||||
}
|
||||
|
||||
@available(*, deprecated, message: "Please use init(values:uniquelyKeyedBy:).", renamed: "init(values:uniquelyKeyedBy:)")
|
||||
public init(
|
||||
values: [Value],
|
||||
keyedBy keyPath: KeyPath<Value, Key>
|
||||
) {
|
||||
self.init(values: values, uniquelyKeyedBy: keyPath)
|
||||
}
|
||||
|
||||
@available(*, deprecated, message: "Please use init(uniqueKeysWithValues:).", renamed: "init(uniqueKeysWithValues:)")
|
||||
public init<S: Sequence>(_ elements: S) where S.Element == Element {
|
||||
self.init(uniqueKeysWithValues: elements)
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Insertion Checks
|
||||
// ============================================================================ //
|
||||
|
||||
/// Checks whether the given key-value pair can be inserted into to ordered dictionary
|
||||
/// by validating the presence of the key.
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - newElement: The key-value pair to be inserted into the ordered dictionary.
|
||||
/// - Returns: `true` if the key-value pair can be safely inserted; otherwise, `false`.
|
||||
///
|
||||
/// - SeeAlso: `canInsert(key:)`
|
||||
/// - SeeAlso: `canInsert(at:)`
|
||||
@available(*, deprecated, message: "Use canInsert(key:) with the element's key instead.")
|
||||
public func canInsert(_ newElement: Element) -> Bool {
|
||||
return canInsert(key: newElement.key)
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Moving Elements
|
||||
// ============================================================================ //
|
||||
|
||||
/// Moves an existing key-value pair specified by the given key to the new index by removing
|
||||
/// it from its original index first and inserting it at the new index. If the movement is
|
||||
/// actually performed, the previous index of the key-value pair is returned. Otherwise, `nil`
|
||||
/// is returned.
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - key: The key specifying the key-value pair to move.
|
||||
/// - newIndex: The new index the key-value pair should be moved to.
|
||||
/// - Returns: The previous index of the key-value pair if it was sucessfully moved.
|
||||
@available(*, deprecated, message: "Since the concrete behavior of the element movement highly depends on concrete use cases, its official support will be dropped in the future. Please use the public API for modeling a move operation instead.")
|
||||
@discardableResult
|
||||
public mutating func moveElement(forKey key: Key, to newIndex: Index) -> Index? {
|
||||
// Load the previous index and return nil if the index is not found.
|
||||
guard let previousIndex = index(forKey: key) else { return nil }
|
||||
|
||||
// If the previous and new indices match, treat it as if the movement was already
|
||||
// performed.
|
||||
guard previousIndex != newIndex else { return previousIndex }
|
||||
|
||||
// Remove the value for the key at its original index.
|
||||
let value = removeValue(forKey: key)!
|
||||
|
||||
// Validate the new index.
|
||||
precondition(canInsert(at: newIndex), "Cannot move to invalid index in OrderedDictionary")
|
||||
|
||||
// Insert the element at the new index.
|
||||
insert((key: key, value: value), at: newIndex)
|
||||
|
||||
return previousIndex
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
extension OrderedDictionary: CustomStringConvertible {
|
||||
|
||||
/// A textual representation of the ordered dictionary.
|
||||
public var description: String {
|
||||
return makeDescription(debug: false)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension OrderedDictionary: CustomDebugStringConvertible {
|
||||
|
||||
/// A textual representation of the ordered dictionary, suitable for debugging.
|
||||
public var debugDescription: String {
|
||||
return makeDescription(debug: true)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension OrderedDictionary {
|
||||
|
||||
fileprivate func makeDescription(debug: Bool) -> String {
|
||||
// The implementation of the description is inspired by zwaldowski's implementation of the
|
||||
// ordered dictionary. See https://bit.ly/2RiWfJu
|
||||
|
||||
if isEmpty { return "[:]" }
|
||||
|
||||
let printFunction: (Any, inout String) -> () = {
|
||||
if debug {
|
||||
return { debugPrint($0, separator: "", terminator: "", to: &$1) }
|
||||
} else {
|
||||
return { print($0, separator: "", terminator: "", to: &$1) }
|
||||
}
|
||||
}()
|
||||
|
||||
let descriptionForItem: (Any) -> String = { item in
|
||||
var description = ""
|
||||
printFunction(item, &description)
|
||||
return description
|
||||
}
|
||||
|
||||
let bodyComponents = map { element in
|
||||
return descriptionForItem(element.key) + ": " + descriptionForItem(element.value)
|
||||
}
|
||||
|
||||
let body = bodyComponents.joined(separator: ", ")
|
||||
|
||||
return "[\(body)]"
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,105 @@
|
||||
public struct OrderedDictionarySlice<Key: Hashable, Value>: RandomAccessCollection, MutableCollection {
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Type Aliases
|
||||
// ============================================================================ //
|
||||
|
||||
/// The type of the underlying ordered dictionary.
|
||||
public typealias Base = OrderedDictionary<Key, Value>
|
||||
|
||||
/// The type of the contiguous subrange of the ordered dictionary's elements.
|
||||
public typealias SubSequence = Self
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Initialization
|
||||
// ============================================================================ //
|
||||
|
||||
public init(base: Base, bounds: Base.Indices) {
|
||||
self.base = base
|
||||
self.startIndex = bounds.lowerBound
|
||||
self.endIndex = bounds.upperBound
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Base
|
||||
// ============================================================================ //
|
||||
|
||||
/// The underlying ordered dictionary.
|
||||
public private(set) var base: Base
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Indices
|
||||
// ============================================================================ //
|
||||
|
||||
/// The start index.
|
||||
public let startIndex: Base.Index
|
||||
|
||||
/// The end index.
|
||||
public let endIndex: Base.Index
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Subscripts
|
||||
// ============================================================================ //
|
||||
|
||||
public subscript(
|
||||
position: Base.Index
|
||||
) -> Base.Element {
|
||||
get {
|
||||
base[position]
|
||||
}
|
||||
set(newElement) {
|
||||
base[position] = newElement
|
||||
}
|
||||
}
|
||||
|
||||
public subscript(
|
||||
bounds: Range<Int>
|
||||
) -> OrderedDictionarySlice<Key, Value> {
|
||||
get {
|
||||
base[bounds]
|
||||
}
|
||||
set(newElements) {
|
||||
base[bounds] = newElements
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Reordering Methods Overloads
|
||||
// ============================================================================ //
|
||||
|
||||
public mutating func sort(
|
||||
by areInIncreasingOrder: (Base.Element, Base.Element) throws -> Bool
|
||||
) rethrows {
|
||||
try base._sort(
|
||||
in: indices,
|
||||
by: areInIncreasingOrder
|
||||
)
|
||||
}
|
||||
|
||||
public mutating func reverse() {
|
||||
base._reverse(in: indices)
|
||||
}
|
||||
|
||||
public mutating func shuffle<T>(
|
||||
using generator: inout T
|
||||
) where T: RandomNumberGenerator {
|
||||
base._shuffle(
|
||||
in: indices,
|
||||
using: &generator
|
||||
)
|
||||
}
|
||||
|
||||
public mutating func partition(
|
||||
by belongsInSecondPartition: (Base.Element) throws -> Bool
|
||||
) rethrows -> Index {
|
||||
return try base._partition(
|
||||
in: indices,
|
||||
by: belongsInSecondPartition
|
||||
)
|
||||
}
|
||||
|
||||
public mutating func swapAt(_ i: Base.Index, _ j: Base.Index) {
|
||||
base.swapAt(i, j)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,13 +15,13 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.1</string>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2015 Lukas Kubanek. All rights reserved.</string>
|
||||
<string>Copyright © 2015-2021 Lukas Kubanek. All rights reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import XCTest
|
||||
|
||||
import OrderedDictionaryTests
|
||||
|
||||
var tests = [XCTestCaseEntry]()
|
||||
tests += OrderedDictionaryTests.__allTests()
|
||||
|
||||
XCTMain(tests)
|
||||
@@ -1,238 +0,0 @@
|
||||
//
|
||||
// OrderedDictionaryTests.swift
|
||||
// OrderedDictionaryTests
|
||||
//
|
||||
// Created by Lukas Kubanek on 29/08/15.
|
||||
// Copyright © 2015 Lukas Kubanek. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import Nimble
|
||||
import OrderedDictionary
|
||||
|
||||
class OrderedDictionaryTests: XCTestCase {
|
||||
|
||||
var orderedDictionary: OrderedDictionary<String, Int>!
|
||||
|
||||
override func setUp() {
|
||||
orderedDictionary = [
|
||||
("A", 1),
|
||||
("B", 2),
|
||||
("C", 3)
|
||||
]
|
||||
}
|
||||
|
||||
// MARK: - Content
|
||||
|
||||
func testInitializedContent() {
|
||||
expect(self.orderedDictionary.count) == 3
|
||||
|
||||
expect(self.orderedDictionary["A"]) == 1
|
||||
expect(self.orderedDictionary.indexForKey("A")) == 0
|
||||
expect(self.orderedDictionary.containsKey("A")) == true
|
||||
|
||||
expect(self.orderedDictionary["B"]) == 2
|
||||
expect(self.orderedDictionary.indexForKey("B")) == 1
|
||||
expect(self.orderedDictionary.containsKey("B")) == true
|
||||
|
||||
expect(self.orderedDictionary["C"]) == 3
|
||||
expect(self.orderedDictionary.indexForKey("C")) == 2
|
||||
expect(self.orderedDictionary.containsKey("C")) == true
|
||||
}
|
||||
|
||||
func testInitializationUsingPairs() {
|
||||
let elements = [
|
||||
("A", 1),
|
||||
("B", 2),
|
||||
("C", 3)
|
||||
]
|
||||
|
||||
expect(OrderedDictionary(elements: elements) == self.orderedDictionary).to(beTrue())
|
||||
}
|
||||
|
||||
func testElementsGenerator() {
|
||||
for entry in self.orderedDictionary.enumerate() {
|
||||
expect(self.orderedDictionary[entry.index].0) == entry.element.0
|
||||
expect(self.orderedDictionary[entry.index].1) == entry.element.1
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Key-based Modifications
|
||||
|
||||
func testKeyBasedSubscript() {
|
||||
self.orderedDictionary["A"] = 5
|
||||
self.orderedDictionary["D"] = 10
|
||||
self.orderedDictionary["B"] = nil
|
||||
|
||||
expect(self.orderedDictionary.count) == 3
|
||||
|
||||
expect(self.orderedDictionary["A"]) == 5
|
||||
expect(self.orderedDictionary.indexForKey("A")) == 0
|
||||
expect(self.orderedDictionary.containsKey("A")) == true
|
||||
|
||||
expect(self.orderedDictionary["B"]).to(beNil())
|
||||
expect(self.orderedDictionary.indexForKey("B")).to(beNil())
|
||||
expect(self.orderedDictionary.containsKey("B")) == false
|
||||
|
||||
expect(self.orderedDictionary["C"]) == 3
|
||||
expect(self.orderedDictionary.indexForKey("C")) == 1
|
||||
expect(self.orderedDictionary.containsKey("C")) == true
|
||||
|
||||
expect(self.orderedDictionary["D"]) == 10
|
||||
expect(self.orderedDictionary.indexForKey("D")) == 2
|
||||
expect(self.orderedDictionary.containsKey("D")) == true
|
||||
}
|
||||
|
||||
// MARK: - Index-based Modifications
|
||||
|
||||
func testIndexBasedSubscriptForRetrievingValues() {
|
||||
let elementAtIndex0 = self.orderedDictionary[0]
|
||||
expect(elementAtIndex0.0) == "A"
|
||||
expect(elementAtIndex0.1) == 1
|
||||
|
||||
let elementAtIndex1 = self.orderedDictionary[1]
|
||||
expect(elementAtIndex1.0) == "B"
|
||||
expect(elementAtIndex1.1) == 2
|
||||
|
||||
let elementAtIndex2 = self.orderedDictionary[2]
|
||||
expect(elementAtIndex2.0) == "C"
|
||||
expect(elementAtIndex2.1) == 3
|
||||
}
|
||||
|
||||
func testIndexBasedSubscriptForSettingValues() {
|
||||
self.orderedDictionary[0] = ("F", 10)
|
||||
self.orderedDictionary[1] = ("B", 5)
|
||||
|
||||
let elementAtIndex0 = self.orderedDictionary[0]
|
||||
expect(elementAtIndex0.0) == "F"
|
||||
expect(elementAtIndex0.1) == 10
|
||||
|
||||
let elementAtIndex1 = self.orderedDictionary[1]
|
||||
expect(elementAtIndex1.0) == "B"
|
||||
expect(elementAtIndex1.1) == 5
|
||||
|
||||
let elementAtIndex2 = self.orderedDictionary[2]
|
||||
expect(elementAtIndex2.0) == "C"
|
||||
expect(elementAtIndex2.1) == 3
|
||||
}
|
||||
|
||||
func testRetrievingElementAtNonExistentIndex() {
|
||||
expect(self.orderedDictionary.elementAtIndex(10)).to(beNil())
|
||||
}
|
||||
|
||||
func testIndexBasedInsertionsOfElementsWithDistinctKeys() {
|
||||
self.orderedDictionary.insertElement(("T", 15), atIndex: 0)
|
||||
self.orderedDictionary.insertElement(("U", 16), atIndex: 2)
|
||||
self.orderedDictionary.insertElement(("V", 17), atIndex: 5)
|
||||
self.orderedDictionary.insertElement(("W", 18), atIndex: 2)
|
||||
|
||||
let expectedOrderedDictionary: OrderedDictionary<String, Int> = [
|
||||
("T", 15),
|
||||
("A", 1),
|
||||
("W", 18),
|
||||
("U", 16),
|
||||
("B", 2),
|
||||
("C", 3),
|
||||
("V", 17)
|
||||
]
|
||||
|
||||
expect(self.orderedDictionary == expectedOrderedDictionary).to(beTrue())
|
||||
}
|
||||
|
||||
func testIndexBasedInsertionOfElementWithSameKeyBeforeItsCurrentIndex() {
|
||||
let previousValue = self.orderedDictionary.insertElement(("B", 5), atIndex: 0)
|
||||
|
||||
let expectedOrderedDictionary: OrderedDictionary<String, Int> = [
|
||||
("B", 5),
|
||||
("A", 1),
|
||||
("C", 3)
|
||||
]
|
||||
|
||||
expect(self.orderedDictionary.count) == 3
|
||||
expect(self.orderedDictionary == expectedOrderedDictionary).to(beTrue())
|
||||
expect(previousValue) == 2
|
||||
}
|
||||
|
||||
func testIndexBasedInsertionOfElementWithSameKeyAtItsCurrentIndex() {
|
||||
let previousValue = self.orderedDictionary.insertElement(("B", 5), atIndex: 1)
|
||||
|
||||
let expectedOrderedDictionary: OrderedDictionary<String, Int> = [
|
||||
("A", 1),
|
||||
("B", 5),
|
||||
("C", 3)
|
||||
]
|
||||
|
||||
expect(self.orderedDictionary.count) == 3
|
||||
expect(self.orderedDictionary == expectedOrderedDictionary).to(beTrue())
|
||||
expect(previousValue) == 2
|
||||
}
|
||||
|
||||
func testIndexBasedInsertionOfElementWithSameKeyAfterItsCurrentIndex() {
|
||||
let previousValue = self.orderedDictionary.insertElement(("B", 5), atIndex: 3)
|
||||
|
||||
let expectedOrderedDictionary: OrderedDictionary<String, Int> = [
|
||||
("A", 1),
|
||||
("C", 3),
|
||||
("B", 5)
|
||||
]
|
||||
|
||||
expect(self.orderedDictionary.count) == 3
|
||||
expect(self.orderedDictionary == expectedOrderedDictionary).to(beTrue())
|
||||
expect(previousValue) == 2
|
||||
}
|
||||
|
||||
// MARK: - Removal
|
||||
|
||||
func testRemoveAll() {
|
||||
self.orderedDictionary.removeAll()
|
||||
|
||||
expect(self.orderedDictionary.count) == 0
|
||||
}
|
||||
|
||||
func testRemovalForKey() {
|
||||
let removedValue1 = self.orderedDictionary.removeValueForKey("A")
|
||||
let removedValue2 = self.orderedDictionary.removeValueForKey("K")
|
||||
|
||||
expect(removedValue1) == 1
|
||||
expect(removedValue2).to(beNil())
|
||||
|
||||
expect(self.orderedDictionary.count) == 2
|
||||
|
||||
expect(self.orderedDictionary["A"]).to(beNil())
|
||||
expect(self.orderedDictionary.indexForKey("A")).to(beNil())
|
||||
|
||||
expect(self.orderedDictionary["B"]) == 2
|
||||
expect(self.orderedDictionary.indexForKey("B")) == 0
|
||||
|
||||
expect(self.orderedDictionary["C"]) == 3
|
||||
expect(self.orderedDictionary.indexForKey("C")) == 1
|
||||
|
||||
}
|
||||
|
||||
func testRemovalAtIndex() {
|
||||
let removedElement1 = self.orderedDictionary.removeAtIndex(1)
|
||||
let removedElement2 = self.orderedDictionary.removeAtIndex(0)
|
||||
let removedElement3 = self.orderedDictionary.removeAtIndex(5)
|
||||
|
||||
expect(removedElement1?.0) == "B"
|
||||
expect(removedElement1?.1) == 2
|
||||
|
||||
expect(removedElement2?.0) == "A"
|
||||
expect(removedElement2?.1) == 1
|
||||
|
||||
expect(removedElement3).to(beNil())
|
||||
|
||||
expect(self.orderedDictionary.count) == 1
|
||||
|
||||
let elementAtIndex0 = self.orderedDictionary[0]
|
||||
expect(elementAtIndex0.0) == "C"
|
||||
expect(elementAtIndex0.1) == 3
|
||||
}
|
||||
|
||||
// MARK: - Description
|
||||
|
||||
func testDescription() {
|
||||
expect(self.orderedDictionary.description) == "[A: 1, B: 2, C: 3]"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class AccessTests: XCTestCase {
|
||||
|
||||
func testAccessBasic() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
XCTAssertEqual(orderedDictionary.count, 3)
|
||||
XCTAssertFalse(orderedDictionary.isEmpty)
|
||||
|
||||
XCTAssertEqual(orderedDictionary.indices, 0..<3)
|
||||
XCTAssertEqual(orderedDictionary.startIndex, 0)
|
||||
XCTAssertEqual(orderedDictionary.endIndex, 3)
|
||||
|
||||
XCTAssertEqual(orderedDictionary[0].key, "a")
|
||||
XCTAssertEqual(orderedDictionary[1].key, "b")
|
||||
XCTAssertEqual(orderedDictionary[2].key, "c")
|
||||
|
||||
XCTAssertTrue(orderedDictionary.containsKey("a"))
|
||||
XCTAssertTrue(orderedDictionary.containsKey("b"))
|
||||
XCTAssertTrue(orderedDictionary.containsKey("c"))
|
||||
|
||||
XCTAssertEqual(orderedDictionary["a"], 1)
|
||||
XCTAssertEqual(orderedDictionary["b"], 2)
|
||||
XCTAssertEqual(orderedDictionary["c"], 3)
|
||||
|
||||
XCTAssertEqual(orderedDictionary.value(forKey: "a"), 1)
|
||||
XCTAssertEqual(orderedDictionary.value(forKey: "b"), 2)
|
||||
XCTAssertEqual(orderedDictionary.value(forKey: "c"), 3)
|
||||
|
||||
XCTAssertEqual(orderedDictionary.index(forKey: "a"), 0)
|
||||
XCTAssertEqual(orderedDictionary.index(forKey: "b"), 1)
|
||||
XCTAssertEqual(orderedDictionary.index(forKey: "c"), 2)
|
||||
|
||||
XCTAssertNotNil(orderedDictionary.elementAt(0))
|
||||
XCTAssertNotNil(orderedDictionary.elementAt(1))
|
||||
XCTAssertNotNil(orderedDictionary.elementAt(2))
|
||||
}
|
||||
|
||||
func testAccessSlice() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
let slice = orderedDictionary[2..<4]
|
||||
|
||||
XCTAssertEqual(slice.count, 2)
|
||||
XCTAssertFalse(slice.isEmpty)
|
||||
|
||||
XCTAssertEqual(slice.indices, 2..<4)
|
||||
XCTAssertEqual(slice.startIndex, 2)
|
||||
XCTAssertEqual(slice.endIndex, 4)
|
||||
|
||||
XCTAssertEqual(orderedDictionary[2].key, "c")
|
||||
XCTAssertEqual(orderedDictionary[3].key, "d")
|
||||
}
|
||||
|
||||
func testAccessOrderedKeys() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary.orderedKeys,
|
||||
["a", "b", "c"]
|
||||
)
|
||||
}
|
||||
|
||||
func testAccessOrderedValues() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
XCTAssertEqual(
|
||||
Array(orderedDictionary.orderedValues),
|
||||
[1, 2, 3]
|
||||
)
|
||||
}
|
||||
|
||||
func testAccessElementAtInvalidIndex() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
XCTAssertNil(orderedDictionary.elementAt(-1))
|
||||
XCTAssertNil(orderedDictionary.elementAt(3))
|
||||
}
|
||||
|
||||
func testAccessUnsortedDictionary() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary.unorderedDictionary,
|
||||
["a": 1, "b": 2, "c": 3]
|
||||
)
|
||||
}
|
||||
|
||||
func testIteratorInForLoop() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
var keys = [String]()
|
||||
var values = [Int]()
|
||||
|
||||
for (key, value) in orderedDictionary {
|
||||
keys.append(key)
|
||||
values.append(value)
|
||||
}
|
||||
|
||||
XCTAssertEqual(keys, ["a", "b", "c"])
|
||||
XCTAssertEqual(values, [1, 2, 3])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class CapacityTests: XCTestCase {
|
||||
|
||||
func testCapacityReservationViaInit() {
|
||||
let orderedDictionary = OrderedDictionary<String, Int>(minimumCapacity: 10)
|
||||
|
||||
XCTAssertGreaterThanOrEqual(orderedDictionary.capacity, 10)
|
||||
}
|
||||
|
||||
func testCapacityReservationViaMethod() {
|
||||
var orderedDictionary = OrderedDictionary<String, Int>()
|
||||
|
||||
XCTAssertEqual(orderedDictionary.capacity, 0)
|
||||
|
||||
orderedDictionary.reserveCapacity(10)
|
||||
|
||||
XCTAssertGreaterThanOrEqual(orderedDictionary.capacity, 10)
|
||||
XCTAssertLessThan(orderedDictionary.capacity, 20)
|
||||
|
||||
orderedDictionary.reserveCapacity(20)
|
||||
|
||||
XCTAssertGreaterThanOrEqual(orderedDictionary.capacity, 20)
|
||||
}
|
||||
|
||||
func testCapacityGrowForElementInsertion() {
|
||||
var orderedDictionary = OrderedDictionary<String, Int>()
|
||||
|
||||
XCTAssertEqual(orderedDictionary.capacity, 0)
|
||||
|
||||
orderedDictionary["a"] = 1
|
||||
|
||||
XCTAssertEqual(orderedDictionary.capacity, 1)
|
||||
|
||||
orderedDictionary["b"] = 2
|
||||
orderedDictionary["a"] = 3
|
||||
|
||||
XCTAssertEqual(orderedDictionary.capacity, 2)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class CodingTests: XCTestCase {
|
||||
|
||||
func testEncodingAndDecodingViaJSON() throws {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let jsonEncoder = JSONEncoder()
|
||||
let data = try jsonEncoder.encode(orderedDictionary)
|
||||
let actualString = String(data: data, encoding: .utf8)
|
||||
|
||||
let expectedString = "[\"a\",1,\"b\",2,\"c\",3]"
|
||||
|
||||
XCTAssertEqual(actualString, expectedString)
|
||||
|
||||
let jsonDecoder = JSONDecoder()
|
||||
let actual = try jsonDecoder.decode(OrderedDictionary<String, Int>.self, from: data)
|
||||
|
||||
let expected = orderedDictionary
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
func testEncodingAndDecodingViaPropertyList() throws {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let plistEncoder = PropertyListEncoder()
|
||||
let data = try plistEncoder.encode(orderedDictionary)
|
||||
|
||||
let plistDecoder = PropertyListDecoder()
|
||||
let actual = try plistDecoder.decode(OrderedDictionary<String, Int>.self, from: data)
|
||||
|
||||
let expected = orderedDictionary
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
struct DescribedValue: CustomStringConvertible, CustomDebugStringConvertible {
|
||||
init(_ value: Int) { self.value = value }
|
||||
let value: Int
|
||||
var description: String { return "\(value)" }
|
||||
var debugDescription: String { return "debug(\(value))" }
|
||||
}
|
||||
|
||||
class DescriptionTests: XCTestCase {
|
||||
|
||||
func testEmptyDescription() {
|
||||
let orderedDictionary = OrderedDictionary<String, DescribedValue>()
|
||||
|
||||
XCTAssertEqual(orderedDictionary.description, "[:]")
|
||||
}
|
||||
|
||||
func testDescription() {
|
||||
let orderedDictionary: OrderedDictionary = [
|
||||
"a": DescribedValue(1),
|
||||
"b": DescribedValue(2),
|
||||
"c": DescribedValue(3)
|
||||
]
|
||||
|
||||
XCTAssertEqual(orderedDictionary.description, "[a: 1, b: 2, c: 3]")
|
||||
}
|
||||
|
||||
func testEmptyDebugDescription() {
|
||||
let orderedDictionary = OrderedDictionary<String, DescribedValue>()
|
||||
|
||||
XCTAssertEqual(orderedDictionary.debugDescription, "[:]")
|
||||
}
|
||||
|
||||
func testDebugDescription() {
|
||||
let orderedDictionary: OrderedDictionary = [
|
||||
"a": DescribedValue(1),
|
||||
"b": DescribedValue(2),
|
||||
"c": DescribedValue(3)
|
||||
]
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary.debugDescription,
|
||||
"[\"a\": debug(1), \"b\": debug(2), \"c\": debug(3)]"
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class InitializationTests: XCTestCase {
|
||||
|
||||
func testInitializationFromArrayLiteral() {
|
||||
let actual: OrderedDictionary = [
|
||||
("a", 1),
|
||||
("b", 2),
|
||||
("c", 3)
|
||||
]
|
||||
|
||||
let expected = OrderedDictionary(uniqueKeysWithValues: [
|
||||
(key: "a", value: 1),
|
||||
(key: "b", value: 2),
|
||||
(key: "c", value: 3)
|
||||
])
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
func testInitializationFromDictionaryLiteral() {
|
||||
let actual: OrderedDictionary = [
|
||||
"a": 1,
|
||||
"b": 2,
|
||||
"c": 3
|
||||
]
|
||||
|
||||
let expected = OrderedDictionary(uniqueKeysWithValues: [
|
||||
(key: "a", value: 1),
|
||||
(key: "b", value: 2),
|
||||
(key: "c", value: 3)
|
||||
])
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
func testInitializationFromValuesAndKeyProviderClosure() {
|
||||
let actual = OrderedDictionary(
|
||||
values: [1, 2, 3],
|
||||
uniquelyKeyedBy: { String($0) }
|
||||
)
|
||||
|
||||
let expected = OrderedDictionary(uniqueKeysWithValues: [
|
||||
(key: "1", value: 1),
|
||||
(key: "2", value: 2),
|
||||
(key: "3", value: 3)
|
||||
])
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
func testInitializationFromValuesAndKeyPath() {
|
||||
let actual = OrderedDictionary(
|
||||
values: ["a", "b", "c"],
|
||||
uniquelyKeyedBy: \.self
|
||||
)
|
||||
|
||||
let expected = OrderedDictionary(uniqueKeysWithValues: [
|
||||
(key: "a", value: "a"),
|
||||
(key: "b", value: "b"),
|
||||
(key: "c", value: "c")
|
||||
])
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
func testInitializationFromUnsortedDictionaryAndSortFunction() {
|
||||
let actual = OrderedDictionary(
|
||||
unsorted: [
|
||||
2: "foo",
|
||||
1: "bar",
|
||||
4: "baz",
|
||||
5: "bat",
|
||||
3: "bam"
|
||||
],
|
||||
areInIncreasingOrder: { $0.key < $1.key }
|
||||
)
|
||||
|
||||
let expected = OrderedDictionary(uniqueKeysWithValues: [
|
||||
(key: 1, value: "bar"),
|
||||
(key: 2, value: "foo"),
|
||||
(key: 3, value: "bam"),
|
||||
(key: 4, value: "baz"),
|
||||
(key: 5, value: "bat")
|
||||
])
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class InsertionsTests: XCTestCase {
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Index-based Insertion
|
||||
// ============================================================================ //
|
||||
|
||||
func testIndexBasedInsertion_uniqueKey_startIndex() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let newElement = (key: "d", value: 4)
|
||||
orderedDictionary.insert(newElement, at: 0)
|
||||
XCTAssertEqual(orderedDictionary, ["d": 4, "a": 1, "b": 2, "c": 3])
|
||||
}
|
||||
|
||||
func testIndexBasedInsertion_uniqueKey_middleIndex() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let newElement = (key: "d", value: 4)
|
||||
orderedDictionary.insert(newElement, at: 2)
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "d": 4, "c": 3])
|
||||
}
|
||||
|
||||
func testIndexBasedInsertion_uniqueKey_endIndex() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let newElement = (key: "d", value: 4)
|
||||
orderedDictionary.insert(newElement, at: 3)
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3, "d": 4])
|
||||
}
|
||||
|
||||
func testIndexBasedInsertion_duplicateKey() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
XCTAssertFalse(orderedDictionary.canInsert(key: "a"))
|
||||
XCTAssertTrue(orderedDictionary.canInsert(key: "d"))
|
||||
}
|
||||
|
||||
func testIndexBasedInsertion_invalidIndex() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
XCTAssertFalse(orderedDictionary.canInsert(at: -1))
|
||||
XCTAssertFalse(orderedDictionary.canInsert(at: 4))
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Key-based Insertion
|
||||
// ============================================================================ //
|
||||
|
||||
func testKeyBasedInsertion() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
orderedDictionary["d"] = 4
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3, "d": 4])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class MapFilterTests: XCTestCase {
|
||||
|
||||
func testMapValues() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary.mapValues { String($0) },
|
||||
["a": "1", "b": "2", "c": "3", "d": "4"]
|
||||
)
|
||||
}
|
||||
|
||||
func testCompactMapValues() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary.compactMapValues { $0.isMultiple(of: 2) ? String($0) : nil },
|
||||
["b": "2", "d": "4"]
|
||||
)
|
||||
}
|
||||
|
||||
func testFilter() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary.filter { $0.value.isMultiple(of: 2) },
|
||||
["b": 2, "d": 4]
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class RemovalTests: XCTestCase {
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Key-based Removal Via removeValue(forKey:)
|
||||
// ============================================================================ //
|
||||
|
||||
func testKeyBasedRemoval_viaMethod_existingKey() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let value = orderedDictionary.removeValue(forKey: "b")
|
||||
|
||||
XCTAssertEqual(value, 2)
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "c": 3])
|
||||
}
|
||||
|
||||
func testKeyBasedRemoval_viaMethod_invalidKey() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let value = orderedDictionary.removeValue(forKey: "d")
|
||||
|
||||
XCTAssertNil(value)
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Key-based Removal Via subscript(key:)
|
||||
// ============================================================================ //
|
||||
|
||||
func testKeyBasedRemoval_viaSubscript_existingKey() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
orderedDictionary["b"] = nil
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "c": 3])
|
||||
}
|
||||
|
||||
func testKeyBasedRemoval_viaSubscript_invalidKey() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
orderedDictionary["d"] = nil
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Index-based Removal Via Method
|
||||
// ============================================================================ //
|
||||
|
||||
func testIndexBasedRemoval_viaMethod_validIndex() throws {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let (key, value) = try XCTUnwrap(orderedDictionary.remove(at: 2))
|
||||
|
||||
XCTAssertEqual(key, "c")
|
||||
XCTAssertEqual(value, 3)
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2])
|
||||
}
|
||||
|
||||
func testIndexBasedRemoval_viaMethod_invalidIndex() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let element = orderedDictionary.remove(at: 5)
|
||||
|
||||
XCTAssertNil(element)
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Remove All
|
||||
// ============================================================================ //
|
||||
|
||||
func testRemoveAll() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
orderedDictionary.removeAll()
|
||||
|
||||
XCTAssertEqual(orderedDictionary, [])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Pop First & Last
|
||||
// ============================================================================ //
|
||||
|
||||
func testPopFirstEmpty() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = []
|
||||
|
||||
let first = orderedDictionary.popFirst()
|
||||
|
||||
XCTAssertNil(first)
|
||||
}
|
||||
|
||||
func testPopFirstNonEmpty() throws {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
let first = try XCTUnwrap(orderedDictionary.popFirst())
|
||||
|
||||
XCTAssertEqual(first.key, "a")
|
||||
XCTAssertEqual(first.value, 1)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["b": 2, "c": 3, "d": 4])
|
||||
}
|
||||
|
||||
func testPopLastEmpty() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = []
|
||||
|
||||
let last = orderedDictionary.popLast()
|
||||
|
||||
XCTAssertNil(last)
|
||||
}
|
||||
|
||||
func testPopLastNonEmpty() throws {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
let last = try XCTUnwrap(orderedDictionary.popLast())
|
||||
|
||||
XCTAssertEqual(last.key, "d")
|
||||
XCTAssertEqual(last.value, 4)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Removal First & Last
|
||||
// ============================================================================ //
|
||||
|
||||
func testRemoveFirstNonEmpty() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
let first = orderedDictionary.removeFirst()
|
||||
|
||||
XCTAssertEqual(first.key, "a")
|
||||
XCTAssertEqual(first.value, 1)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["b": 2, "c": 3, "d": 4])
|
||||
}
|
||||
|
||||
func testRemoveLastNonEmpty() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
let last = orderedDictionary.removeLast()
|
||||
|
||||
XCTAssertEqual(last.key, "d")
|
||||
XCTAssertEqual(last.value, 4)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class ReorderingTests: XCTestCase {
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Reversal
|
||||
// ============================================================================ //
|
||||
|
||||
func testReversal() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
orderedDictionary.reverse()
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["d": 4, "c": 3, "b": 2, "a": 1])
|
||||
}
|
||||
|
||||
func testReversal_throughSlice() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
orderedDictionary[1..<3].reverse()
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "c": 3, "b": 2, "d": 4])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Partitioning
|
||||
// ============================================================================ //
|
||||
|
||||
func testPartitioning() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
let index = orderedDictionary.partition(by: { $0.value.isMultiple(of: 2) })
|
||||
|
||||
XCTAssertEqual(index, 2)
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "c": 3, "b": 2, "d": 4])
|
||||
}
|
||||
|
||||
func testPartitioning_throughSlice() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
let index = orderedDictionary[0..<3].partition(by: { !$0.value.isMultiple(of: 2) })
|
||||
|
||||
XCTAssertEqual(index, 1)
|
||||
XCTAssertEqual(orderedDictionary, ["b": 2, "a": 1, "c": 3, "d": 4])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Swapping
|
||||
// ============================================================================ //
|
||||
|
||||
func testSwapAtDifferentIndices() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
orderedDictionary.swapAt(1, 3)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "d": 4, "c": 3, "b": 2])
|
||||
}
|
||||
|
||||
func testSwapAtSameIndex() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
orderedDictionary.swapAt(0, 0)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3, "d": 4])
|
||||
}
|
||||
|
||||
func testSwapAtDifferentIndices_throughSlice() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
orderedDictionary[1..<4].swapAt(1, 3)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "d": 4, "c": 3, "b": 2])
|
||||
}
|
||||
|
||||
func testSwapAtSameIndex_throughSlice() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3, "d": 4]
|
||||
|
||||
orderedDictionary[0..<1].swapAt(0, 0)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 2, "c": 3, "d": 4])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
func sortByValuesAndKeys<Key: Comparable, Value: Comparable>(
|
||||
element1: (key: Key, value: Value),
|
||||
element2: (key: Key, value: Value)
|
||||
) -> Bool {
|
||||
if element1.value != element2.value {
|
||||
return element1.value < element2.value
|
||||
} else {
|
||||
return element1.key < element2.key
|
||||
}
|
||||
}
|
||||
|
||||
class SortingTests: XCTestCase {
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Mutating Sort
|
||||
// ============================================================================ //
|
||||
|
||||
func testMutatingSort() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["e": 4, "g": 3, "a": 3, "d": 1, "b": 4]
|
||||
|
||||
orderedDictionary.sort(by: sortByValuesAndKeys)
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary,
|
||||
["d": 1, "a": 3, "g": 3, "b": 4, "e": 4]
|
||||
)
|
||||
}
|
||||
|
||||
func testMutatingSort_throughSlice() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["e": 4, "g": 3, "a": 3, "d": 1, "b": 4]
|
||||
|
||||
orderedDictionary[2..<5].sort(by: sortByValuesAndKeys)
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary,
|
||||
["e": 4, "g": 3, "d": 1, "a": 3, "b": 4]
|
||||
)
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Non-mutating Sort
|
||||
// ============================================================================ //
|
||||
|
||||
func testSortingWithoutMutation() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["e": 4, "g": 3, "a": 3, "d": 1, "b": 4]
|
||||
|
||||
XCTAssertEqual(
|
||||
orderedDictionary.sorted(by: sortByValuesAndKeys),
|
||||
["d": 1, "a": 3, "g": 3, "b": 4, "e": 4]
|
||||
)
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Sorting Unsorted Dictionary
|
||||
// ============================================================================ //
|
||||
|
||||
func testSortingUnsortedDictionary() {
|
||||
let dictionary = [
|
||||
2: "foo",
|
||||
1: "bar",
|
||||
4: "baz",
|
||||
5: "bat",
|
||||
3: "bam"
|
||||
]
|
||||
|
||||
let actual = dictionary.sorted { $0.key < $1.key }
|
||||
|
||||
let expected: OrderedDictionary<Int, String> = [
|
||||
1: "bar",
|
||||
2: "foo",
|
||||
3: "bam",
|
||||
4: "baz",
|
||||
5: "bat"
|
||||
]
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
// See #49
|
||||
class SubscriptAmbiguityTests: XCTestCase {
|
||||
|
||||
func testAccess() {
|
||||
let orderedDictionary: OrderedDictionary<Int, String> = [1: "a", 2: "b", 3: "c"]
|
||||
|
||||
let valueForKey = orderedDictionary[1] as String?
|
||||
let elementAtIndex = orderedDictionary[1] as (key: Int, value: String)
|
||||
|
||||
XCTAssertEqual(valueForKey, "a")
|
||||
XCTAssertEqual(elementAtIndex.key, 2)
|
||||
XCTAssertEqual(elementAtIndex.value, "b")
|
||||
}
|
||||
|
||||
func testIndexBasedUpdate() {
|
||||
var orderedDictionary: OrderedDictionary<Int, String> = [1: "a", 2: "b", 3: "c"]
|
||||
|
||||
orderedDictionary[1] = (key: 2, value: "x")
|
||||
|
||||
XCTAssertEqual(orderedDictionary, [1: "a", 2: "x", 3: "c"])
|
||||
}
|
||||
|
||||
func testKeyBasedUpdate() {
|
||||
var orderedDictionary: OrderedDictionary<Int, String> = [1: "a", 2: "b", 3: "c"]
|
||||
|
||||
orderedDictionary[1] = "x"
|
||||
|
||||
XCTAssertEqual(orderedDictionary, [1: "x", 2: "b", 3: "c"])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
import Foundation
|
||||
import OrderedDictionary
|
||||
import XCTest
|
||||
|
||||
class UpdatesTests: XCTestCase {
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Index-based Updates Via update(_:at:)
|
||||
// ============================================================================ //
|
||||
|
||||
func testIndexBasedUpdate_viaMethod_sameKey() throws {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let newElement = (key: "b", value: 0)
|
||||
let previousElement = try XCTUnwrap(orderedDictionary.update(newElement, at: 1))
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 0, "c": 3])
|
||||
|
||||
XCTAssertEqual(previousElement.key, "b")
|
||||
XCTAssertEqual(previousElement.value, 2)
|
||||
}
|
||||
|
||||
func testIndexBasedUpdate_viaMethod_newUniqueKey() throws {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let newElement = (key: "d", value: 0)
|
||||
let previousElement = try XCTUnwrap(orderedDictionary.update(newElement, at: 1))
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "d": 0, "c": 3])
|
||||
|
||||
XCTAssertEqual(previousElement.key, "b")
|
||||
XCTAssertEqual(previousElement.value, 2)
|
||||
}
|
||||
|
||||
func testIndexBasedUpdate_viaMethod_duplicateKey() {
|
||||
let orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let element = (key: "a", value: 42)
|
||||
|
||||
XCTAssertTrue(orderedDictionary.canUpdate(element, at: 0))
|
||||
XCTAssertFalse(orderedDictionary.canUpdate(element, at: 1))
|
||||
XCTAssertFalse(orderedDictionary.canUpdate(element, at: 2))
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Index-based Updates Via subscript(position:)
|
||||
// ============================================================================ //
|
||||
|
||||
func testIndexBasedUpdate_viaSubscriptSingle_sameKey() throws {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
orderedDictionary[1] = (key: "b", value: 0)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "b": 0, "c": 3])
|
||||
}
|
||||
|
||||
func testIndexBasedUpdate_viaSubscriptSingle_newUniqueKey() throws {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
orderedDictionary[1] = (key: "d", value: 0)
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "d": 0, "c": 3])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Index-based Updates Via subscript(bounds:)
|
||||
// ============================================================================ //
|
||||
|
||||
func testIndexBasedUpdate_viaSubscriptMultiple_newUniqueKeys() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let sliceOrderedDictionary: OrderedDictionary<String, Int> = ["d": 0, "e": 0]
|
||||
let slice = sliceOrderedDictionary[0..<2]
|
||||
|
||||
orderedDictionary[1..<3] = slice
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "d": 0, "e": 0])
|
||||
}
|
||||
|
||||
func testIndexBasedUpdate_viaSubscriptMultiple_sameKeys() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let sliceOrderedDictionary: OrderedDictionary<String, Int> = ["c": 0, "b": 0]
|
||||
let slice = sliceOrderedDictionary[0..<2]
|
||||
|
||||
orderedDictionary[1..<3] = slice
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "c": 0, "b": 0])
|
||||
}
|
||||
|
||||
func testIndexBasedUpdate_viaSubscriptMultiple_mixedKeys() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
let sliceOrderedDictionary: OrderedDictionary<String, Int> = ["d": 0, "c": 0]
|
||||
let slice = sliceOrderedDictionary[0..<2]
|
||||
|
||||
orderedDictionary[1..<3] = slice
|
||||
|
||||
XCTAssertEqual(orderedDictionary, ["a": 1, "d": 0, "c": 0])
|
||||
}
|
||||
|
||||
// ============================================================================ //
|
||||
// MARK: - Key-based Updates
|
||||
// ============================================================================ //
|
||||
|
||||
func testKeyBasedUpdate() {
|
||||
var orderedDictionary: OrderedDictionary<String, Int> = ["a": 1, "b": 2, "c": 3]
|
||||
|
||||
// Update
|
||||
orderedDictionary["a"] = 5
|
||||
XCTAssertEqual(orderedDictionary, ["a": 5, "b": 2, "c": 3])
|
||||
|
||||
// Insertion
|
||||
orderedDictionary["d"] = 10
|
||||
XCTAssertEqual(orderedDictionary, ["a": 5, "b": 2, "c": 3, "d": 10])
|
||||
XCTAssertTrue(orderedDictionary.containsKey("d"))
|
||||
|
||||
// Removal
|
||||
orderedDictionary["b"] = nil
|
||||
XCTAssertEqual(orderedDictionary, ["a": 5, "c": 3, "d": 10])
|
||||
XCTAssertFalse(orderedDictionary.containsKey("b"))
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// https://github.com/realm/SwiftLint/pull/2965
|
||||
// https://bugs.swift.org/browse/SR-11501
|
||||
#if compiler(<5.1) || (SWIFT_PACKAGE && os(macOS))
|
||||
internal enum UnwrapError: Error {
|
||||
case missingValue
|
||||
}
|
||||
|
||||
internal func XCTUnwrap<T>(
|
||||
_ expression: @autoclosure () throws -> T?,
|
||||
_ message: @autoclosure () -> String = ""
|
||||
) throws -> T {
|
||||
if let value = try expression() {
|
||||
return value
|
||||
} else {
|
||||
throw UnwrapError.missingValue
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,183 @@
|
||||
#if !canImport(ObjectiveC)
|
||||
import XCTest
|
||||
|
||||
extension AccessTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__AccessTests = [
|
||||
("testAccessBasic", testAccessBasic),
|
||||
("testAccessElementAtInvalidIndex", testAccessElementAtInvalidIndex),
|
||||
("testAccessOrderedKeys", testAccessOrderedKeys),
|
||||
("testAccessOrderedValues", testAccessOrderedValues),
|
||||
("testAccessSlice", testAccessSlice),
|
||||
("testAccessUnsortedDictionary", testAccessUnsortedDictionary),
|
||||
("testIteratorInForLoop", testIteratorInForLoop),
|
||||
]
|
||||
}
|
||||
|
||||
extension CapacityTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__CapacityTests = [
|
||||
("testCapacityGrowForElementInsertion", testCapacityGrowForElementInsertion),
|
||||
("testCapacityReservationViaInit", testCapacityReservationViaInit),
|
||||
("testCapacityReservationViaMethod", testCapacityReservationViaMethod),
|
||||
]
|
||||
}
|
||||
|
||||
extension CodingTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__CodingTests = [
|
||||
("testEncodingAndDecodingViaJSON", testEncodingAndDecodingViaJSON),
|
||||
("testEncodingAndDecodingViaPropertyList", testEncodingAndDecodingViaPropertyList),
|
||||
]
|
||||
}
|
||||
|
||||
extension DescriptionTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__DescriptionTests = [
|
||||
("testDebugDescription", testDebugDescription),
|
||||
("testDescription", testDescription),
|
||||
("testEmptyDebugDescription", testEmptyDebugDescription),
|
||||
("testEmptyDescription", testEmptyDescription),
|
||||
]
|
||||
}
|
||||
|
||||
extension InitializationTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__InitializationTests = [
|
||||
("testInitializationFromArrayLiteral", testInitializationFromArrayLiteral),
|
||||
("testInitializationFromDictionaryLiteral", testInitializationFromDictionaryLiteral),
|
||||
("testInitializationFromUnsortedDictionaryAndSortFunction", testInitializationFromUnsortedDictionaryAndSortFunction),
|
||||
("testInitializationFromValuesAndKeyPath", testInitializationFromValuesAndKeyPath),
|
||||
("testInitializationFromValuesAndKeyProviderClosure", testInitializationFromValuesAndKeyProviderClosure),
|
||||
]
|
||||
}
|
||||
|
||||
extension InsertionsTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__InsertionsTests = [
|
||||
("testIndexBasedInsertion_duplicateKey", testIndexBasedInsertion_duplicateKey),
|
||||
("testIndexBasedInsertion_invalidIndex", testIndexBasedInsertion_invalidIndex),
|
||||
("testIndexBasedInsertion_uniqueKey_endIndex", testIndexBasedInsertion_uniqueKey_endIndex),
|
||||
("testIndexBasedInsertion_uniqueKey_middleIndex", testIndexBasedInsertion_uniqueKey_middleIndex),
|
||||
("testIndexBasedInsertion_uniqueKey_startIndex", testIndexBasedInsertion_uniqueKey_startIndex),
|
||||
("testKeyBasedInsertion", testKeyBasedInsertion),
|
||||
]
|
||||
}
|
||||
|
||||
extension MapFilterTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__MapFilterTests = [
|
||||
("testCompactMapValues", testCompactMapValues),
|
||||
("testFilter", testFilter),
|
||||
("testMapValues", testMapValues),
|
||||
]
|
||||
}
|
||||
|
||||
extension RemovalTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__RemovalTests = [
|
||||
("testIndexBasedRemoval_viaMethod_invalidIndex", testIndexBasedRemoval_viaMethod_invalidIndex),
|
||||
("testIndexBasedRemoval_viaMethod_validIndex", testIndexBasedRemoval_viaMethod_validIndex),
|
||||
("testKeyBasedRemoval_viaMethod_existingKey", testKeyBasedRemoval_viaMethod_existingKey),
|
||||
("testKeyBasedRemoval_viaMethod_invalidKey", testKeyBasedRemoval_viaMethod_invalidKey),
|
||||
("testKeyBasedRemoval_viaSubscript_existingKey", testKeyBasedRemoval_viaSubscript_existingKey),
|
||||
("testKeyBasedRemoval_viaSubscript_invalidKey", testKeyBasedRemoval_viaSubscript_invalidKey),
|
||||
("testPopFirstEmpty", testPopFirstEmpty),
|
||||
("testPopFirstNonEmpty", testPopFirstNonEmpty),
|
||||
("testPopLastEmpty", testPopLastEmpty),
|
||||
("testPopLastNonEmpty", testPopLastNonEmpty),
|
||||
("testRemoveAll", testRemoveAll),
|
||||
("testRemoveFirstNonEmpty", testRemoveFirstNonEmpty),
|
||||
("testRemoveLastNonEmpty", testRemoveLastNonEmpty),
|
||||
]
|
||||
}
|
||||
|
||||
extension ReorderingTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__ReorderingTests = [
|
||||
("testPartitioning", testPartitioning),
|
||||
("testPartitioning_throughSlice", testPartitioning_throughSlice),
|
||||
("testReversal", testReversal),
|
||||
("testReversal_throughSlice", testReversal_throughSlice),
|
||||
("testSwapAtDifferentIndices", testSwapAtDifferentIndices),
|
||||
("testSwapAtDifferentIndices_throughSlice", testSwapAtDifferentIndices_throughSlice),
|
||||
("testSwapAtSameIndex", testSwapAtSameIndex),
|
||||
("testSwapAtSameIndex_throughSlice", testSwapAtSameIndex_throughSlice),
|
||||
]
|
||||
}
|
||||
|
||||
extension SortingTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__SortingTests = [
|
||||
("testMutatingSort", testMutatingSort),
|
||||
("testMutatingSort_throughSlice", testMutatingSort_throughSlice),
|
||||
("testSortingUnsortedDictionary", testSortingUnsortedDictionary),
|
||||
("testSortingWithoutMutation", testSortingWithoutMutation),
|
||||
]
|
||||
}
|
||||
|
||||
extension SubscriptAmbiguityTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__SubscriptAmbiguityTests = [
|
||||
("testAccess", testAccess),
|
||||
("testIndexBasedUpdate", testIndexBasedUpdate),
|
||||
("testKeyBasedUpdate", testKeyBasedUpdate),
|
||||
]
|
||||
}
|
||||
|
||||
extension UpdatesTests {
|
||||
// DO NOT MODIFY: This is autogenerated, use:
|
||||
// `swift test --generate-linuxmain`
|
||||
// to regenerate.
|
||||
static let __allTests__UpdatesTests = [
|
||||
("testIndexBasedUpdate_viaMethod_duplicateKey", testIndexBasedUpdate_viaMethod_duplicateKey),
|
||||
("testIndexBasedUpdate_viaMethod_newUniqueKey", testIndexBasedUpdate_viaMethod_newUniqueKey),
|
||||
("testIndexBasedUpdate_viaMethod_sameKey", testIndexBasedUpdate_viaMethod_sameKey),
|
||||
("testIndexBasedUpdate_viaSubscriptMultiple_mixedKeys", testIndexBasedUpdate_viaSubscriptMultiple_mixedKeys),
|
||||
("testIndexBasedUpdate_viaSubscriptMultiple_newUniqueKeys", testIndexBasedUpdate_viaSubscriptMultiple_newUniqueKeys),
|
||||
("testIndexBasedUpdate_viaSubscriptMultiple_sameKeys", testIndexBasedUpdate_viaSubscriptMultiple_sameKeys),
|
||||
("testIndexBasedUpdate_viaSubscriptSingle_newUniqueKey", testIndexBasedUpdate_viaSubscriptSingle_newUniqueKey),
|
||||
("testIndexBasedUpdate_viaSubscriptSingle_sameKey", testIndexBasedUpdate_viaSubscriptSingle_sameKey),
|
||||
("testKeyBasedUpdate", testKeyBasedUpdate),
|
||||
]
|
||||
}
|
||||
|
||||
public func __allTests() -> [XCTestCaseEntry] {
|
||||
return [
|
||||
testCase(AccessTests.__allTests__AccessTests),
|
||||
testCase(CapacityTests.__allTests__CapacityTests),
|
||||
testCase(CodingTests.__allTests__CodingTests),
|
||||
testCase(DescriptionTests.__allTests__DescriptionTests),
|
||||
testCase(InitializationTests.__allTests__InitializationTests),
|
||||
testCase(InsertionsTests.__allTests__InsertionsTests),
|
||||
testCase(MapFilterTests.__allTests__MapFilterTests),
|
||||
testCase(RemovalTests.__allTests__RemovalTests),
|
||||
testCase(ReorderingTests.__allTests__ReorderingTests),
|
||||
testCase(SortingTests.__allTests__SortingTests),
|
||||
testCase(SubscriptAmbiguityTests.__allTests__SubscriptAmbiguityTests),
|
||||
testCase(UpdatesTests.__allTests__UpdatesTests),
|
||||
]
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user