//===--- OptionSetTest.swift - Test for library-only option sets ----------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
// RUN: %target-run-simple-swift
// REQUIRES: executable_test

struct PackagingOptions : OptionSet {
  let rawValue: Int
  init(rawValue: Int) { self.rawValue = rawValue }

  static let
    Box = PackagingOptions(rawValue: 1),
    Carton = PackagingOptions(rawValue: 2),
    Bag = PackagingOptions(rawValue: 4),
    Satchel = PackagingOptions(rawValue: 8)

  // FIXME: these must be separate decls because of <rdar://20962990>
  static let BoxOrBag: PackagingOptions = [Box, Bag]
  static let BoxOrCartonOrBag: PackagingOptions = [Box, Carton, Bag]
  static let SatchelOrBag = Satchel.union(Bag)
}

import StdlibUnittest


var tests = TestSuite("OptionSet")

tests.test("basics") {
  typealias P = PackagingOptions

  expectNotEqual(P(), .Box)
  expectEqual(P.Box, .Box)
  expectNotEqual(P.Box, .Carton)
  expectNotEqual(P.Box, .BoxOrBag)

  expectEqual(.Box, P.Box.intersection(.BoxOrBag))
  expectEqual(.Bag, P.Bag.intersection(.BoxOrBag))
  expectEqual(P(), P.Bag.intersection(.Box))
  expectEqual(P(), P.Box.intersection(.Satchel))
  expectEqual(.BoxOrBag, P.Bag.union(.Box))
  expectEqual(.BoxOrBag, P.Box.union(.Bag))
  expectEqual(.BoxOrCartonOrBag, P.BoxOrBag.union(.Carton))
  expectEqual([.Satchel, .Box], P.SatchelOrBag.symmetricDifference(.BoxOrBag))

  var p = P.Box
  p.formIntersection(.BoxOrBag)
  expectEqual(.Box, p)
  
  p = .Bag
  p.formIntersection(.BoxOrBag)
  expectEqual(.Bag, p)
  
  p = .Bag
  p.formIntersection(.Box)
  expectEqual(P(), p)
  
  p = .Box
  p.formIntersection(.Satchel)
  expectEqual(P(), p)
  
  p = .Bag
  p.formUnion(.Box)
  expectEqual(.BoxOrBag, p)
  
  p = .Box
  p.formUnion(.Bag)
  expectEqual(.BoxOrBag, p)
  
  p = .BoxOrBag
  p.formUnion(.Carton)
  expectEqual(.BoxOrCartonOrBag, p)

  p = .SatchelOrBag
  p.formSymmetricDifference(.BoxOrBag)
  expectEqual([.Satchel, .Box], p)
}

// FIXME: add tests for all of SetAlgebra, in particular
// insert/remove/replace.

runAllTests()
