//===--- Prefix.swift -----------------------------------------*- swift -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 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
//
//===----------------------------------------------------------------------===//

% # Ignore the following warning. This _is_ the correct file to edit.
////////////////////////////////////////////////////////////////////////////////
// WARNING: This file is manually generated from .gyb template and should not
// be directly modified. Instead, make changes to Prefix.swift.gyb and run
// scripts/generate_harness/generate_harness.py to regenerate this file.
////////////////////////////////////////////////////////////////////////////////

import TestsUtils

let sequenceCount = 4096
let prefixCount = sequenceCount - 1024
let sumCount = prefixCount * (prefixCount - 1) / 2
let array: [Int] = Array(0..<sequenceCount)
%{
# Name and initializer Expression pairs for Sequences to test.

Sequences = [
  ('CountableRange', '0..<sequenceCount'),
  ('Sequence',
    'sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil }'),
  ('AnySequence',
    'AnySequence(sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil })'),
  ('AnySeqCntRange', 'AnySequence(0..<sequenceCount)'),
  ('AnySeqCRangeIter', 'AnySequence((0..<sequenceCount).makeIterator())'),
  ('AnyCollection', 'AnyCollection(0..<sequenceCount)'),
  ('Array', 'array'),
]
def lazy ((Name, Expr)) : return (Name + 'Lazy', '(' + Expr + ').lazy')

Sequences = Sequences + map(lazy, Sequences)
}%

public let Prefix = [
% for (Name, Expr) in Sequences:
  BenchmarkInfo(
    name: "Prefix${Name}",
    runFunction: run_Prefix${Name},
    tags: [.validation, .api${
    ', .Array],\n    setUpFunction: { blackHole(array) })' if 'Array' in Name else
    '])' },
% end
]

% for (Name, Expr) in Sequences:
@inline(never)
public func run_Prefix${Name}(_ N: Int) {
  let s = ${Expr}
  for _ in 1...20*N {
    var result = 0
    for element in s.prefix(prefixCount) {
      result += element
    }
    CheckResults(result == sumCount)
  }
}
% end

// ${'Local Variables'}:
// eval: (read-only-mode 1)
// End:
