 extension Int8 : Arbitrary {
 	typealias A = Int8
 	public static func arbitrary() -> Gen<Int8> {
-		return sized({ n in Gen.pure((Int8(arc4random()) % (n + n + 1)) - n) })
+		let sign = ((arc4random() % 2) == 1)
+		return sized { n in Gen.pure((sign ? 1 : -1) * Int8(arc4random_uniform(UInt32(n)))) }
 	}
 
 	public static func shrink(x : Int8) -> [Int8] {

extension Int16 : Arbitrary {
	typealias A = Int16
	public static func arbitrary() -> Gen<Int16> {
		return sized({ n in Gen.pure((Int16(arc4random()) % (n + n + 1)) - n) })
	}

	public static func shrink(x : Int16) -> [Int16] {

	static func shrink(Self) -> [Self]
}


extension Bool : Arbitrary {
	typealias A = Bool
	public static func arbitrary() -> Gen<Bool> {
