File: StrToInt.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 (54 lines) | stat: -rw-r--r-- 2,038 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
//===--- StrToInt.swift ---------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2021 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
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

// This test checks performance of String to Int conversion.
// It is reported to be very slow: <rdar://problem/17255477>
import TestsUtils

public let benchmarks =
  BenchmarkInfo(
    name: "StrToInt",
    runFunction: run_StrToInt,
    tags: [.validation, .api, .String],
    legacyFactor: 10)

@inline(never)
public func run_StrToInt(_ n: Int) {
  // 64 numbers from -500_000 to 500_000 generated randomly
  let input = ["-237392", "293715", "126809", "333779", "-362824", "144198",
               "-394973", "-163669", "-7236", "376965", "-400783", "-118670",
               "454728", "-38915", "136285", "-448481", "-499684", "68298",
               "382671", "105432", "-38385", "39422", "-267849", "-439886",
               "292690", "87017", "404692", "27692", "486408", "336482",
               "-67850", "56414", "-340902", "-391782", "414778", "-494338",
               "-413017", "-377452", "-300681", "170194", "428941", "-291665",
               "89331", "329496", "-364449", "272843", "-10688", "142542",
               "-417439", "167337", "96598", "-264104", "-186029", "98480",
               "-316727", "483808", "300149", "-405877", "-98938", "283685",
               "-247856", "-46975", "346060", "160085",]
  let ref_result = 517492
  func doOneIter(_ arr: [String]) -> Int {
    var r = 0
    for n in arr {
      r += Int(n)!
    }
    if r < 0 {
      r = -r
    }
    return r
  }
  var res = Int.max
  for _ in 1...100*n {
    res = res & doOneIter(input)
  }
  check(res == ref_result)
}