         let expectation = self.expectation(description: "Expected on main queue")
         let group = AsyncGroup()
         group.main {
-            XCTAssertEqual(qos_class_self(), qos_class_main())
+            #if (arch(i386) || arch(x86_64)) && (os(iOS) || os(tvOS)) // Simulator
+                XCTAssert(Thread.isMainThread, "Should be on main thread (simulator)")
+            #else
+                XCTAssertEqual(qos_class_self(), qos_class_main())
+            #endif
             expectation.fulfill()
         }
         waitForExpectations(timeout: timeMargin, handler: nil)

        let expectation = self.expectation(description: "Expected on user interactive queue")
        let group = AsyncGroup()
        group.userInteractive {
            XCTAssertEqual(qos_class_self(), QOS_CLASS_USER_INTERACTIVE)
            expectation.fulfill()
        }
        waitForExpectations(timeout: timeMargin, handler: nil)

        let group = AsyncGroup()
        for i in iterations {
            group.background {
                XCTAssertEqual(qos_class_self(), DispatchQoS.QoSClass.background.rawValue)
                expectations[i].fulfill()
                group.enter()
                Async.background {
