 import TestsUtils
 import Foundation
 
+let t: [BenchmarkCategory] = [.validation, .algorithm]
+let ts: [BenchmarkCategory] = [.validation, .algorithm, .String]
+
 public let MapReduce = [
-  BenchmarkInfo(name: "MapReduce", runFunction: run_MapReduce, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceAnyCollection", runFunction: run_MapReduceAnyCollection, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceAnyCollectionShort", runFunction: run_MapReduceAnyCollectionShort, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceClass2", runFunction: run_MapReduceClass, tags: [.validation, .algorithm],
+  BenchmarkInfo(name: "MapReduce", runFunction: run_MapReduce, tags: t),
+  BenchmarkInfo(name: "MapReduceAnyCollection",
+    runFunction: run_MapReduceAnyCollection, tags: t),
+  BenchmarkInfo(name: "MapReduceAnyCollectionShort",
+    runFunction: run_MapReduceAnyCollectionShort, tags: t, legacyFactor: 10),
+  BenchmarkInfo(name: "MapReduceClass2",
+    runFunction: run_MapReduceClass, tags: t,
     setUpFunction: { boxedNumbers(1000) }, tearDownFunction: releaseDecimals),
-  BenchmarkInfo(name: "MapReduceClassShort2", runFunction: run_MapReduceClassShort, tags: [.validation, .algorithm],
+  BenchmarkInfo(name: "MapReduceClassShort2",
+    runFunction: run_MapReduceClassShort, tags: t,
     setUpFunction: { boxedNumbers(10) }, tearDownFunction: releaseDecimals),
-  BenchmarkInfo(name: "MapReduceNSDecimalNumber", runFunction: run_MapReduceNSDecimalNumber, tags: [.validation, .algorithm],
+  BenchmarkInfo(name: "MapReduceNSDecimalNumber",
+    runFunction: run_MapReduceNSDecimalNumber, tags: t,
     setUpFunction: { decimals(1000) }, tearDownFunction: releaseDecimals),
-  BenchmarkInfo(name: "MapReduceNSDecimalNumberShort", runFunction: run_MapReduceNSDecimalNumberShort, tags: [.validation, .algorithm],
+  BenchmarkInfo(name: "MapReduceNSDecimalNumberShort",
+    runFunction: run_MapReduceNSDecimalNumberShort, tags: t,
     setUpFunction: { decimals(10) }, tearDownFunction: releaseDecimals),
-  BenchmarkInfo(name: "MapReduceLazyCollection", runFunction: run_MapReduceLazyCollection, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceLazyCollectionShort", runFunction: run_MapReduceLazyCollectionShort, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceLazySequence", runFunction: run_MapReduceLazySequence, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceSequence", runFunction: run_MapReduceSequence, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceShort", runFunction: run_MapReduceShort, tags: [.validation, .algorithm]),
-  BenchmarkInfo(name: "MapReduceShortString", runFunction: run_MapReduceShortString, tags: [.validation, .algorithm, .String]),
-  BenchmarkInfo(name: "MapReduceString", runFunction: run_MapReduceString, tags: [.validation, .algorithm, .String]),
+  BenchmarkInfo(name: "MapReduceLazyCollection",
+    runFunction: run_MapReduceLazyCollection, tags: t),
+  BenchmarkInfo(name: "MapReduceLazyCollectionShort",
+    runFunction: run_MapReduceLazyCollectionShort, tags: t),
+  BenchmarkInfo(name: "MapReduceLazySequence",
+    runFunction: run_MapReduceLazySequence, tags: t),
+  BenchmarkInfo(name: "MapReduceSequence",
+    runFunction: run_MapReduceSequence, tags: t),
+  BenchmarkInfo(name: "MapReduceShort",
+    runFunction: run_MapReduceShort, tags: t, legacyFactor: 10),
+  BenchmarkInfo(name: "MapReduceShortString",
+    runFunction: run_MapReduceShortString, tags: ts),
+  BenchmarkInfo(name: "MapReduceString",
+    runFunction: run_MapReduceString, tags: ts),
 ]
 
 #if _runtime(_ObjC)

  var numbers = [Int](0..<10)

  var c = 0
  for _ in 1...N*10000 {
    numbers = numbers.map { $0 &+ 5 }
    c += numbers.reduce(0, &+)
  }

  let numbers = AnyCollection([Int](0..<10))

  var c = 0
  for _ in 1...N*1_000 {
    let mapped = numbers.map { $0 &+ 5 }
    c += mapped.reduce(0, &+)
  }
