             XCTAssertValid(AmericanExpress().validateNumber(Number(rawValue: $0)))
         })
         
+        print("Validate China UnionPay")
+        self.validChinaUnionPayNumbers.forEach({
+            XCTAssertEqual(CardTypeRegister.sharedCardTypeRegister.cardTypeForNumber(Number(rawValue: $0)).name, ChinaUnionPay().name)
+            XCTAssertValid(ChinaUnionPay().validateNumber(Number(rawValue: $0)))
+        })
+        
         print("Validate Diners Club")
         self.validDinersClubNumbers.forEach({
             XCTAssertEqual(CardTypeRegister.sharedCardTypeRegister.cardTypeForNumber(Number(rawValue: $0)).name, DinersClub().name)

        "370567702123605","377416885469414","376584690279335",
        "343876068903839","342853139737588","375225668591555",
        "345635170374943"
    ]
    private let validDinersClubNumbers = [
        "38923577957110","30014619316479","30230875312552",

        XCTAssertInvalidNumberForType(Discover().validateNumber(Number(rawValue: tooLongDiscover)))
        XCTAssertInvalidNumberForType(JCB().validateNumber(Number(rawValue: tooLongJCB)))
        XCTAssertInvalidNumberForType(MasterCard().validateNumber(Number(rawValue: tooLongMasterCard)))
        XCTAssertInvalidNumberForType(ChinaUnionPay().validateNumber(Number(rawValue: tooLongChinaUnionPay)))
    }
    
    /**
