// RUN: %target-run-simple-swift // REQUIRES: executable_test // REQUIRES: objc_interop // UNSUPPORTED: OS=watchos import StdlibUnittest import SceneKit // SceneKit is only available on iOS 8.0 and above and on OS X 10.8 and above. var SceneKitTests = TestSuite("SceneKit") func bytesFromNSData(_ data: NSData) -> [UInt8] { return Array(UnsafeBufferPointer( start: UnsafePointer(data.bytes), count: data.length)) } if #available(iOS 8.0, *) { SceneKitTests.test("SCNGeometryElement.init(indices:primitiveType:)/Int") { let element = SCNGeometryElement( indices: [ 1, 2, Int.max, 4, 5, 6 ], primitiveType: .triangles) expectEqual(.triangles, element.primitiveType) expectEqual(2, element.primitiveCount) #if arch(i386) || arch(arm) expectEqual( [ 1,0,0,0, 2,0,0,0, 0xff,0xff,0xff,0x7f, 4,0,0,0, 5,0,0,0, 6,0,0,0, ], bytesFromNSData(element.data)) expectEqual(4, element.bytesPerIndex) #elseif arch(x86_64) || arch(arm64) expectEqual( [ 1,0,0,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x7f, 4,0,0,0, 0,0,0,0, 5,0,0,0, 0,0,0,0, 6,0,0,0, 0,0,0,0, ], bytesFromNSData(element.data)) expectEqual(8, element.bytesPerIndex) #else _portThisCode() #endif } SceneKitTests.test("SCNGeometryElement.init(indices:primitiveType:)/Int16") { let element = SCNGeometryElement( indices: [ 1, 2, Int16.max, Int16.max/2, 5, 6 ] as [Int16], primitiveType: .triangles) expectEqual(.triangles, element.primitiveType) expectEqual(2, element.primitiveCount) expectEqual( [ 1, 0, 2, 0, 0xff, 0x7f, 0xff, 0x3f, 5, 0, 6, 0 ], bytesFromNSData(element.data)) expectEqual(2, element.bytesPerIndex) } SceneKitTests.test("SCNGeometryElement.init(indices:primitiveType:)/Triangles") { let element = SCNGeometryElement( indices: [ 1, 2, UInt8.max, UInt8.max/2, 5, 6 ] as [UInt8], primitiveType: .triangles) expectEqual(.triangles, element.primitiveType) expectEqual(2, element.primitiveCount) expectEqual( [ 1, 2, UInt8.max, UInt8.max/2, 5, 6 ], bytesFromNSData(element.data)) expectEqual(1, element.bytesPerIndex) } SceneKitTests.test("SCNGeometryElement.init(indices:primitiveType:)/TriangleStrip") { let element = SCNGeometryElement( indices: [ 1, 2, 3, 4, 5, 6 ] as [UInt8], primitiveType: .triangleStrip) expectEqual(.triangleStrip, element.primitiveType) expectEqual(4, element.primitiveCount) expectEqual( [ 1, 2, 3, 4, 5, 6 ], bytesFromNSData(element.data)) expectEqual(1, element.bytesPerIndex) } SceneKitTests.test("SCNGeometryElement.init(indices:primitiveType:)/Line") { let element = SCNGeometryElement( indices: [ 1, 2, 3, 4, 5, 6 ] as [UInt8], primitiveType: .line) expectEqual(.line, element.primitiveType) expectEqual(3, element.primitiveCount) expectEqual( [ 1, 2, 3, 4, 5, 6 ], bytesFromNSData(element.data)) expectEqual(1, element.bytesPerIndex) } SceneKitTests.test("SCNGeometryElement.init(indices:primitiveType:)/Point") { let element = SCNGeometryElement( indices: [ 1, 2, 3, 4, 5, 6 ] as [UInt8], primitiveType: .point) expectEqual(.point, element.primitiveType) expectEqual(6, element.primitiveCount) expectEqual( [ 1, 2, 3, 4, 5, 6 ], bytesFromNSData(element.data)) expectEqual(1, element.bytesPerIndex) } SceneKitTests.test("SCNSceneSource.entryWithIdentifier(uid:withClass:)") .skip(.iOSAny("does not support COLLADA files")) .skip(.iOSSimulatorAny("does not support COLLADA files")) .skip(.tvOSAny("does not support COLLADA files")) .skip(.tvOSSimulatorAny("does not support COLLADA files")) .skip(.watchOSAny("does not support COLLADA files")) .skip(.watchOSSimulatorAny("does not support COLLADA files")) .code { let sceneDescription = "" + "" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " 0.022516" + " " + " " + " 1" + " " + " " + " 1" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " 0.022516" + " " + " " + " 1" + " " + " " + " 1" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " -5 -5 0 5 -5 0 -5 5 0 5 5 0 " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " 0 0 1 0 0 1 0 0 1 0 0 1 " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " 0 0 1 0 0 1 1 1 " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + "

0 1 3 0 3 2

" + "
" + "
" + "
" + " " + " " + " " + " -2.5 -2.5 2.5 -2.5 2.5 2.5 2.5 -2.5 2.5 2.5 2.5 2.5 2.5 -2.5 2.5 2.5 2.5 2.5 2.5 -2.5 -2.5 2.5 2.5 -2.5 2.5 -2.5 -2.5 2.5 2.5 -2.5 -2.5 -2.5 -2.5 -2.5 2.5 -2.5 -2.5 -2.5 -2.5 -2.5 2.5 -2.5 -2.5 -2.5 2.5 -2.5 2.5 2.5 -2.5 2.5 2.5 -2.5 2.5 -2.5 2.5 2.5 2.5 2.5 2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 2.5 2.5 -2.5 -2.5 2.5 -2.5 2.5 " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " 0 0 1 0 0 1 0 0 1 0 0 1 1 0 -4.37114e-08 1 0 -4.37114e-08 1 0 -4.37114e-08 1 0 -4.37114e-08 -8.74228e-08 0 -1 -8.74228e-08 0 -1 -8.74228e-08 0 -1 -8.74228e-08 0 -1 -1 0 1.19249e-08 -1 0 1.19249e-08 -1 0 1.19249e-08 -1 0 1.19249e-08 0 1 -4.37114e-08 0 1 -4.37114e-08 0 1 -4.37114e-08 0 1 -4.37114e-08 0 -1 -4.37114e-08 0 -1 -4.37114e-08 0 -1 -4.37114e-08 0 -1 -4.37114e-08 " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + "

0 3 1 0 2 3 4 7 5 4 6 7 8 11 9 8 10 11 12 15 13 12 14 15 16 19 17 16 18 19 20 23 21 20 22 23

" + "
" + "
" + "
" + "
" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + "
" let sceneData = sceneDescription.data( using: NSUTF8StringEncoding, allowLossyConversion: true)! let sceneSource = SCNSceneSource(data: sceneData, options: nil)! do { var unarchivedPlaneGeometry = sceneSource.entryWithIdentifier("plane", withClass: SCNGeometry.self) var unarchivedPlaneNode_nil = sceneSource.entryWithIdentifier("plane-node", withClass: SCNNode.self) expectNotEmpty(unarchivedPlaneGeometry) expectType(Optional.self, &unarchivedPlaneGeometry) expectEmpty(unarchivedPlaneNode_nil) } do { var unarchivedBoxGeometry = sceneSource.entryWithIdentifier("box", withClass: SCNGeometry.self) var unarchivedBoxGeometry_nil = sceneSource.entryWithIdentifier("box-node", withClass: SCNGeometry.self) expectNotEmpty(unarchivedBoxGeometry) expectType(Optional.self, &unarchivedBoxGeometry) expectEmpty(unarchivedBoxGeometry_nil) } do { var unarchivedBoxNode = sceneSource.entryWithIdentifier("box-node", withClass: SCNNode.self) var unarchivedBoxNode_nil = sceneSource.entryWithIdentifier("box", withClass: SCNNode.self) expectNotEmpty(unarchivedBoxNode) expectType(Optional.self, &unarchivedBoxNode) expectEmpty(unarchivedBoxNode_nil) } } } runAllTests()