Skip to content

Commit bfad888

Browse files
committed
Merge pull request kodecocodes#25 from chris-pilcher/Select-Minimum-Maximum
Add tests for select minimum maximum algorithms
2 parents 8d375e3 + 3f3dd2c commit bfad888

File tree

8 files changed

+599
-0
lines changed

8 files changed

+599
-0
lines changed

Select Minimum Maximum/MinimumMaximumPairs.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
/*
2+
Finds the maximum and minimum value in an array in O(n) time.
3+
The array must not be empty.
4+
*/
5+
16
func minimumMaximum<T: Comparable>(var array: [T]) -> (minimum: T, maximum: T)
27
{
38
var minimum = array.first!

Select Minimum Maximum/SelectMinimumMaximum Tests/SelectMinimumMaximum.xcodeproj/project.pbxproj

Lines changed: 389 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import Cocoa
2+
3+
@NSApplicationMain
4+
class AppDelegate: NSObject, NSApplicationDelegate {
5+
6+
@IBOutlet weak var window: NSWindow!
7+
8+
func applicationDidFinishLaunching(aNotification: NSNotification) {
9+
// Insert code here to initialize your application
10+
}
11+
12+
func applicationWillTerminate(aNotification: NSNotification) {
13+
// Insert code here to tear down your application
14+
}
15+
16+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>en</string>
7+
<key>CFBundleExecutable</key>
8+
<string>$(EXECUTABLE_NAME)</string>
9+
<key>CFBundleIconFile</key>
10+
<string></string>
11+
<key>CFBundleIdentifier</key>
12+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
13+
<key>CFBundleInfoDictionaryVersion</key>
14+
<string>6.0</string>
15+
<key>CFBundleName</key>
16+
<string>$(PRODUCT_NAME)</string>
17+
<key>CFBundlePackageType</key>
18+
<string>APPL</string>
19+
<key>CFBundleShortVersionString</key>
20+
<string>1.0</string>
21+
<key>CFBundleSignature</key>
22+
<string>????</string>
23+
<key>CFBundleVersion</key>
24+
<string>1</string>
25+
<key>LSMinimumSystemVersion</key>
26+
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
27+
<key>NSHumanReadableCopyright</key>
28+
<string>Copyright © 2016 Swift Algorithm Club. All rights reserved.</string>
29+
<key>NSPrincipalClass</key>
30+
<string>NSApplication</string>
31+
</dict>
32+
</plist>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>en</string>
7+
<key>CFBundleExecutable</key>
8+
<string>$(EXECUTABLE_NAME)</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11+
<key>CFBundleInfoDictionaryVersion</key>
12+
<string>6.0</string>
13+
<key>CFBundleName</key>
14+
<string>$(PRODUCT_NAME)</string>
15+
<key>CFBundlePackageType</key>
16+
<string>BNDL</string>
17+
<key>CFBundleShortVersionString</key>
18+
<string>1.0</string>
19+
<key>CFBundleSignature</key>
20+
<string>????</string>
21+
<key>CFBundleVersion</key>
22+
<string>1</string>
23+
</dict>
24+
</plist>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import XCTest
2+
@testable import SelectMinimumMaximum
3+
4+
class MaximumTests: XCTestCase {
5+
6+
func testMaximumGivenAListContainingOneElement() {
7+
let array = [ 99 ]
8+
9+
let result = maximum(array)
10+
11+
XCTAssertEqual(result, 99)
12+
}
13+
14+
func testMaximumGivenAListContainingMultipleElementsWithTheSameValue() {
15+
let array = [ 3, 16, 3, 16 ]
16+
17+
let result = maximum(array)
18+
19+
XCTAssertEqual(result, 16)
20+
}
21+
22+
func testMimimumGivenAListOfOrderedElements() {
23+
let array = [ 3, 4, 6, 8, 9 ]
24+
25+
let result = maximum(array)
26+
27+
XCTAssertEqual(result, 9)
28+
}
29+
30+
func testMimimumGivenAListOfReverseOrderedElements() {
31+
let array = [ 9, 8, 6, 4, 3 ]
32+
33+
let result = maximum(array)
34+
35+
XCTAssertEqual(result, 9)
36+
}
37+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import XCTest
2+
@testable import SelectMinimumMaximum
3+
4+
class MinimumTests: XCTestCase {
5+
6+
func testMinimumGivenAListContainingOneElement() {
7+
let array = [ 54 ]
8+
9+
let result = minimum(array)
10+
11+
XCTAssertEqual(result, 54)
12+
}
13+
14+
func testMinimumGivenAListContainingMultipleElementsWithTheSameValue() {
15+
let array = [ 2, 16, 2, 16 ]
16+
17+
let result = minimum(array)
18+
19+
XCTAssertEqual(result, 2)
20+
}
21+
22+
func testMimimumGivenAListOfOrderedElements() {
23+
let array = [ 3, 4, 6, 8, 9 ]
24+
25+
let result = minimum(array)
26+
27+
XCTAssertEqual(result, 3)
28+
}
29+
30+
func testMimimumGivenAListOfReverseOrderedElements() {
31+
let array = [ 9, 8, 6, 4, 3 ]
32+
33+
let result = minimum(array)
34+
35+
XCTAssertEqual(result, 3)
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import XCTest
2+
@testable import SelectMinimumMaximum
3+
4+
class SelectMinimumMaximumTests: XCTestCase {
5+
6+
func testMinimumAndMaximumGivenAListContainingOneElement() {
7+
let array = [ 8 ]
8+
9+
let result = minimumMaximum(array)
10+
11+
XCTAssertEqual(result.minimum, 8)
12+
XCTAssertEqual(result.maximum, 8)
13+
}
14+
15+
func testMinimumAndMaximumGivenAListContainingMultipleElementsWithTheSameValue() {
16+
let array = [ 8, 16, 8, 8 ]
17+
18+
let result = minimumMaximum(array)
19+
20+
XCTAssertEqual(result.minimum, 8)
21+
XCTAssertEqual(result.maximum, 16)
22+
}
23+
24+
func testMimimumAndMaximumGivenAListContainingAnEvenNumberOfElements() {
25+
let array = [ 3, 4, 6, 8 ]
26+
27+
let result = minimumMaximum(array)
28+
29+
XCTAssertEqual(result.minimum, 3)
30+
XCTAssertEqual(result.maximum, 8)
31+
}
32+
33+
func testMimimumAndMaximumGivenAListContainingAnOddNumberOfElements() {
34+
let array = [ 8, 3, 9, 4, 6 ]
35+
36+
let result = minimumMaximum(array)
37+
38+
XCTAssertEqual(result.minimum, 3)
39+
XCTAssertEqual(result.maximum, 9)
40+
}
41+
42+
func testMimimumAndMaximumGivenAListOfOrderedElements() {
43+
let array = [ 3, 4, 6, 8, 9 ]
44+
45+
let result = minimumMaximum(array)
46+
47+
XCTAssertEqual(result.minimum, 3)
48+
XCTAssertEqual(result.maximum, 9)
49+
}
50+
51+
func testMimimumAndMaximumGivenAListOfReverseOrderedElements() {
52+
let array = [ 9, 8, 6, 4, 3 ]
53+
54+
let result = minimumMaximum(array)
55+
56+
XCTAssertEqual(result.minimum, 3)
57+
XCTAssertEqual(result.maximum, 9)
58+
}
59+
}

0 commit comments

Comments
 (0)