     }
 
     func testThreeInstances() {
+        class NoOpUserProfileService :OPTUserProfileService {
+            required init() {
+                
+            }
+            func lookup(userId: String) -> NoOpUserProfileService.UPProfile? {
+                return nil
+            }
+            
+            func save(userProfile: NoOpUserProfileService.UPProfile) {
+            }
+        }
         
         let datafile = OTUtils.loadJSONDatafile("typed_audience_datafile")
         
         let optimizely2 = OptimizelyManager(sdkKey: "123123",
-                                            //userProfileService: OTUtils.createClearUserProfileService(),
+                                            userProfileService: NoOpUserProfileService(),
             //datafileHandler:makeDatafileHandler(),
             periodicDownloadInterval:0
         )
         let optimizely3 = OptimizelyManager(sdkKey: "999999",
-                                            //userProfileService: OTUtils.createClearUserProfileService(),
+                                            userProfileService: NoOpUserProfileService(),
             //datafileHandler:makeDatafileHandler(),
             periodicDownloadInterval:0
         )

            expectation.fulfill()
        }
        
        wait(for: [expectation], timeout: 100.0)

    }

    func testPerformanceExample() {

    }

    func testThreeInstancesThreads() {
        class NoOpUserProfileService :OPTUserProfileService {
            required init() {
                
            }
            func lookup(userId: String) -> NoOpUserProfileService.UPProfile? {
                return nil
            }
            
            func save(userProfile: NoOpUserProfileService.UPProfile) {
            }
        }

        let datafile = OTUtils.loadJSONDatafile("typed_audience_datafile")
        
        let optimizely2 = OptimizelyManager(sdkKey: "123123",
                                            userProfileService: NoOpUserProfileService(),
            //datafileHandler:makeDatafileHandler(),
            periodicDownloadInterval:0
        )
        let optimizely3 = OptimizelyManager(sdkKey: "999999",
                                            userProfileService: NoOpUserProfileService(),
            //datafileHandler:makeDatafileHandler(),
            periodicDownloadInterval:0
        )
        try? optimizely2.initializeSDK(datafile: datafile!)
        try? optimizely3.initializeSDK(datafile: OTUtils.loadJSONDatafile("ab_experiments")!)
        
        let expectation = XCTestExpectation(description: "waiting for main thread")
        let expectationBackground = XCTestExpectation(description: "waiting for background thread")
        let expectationMyQueue = XCTestExpectation(description: "waiting for my queue")
        let myQueue = DispatchQueue(label: "myQueue")
        let backgroundQueue = DispatchQueue(label: "mybackground", qos: DispatchQoS.background, attributes: DispatchQueue.Attributes(), autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.never, target: nil)
        var mainResponse = [(enabled:Bool, variation:String)]()
        var backgroundResponse = [(enabled:Bool, variation:String)]()
        var myResponse = [(enabled:Bool, variation:String)]()
        for _ in 0...100 {
            DispatchQueue.main.async {
                let enabled = try? optimizely2.isFeatureEnabled(featureKey: "feat", userId: self.userId, attributes: ["house": "Gryffindor"])
                let variation = try? optimizely3.activate(experimentKey: "ab_running_exp_untargeted", userId: self.userId)
                mainResponse.append((enabled: enabled!, variation: variation!))
                XCTAssertTrue(enabled!)
                XCTAssertNotNil(variation)
            }
        }
        for _ in 0...100 {
            backgroundQueue.async  {
                let enabled = try? optimizely2.isFeatureEnabled(featureKey: "feat", userId: self.userId, attributes: ["house": "Gryffindor"])
                let variation = try? optimizely3.activate(experimentKey: "ab_running_exp_untargeted", userId: self.userId)
                backgroundResponse.append((enabled: enabled!, variation: variation!))
                XCTAssertTrue(enabled!)
                XCTAssertNotNil(variation)
            }
        }

        for _ in 0...100 {
            myQueue.async  {
                let enabled = try? optimizely2.isFeatureEnabled(featureKey: "feat", userId: self.userId, attributes: ["house": "Gryffindor"])
                let variation = try? optimizely3.activate(experimentKey: "ab_running_exp_untargeted", userId: self.userId)
                XCTAssertTrue(enabled!)
                XCTAssertNotNil(variation)
                myResponse.append((enabled: enabled!, variation: variation!))
            }
        }

        let enabled = try? optimizely2.isFeatureEnabled(featureKey: "feat", userId: self.userId, attributes: ["house": "Gryffindor"])
        let variation = try? optimizely3.activate(experimentKey: "ab_running_exp_untargeted", userId: self.userId)
        XCTAssertTrue(enabled!)
