File: AlgorithmsInternalsTests.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (74 lines) | stat: -rw-r--r-- 2,215 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2021-2022 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//

@testable import _StringProcessing
import XCTest

// TODO: Protocol-powered testing
extension AlgorithmTests {
  func testAdHoc() {
    let r = try! Regex("a|b+")

    XCTAssert("palindrome".contains(r))
    XCTAssert("botany".contains(r))
    XCTAssert("antiquing".contains(r))
    XCTAssertFalse("cdef".contains(r))

    let str = "a string with the letter b in it"
    let first = str.firstRange(of: r)
    let (expectFirst, expectLast) = (
      str.index(atOffset: 0)..<str.index(atOffset: 1),
      str.index(atOffset: 25)..<str.index(atOffset: 26))
    output(str.split(around: first!))

    XCTAssertEqual(expectFirst, first)
    XCTAssertEqual(
      [expectFirst, expectLast], Array(str.ranges(of: r)))

    XCTAssertTrue(str.starts(with: r))
    XCTAssertEqual(str.dropFirst(), str.trimmingPrefix(r))
  }
  
  func testMatchesCollection() {
    let r = try! Regex("a|b+|c*", as: Substring.self)
    
    let str = "zaabbbbbbcde"
    let matches = str._matches(of: r)
    let expected: [Substring] = [
      "", // before 'z'
      "a",
      "a",
      "bbbbbb",
      "c",
      "", // after 'c'
      "", // after 'd'
      "", // after 'e'
    ]

    // Make sure we're getting the right collection type
    let _: RegexMatchesCollection<Substring> = matches

    XCTAssertEqual(matches.map(\.output), expected)
    
    let i = matches.index(matches.startIndex, offsetBy: 3)
    XCTAssertEqual(matches[i].output, expected[3])
    let j = matches.index(i, offsetBy: 5)
    XCTAssertEqual(j, matches.endIndex)
    
    var index = matches.startIndex
    while index < matches.endIndex {
      XCTAssertEqual(
        matches[index].output,
        expected[matches.distance(from: matches.startIndex, to: index)])
      matches.formIndex(after: &index)
    }
  }
}