// RUN: %target-run-simple-swift // REQUIRES: objc_interop // REQUIRES: rdar20738778 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:)") { 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) if true { 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) } if true { 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) } if true { 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()