// RUN: %target-run-simple-swift // REQUIRES: executable_test // REQUIRES: objc_interop // UNSUPPORTED: OS=watchos import StdlibUnittest // Also import modules which are used by StdlibUnittest internally. This // workaround is needed to link all required libraries in case we compile // StdlibUnittest with -sil-serialize-all. import SwiftPrivate #if _runtime(_ObjC) import ObjectiveC #endif 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.dataUsingEncoding( 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()