// RUN: mkdir -p %t
// RUN: %target-clang -x c %S/Inputs/VariadicBool/variadicBool.c -c -o %t/variadicBool.o
// RUN: %target-build-swift -I %S/Inputs/VariadicBool/ %t/variadicBool.o %s -o %t/a.out
// RUN: %target-run %t/a.out
// REQUIRES: executable_test


import Swift
import StdlibUnittest
import StdlibCollectionUnittest
import VariadicBool

func countTrues(_ count: Int, _ bools: CVarArg...) -> Int {
  return Int(withVaList(bools) { numberOfTrues(Int32(count), $0) })
}

var BoolTestSuite = TestSuite("Bool")

BoolTestSuite.test("AllTrues") {
  let result = countTrues(2, true, true)
  expectEqual(2, result)
}

BoolTestSuite.test("HalfAndHalf") {
  let result = countTrues(4, true, true, false, false)
  expectEqual(2, result)
}

BoolTestSuite.test("AllFalse") {
  let result = countTrues(2, false, false)
  expectEqual(0, result)
}

BoolTestSuite.test("Interleaved") {
  let result = countTrues(7, false, true, false, true, false, true, false)
  expectEqual(3, result)
}

BoolTestSuite.test("FalsePositive") {
  let result = countTrues(7, false, true, false, true, false, true, false)
  expectNotEqual(30, result)
}

runAllTests()