 /// This is useful for asserting the equality of collections which only define equality for Equatable element types.
 ///
 ///		assert(x, ==, y)
-public func assert<T, U>(@autoclosure expression1: () -> T, _ test: (T, U) -> Bool, @autoclosure _ expression2: () -> U, message: String = "", file: String = __FILE__, line: UInt = __LINE__) -> T? {
+public func assert<T, U>(@autoclosure expression1: () throws -> T, _ test: (T, U) -> Bool, @autoclosure _ expression2: () -> U, message: String = "", file: String = __FILE__, line: UInt = __LINE__) -> T? {
 	return assertExpected(expression1, test, expression2(), message, file, line)
 }
 

/// This is useful for asserting that some method applies to the receiver on the left and the operand on the right.
///
///		assert(Set([ 1, 2, 3 ]), Set.contains, 3)
public func assert<T, U>(@autoclosure expression1: () -> T?, _ test: T -> U -> Bool, @autoclosure _ expression2: () -> U, message: String = "", file: String = __FILE__, line: UInt = __LINE__) -> T? {
	return assertExpected(expression1, { x, y in test(x)(y) }, expression2(), message, file, line)
}


/// Asserts the equality of two arrays of Equatable values.
///
/// Returns the array, if equal and non-nil.
public func assertEqual<T: Equatable>(@autoclosure expression1: () throws -> [T]?, @autoclosure _ expression2: () -> [T]?, _ message: String = "", _ file: String = __FILE__, _ line: UInt = __LINE__) -> [T]? {
	return assertExpected(expression1, ==, expression2(), message, file, line)
}

