//////////////////////////////////////////////////////////////////////////// // // Copyright 2017 Realm Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////// #import "RLMTestCase.h" @interface PrimitiveArrayPropertyTests : RLMTestCase @end @implementation PrimitiveArrayPropertyTests { AllPrimitiveArrays *unmanaged; AllPrimitiveArrays *managed; AllOptionalPrimitiveArrays *optUnmanaged; AllOptionalPrimitiveArrays *optManaged; RLMRealm *realm; } - (void)setUp { unmanaged = [[AllPrimitiveArrays alloc] init]; optUnmanaged = [[AllOptionalPrimitiveArrays alloc] init]; realm = [RLMRealm defaultRealm]; [realm beginWriteTransaction]; managed = [AllPrimitiveArrays createInRealm:realm withValue:@[]]; optManaged = [AllOptionalPrimitiveArrays createInRealm:realm withValue:@[]]; } - (void)tearDown { if (realm.inWriteTransaction) { [realm cancelWriteTransaction]; } } - (void)testCount { XCTAssertEqual(unmanaged.intObj.count, 0U); [unmanaged.intObj addObject:@1]; XCTAssertEqual(unmanaged.intObj.count, 1U); } - (void)testType { XCTAssertEqual(unmanaged.boolObj.type, RLMPropertyTypeBool); XCTAssertEqual(unmanaged.intObj.type, RLMPropertyTypeInt); XCTAssertEqual(unmanaged.floatObj.type, RLMPropertyTypeFloat); XCTAssertEqual(unmanaged.doubleObj.type, RLMPropertyTypeDouble); XCTAssertEqual(unmanaged.stringObj.type, RLMPropertyTypeString); XCTAssertEqual(unmanaged.dataObj.type, RLMPropertyTypeData); XCTAssertEqual(unmanaged.dateObj.type, RLMPropertyTypeDate); XCTAssertEqual(optUnmanaged.boolObj.type, RLMPropertyTypeBool); XCTAssertEqual(optUnmanaged.intObj.type, RLMPropertyTypeInt); XCTAssertEqual(optUnmanaged.floatObj.type, RLMPropertyTypeFloat); XCTAssertEqual(optUnmanaged.doubleObj.type, RLMPropertyTypeDouble); XCTAssertEqual(optUnmanaged.stringObj.type, RLMPropertyTypeString); XCTAssertEqual(optUnmanaged.dataObj.type, RLMPropertyTypeData); XCTAssertEqual(optUnmanaged.dateObj.type, RLMPropertyTypeDate); } - (void)testOptional { XCTAssertFalse(unmanaged.boolObj.optional); XCTAssertFalse(unmanaged.intObj.optional); XCTAssertFalse(unmanaged.floatObj.optional); XCTAssertFalse(unmanaged.doubleObj.optional); XCTAssertFalse(unmanaged.stringObj.optional); XCTAssertFalse(unmanaged.dataObj.optional); XCTAssertFalse(unmanaged.dateObj.optional); XCTAssertTrue(optUnmanaged.boolObj.optional); XCTAssertTrue(optUnmanaged.intObj.optional); XCTAssertTrue(optUnmanaged.floatObj.optional); XCTAssertTrue(optUnmanaged.doubleObj.optional); XCTAssertTrue(optUnmanaged.stringObj.optional); XCTAssertTrue(optUnmanaged.dataObj.optional); XCTAssertTrue(optUnmanaged.dateObj.optional); } - (void)testObjectClassName { XCTAssertNil(unmanaged.boolObj.objectClassName); XCTAssertNil(unmanaged.intObj.objectClassName); XCTAssertNil(unmanaged.floatObj.objectClassName); XCTAssertNil(unmanaged.doubleObj.objectClassName); XCTAssertNil(unmanaged.stringObj.objectClassName); XCTAssertNil(unmanaged.dataObj.objectClassName); XCTAssertNil(unmanaged.dateObj.objectClassName); XCTAssertNil(optUnmanaged.boolObj.objectClassName); XCTAssertNil(optUnmanaged.intObj.objectClassName); XCTAssertNil(optUnmanaged.floatObj.objectClassName); XCTAssertNil(optUnmanaged.doubleObj.objectClassName); XCTAssertNil(optUnmanaged.stringObj.objectClassName); XCTAssertNil(optUnmanaged.dataObj.objectClassName); XCTAssertNil(optUnmanaged.dateObj.objectClassName); } - (void)testRealm { XCTAssertNil(unmanaged.boolObj.realm); XCTAssertNil(unmanaged.intObj.realm); XCTAssertNil(unmanaged.floatObj.realm); XCTAssertNil(unmanaged.doubleObj.realm); XCTAssertNil(unmanaged.stringObj.realm); XCTAssertNil(unmanaged.dataObj.realm); XCTAssertNil(unmanaged.dateObj.realm); XCTAssertNil(optUnmanaged.boolObj.realm); XCTAssertNil(optUnmanaged.intObj.realm); XCTAssertNil(optUnmanaged.floatObj.realm); XCTAssertNil(optUnmanaged.doubleObj.realm); XCTAssertNil(optUnmanaged.stringObj.realm); XCTAssertNil(optUnmanaged.dataObj.realm); XCTAssertNil(optUnmanaged.dateObj.realm); } - (void)testInvalidated { RLMArray *array; @autoreleasepool { AllPrimitiveArrays *obj = [[AllPrimitiveArrays alloc] init]; array = obj.intObj; XCTAssertFalse(array.invalidated); } XCTAssertFalse(array.invalidated); } - (void)testDeleteObjectsInRealm { RLMAssertThrowsWithReason([realm deleteObjects:unmanaged.boolObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:unmanaged.intObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:unmanaged.floatObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:unmanaged.doubleObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:unmanaged.stringObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:unmanaged.dataObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:unmanaged.dateObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optUnmanaged.boolObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optUnmanaged.intObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optUnmanaged.floatObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optUnmanaged.doubleObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optUnmanaged.stringObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optUnmanaged.dataObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optUnmanaged.dateObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:managed.boolObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:managed.intObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:managed.floatObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:managed.doubleObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:managed.stringObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:managed.dataObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:managed.dateObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optManaged.boolObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optManaged.intObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optManaged.floatObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optManaged.doubleObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optManaged.stringObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optManaged.dataObj], @"Cannot delete objects from RLMArray"); RLMAssertThrowsWithReason([realm deleteObjects:optManaged.dateObj], @"Cannot delete objects from RLMArray"); } static NSDate *date(int i) { return [NSDate dateWithTimeIntervalSince1970:i]; } static NSData *data(int i) { return [NSData dataWithBytesNoCopy:calloc(i, 1) length:i freeWhenDone:YES]; } - (void)testObjectAtIndex { RLMAssertThrowsWithReason([unmanaged.intObj objectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); [unmanaged.intObj addObject:@1]; XCTAssertEqualObjects([unmanaged.intObj objectAtIndex:0], @1); } - (void)testFirstObject { XCTAssertNil(unmanaged.boolObj.firstObject); XCTAssertNil(unmanaged.intObj.firstObject); XCTAssertNil(unmanaged.floatObj.firstObject); XCTAssertNil(unmanaged.doubleObj.firstObject); XCTAssertNil(unmanaged.stringObj.firstObject); XCTAssertNil(unmanaged.dataObj.firstObject); XCTAssertNil(unmanaged.dateObj.firstObject); XCTAssertNil(optUnmanaged.boolObj.firstObject); XCTAssertNil(optUnmanaged.intObj.firstObject); XCTAssertNil(optUnmanaged.floatObj.firstObject); XCTAssertNil(optUnmanaged.doubleObj.firstObject); XCTAssertNil(optUnmanaged.stringObj.firstObject); XCTAssertNil(optUnmanaged.dataObj.firstObject); XCTAssertNil(optUnmanaged.dateObj.firstObject); XCTAssertNil(managed.boolObj.firstObject); XCTAssertNil(managed.intObj.firstObject); XCTAssertNil(managed.floatObj.firstObject); XCTAssertNil(managed.doubleObj.firstObject); XCTAssertNil(managed.stringObj.firstObject); XCTAssertNil(managed.dataObj.firstObject); XCTAssertNil(managed.dateObj.firstObject); XCTAssertNil(optManaged.boolObj.firstObject); XCTAssertNil(optManaged.intObj.firstObject); XCTAssertNil(optManaged.floatObj.firstObject); XCTAssertNil(optManaged.doubleObj.firstObject); XCTAssertNil(optManaged.stringObj.firstObject); XCTAssertNil(optManaged.dataObj.firstObject); XCTAssertNil(optManaged.dateObj.firstObject); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; XCTAssertEqualObjects(unmanaged.boolObj.firstObject, @NO); XCTAssertEqualObjects(unmanaged.intObj.firstObject, @2); XCTAssertEqualObjects(unmanaged.floatObj.firstObject, @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj.firstObject, @2.2); XCTAssertEqualObjects(unmanaged.stringObj.firstObject, @"a"); XCTAssertEqualObjects(unmanaged.dataObj.firstObject, data(1)); XCTAssertEqualObjects(unmanaged.dateObj.firstObject, date(1)); XCTAssertEqualObjects(managed.boolObj.firstObject, @NO); XCTAssertEqualObjects(managed.intObj.firstObject, @2); XCTAssertEqualObjects(managed.floatObj.firstObject, @2.2f); XCTAssertEqualObjects(managed.doubleObj.firstObject, @2.2); XCTAssertEqualObjects(managed.stringObj.firstObject, @"a"); XCTAssertEqualObjects(managed.dataObj.firstObject, data(1)); XCTAssertEqualObjects(managed.dateObj.firstObject, date(1)); [optUnmanaged.boolObj addObject:NSNull.null]; [optUnmanaged.intObj addObject:NSNull.null]; [optUnmanaged.floatObj addObject:NSNull.null]; [optUnmanaged.doubleObj addObject:NSNull.null]; [optUnmanaged.stringObj addObject:NSNull.null]; [optUnmanaged.dataObj addObject:NSNull.null]; [optUnmanaged.dateObj addObject:NSNull.null]; [optManaged.boolObj addObject:NSNull.null]; [optManaged.intObj addObject:NSNull.null]; [optManaged.floatObj addObject:NSNull.null]; [optManaged.doubleObj addObject:NSNull.null]; [optManaged.stringObj addObject:NSNull.null]; [optManaged.dataObj addObject:NSNull.null]; [optManaged.dateObj addObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.boolObj.firstObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.intObj.firstObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.floatObj.firstObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.doubleObj.firstObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.stringObj.firstObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.dataObj.firstObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.dateObj.firstObject, NSNull.null); XCTAssertEqualObjects(optManaged.boolObj.firstObject, NSNull.null); XCTAssertEqualObjects(optManaged.intObj.firstObject, NSNull.null); XCTAssertEqualObjects(optManaged.floatObj.firstObject, NSNull.null); XCTAssertEqualObjects(optManaged.doubleObj.firstObject, NSNull.null); XCTAssertEqualObjects(optManaged.stringObj.firstObject, NSNull.null); XCTAssertEqualObjects(optManaged.dataObj.firstObject, NSNull.null); XCTAssertEqualObjects(optManaged.dateObj.firstObject, NSNull.null); [optUnmanaged.boolObj removeAllObjects]; [optUnmanaged.intObj removeAllObjects]; [optUnmanaged.floatObj removeAllObjects]; [optUnmanaged.doubleObj removeAllObjects]; [optUnmanaged.stringObj removeAllObjects]; [optUnmanaged.dataObj removeAllObjects]; [optUnmanaged.dateObj removeAllObjects]; [optManaged.boolObj removeAllObjects]; [optManaged.intObj removeAllObjects]; [optManaged.floatObj removeAllObjects]; [optManaged.doubleObj removeAllObjects]; [optManaged.stringObj removeAllObjects]; [optManaged.dataObj removeAllObjects]; [optManaged.dateObj removeAllObjects]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqualObjects(optUnmanaged.boolObj.firstObject, @NO); XCTAssertEqualObjects(optUnmanaged.intObj.firstObject, @2); XCTAssertEqualObjects(optUnmanaged.floatObj.firstObject, @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj.firstObject, @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj.firstObject, @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj.firstObject, data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj.firstObject, date(1)); XCTAssertEqualObjects(optManaged.boolObj.firstObject, @NO); XCTAssertEqualObjects(optManaged.intObj.firstObject, @2); XCTAssertEqualObjects(optManaged.floatObj.firstObject, @2.2f); XCTAssertEqualObjects(optManaged.doubleObj.firstObject, @2.2); XCTAssertEqualObjects(optManaged.stringObj.firstObject, @"a"); XCTAssertEqualObjects(optManaged.dataObj.firstObject, data(1)); XCTAssertEqualObjects(optManaged.dateObj.firstObject, date(1)); } - (void)testLastObject { XCTAssertNil(unmanaged.boolObj.lastObject); XCTAssertNil(unmanaged.intObj.lastObject); XCTAssertNil(unmanaged.floatObj.lastObject); XCTAssertNil(unmanaged.doubleObj.lastObject); XCTAssertNil(unmanaged.stringObj.lastObject); XCTAssertNil(unmanaged.dataObj.lastObject); XCTAssertNil(unmanaged.dateObj.lastObject); XCTAssertNil(optUnmanaged.boolObj.lastObject); XCTAssertNil(optUnmanaged.intObj.lastObject); XCTAssertNil(optUnmanaged.floatObj.lastObject); XCTAssertNil(optUnmanaged.doubleObj.lastObject); XCTAssertNil(optUnmanaged.stringObj.lastObject); XCTAssertNil(optUnmanaged.dataObj.lastObject); XCTAssertNil(optUnmanaged.dateObj.lastObject); XCTAssertNil(managed.boolObj.lastObject); XCTAssertNil(managed.intObj.lastObject); XCTAssertNil(managed.floatObj.lastObject); XCTAssertNil(managed.doubleObj.lastObject); XCTAssertNil(managed.stringObj.lastObject); XCTAssertNil(managed.dataObj.lastObject); XCTAssertNil(managed.dateObj.lastObject); XCTAssertNil(optManaged.boolObj.lastObject); XCTAssertNil(optManaged.intObj.lastObject); XCTAssertNil(optManaged.floatObj.lastObject); XCTAssertNil(optManaged.doubleObj.lastObject); XCTAssertNil(optManaged.stringObj.lastObject); XCTAssertNil(optManaged.dataObj.lastObject); XCTAssertNil(optManaged.dateObj.lastObject); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqualObjects(unmanaged.boolObj.lastObject, @YES); XCTAssertEqualObjects(unmanaged.intObj.lastObject, @3); XCTAssertEqualObjects(unmanaged.floatObj.lastObject, @3.3f); XCTAssertEqualObjects(unmanaged.doubleObj.lastObject, @3.3); XCTAssertEqualObjects(unmanaged.stringObj.lastObject, @"b"); XCTAssertEqualObjects(unmanaged.dataObj.lastObject, data(2)); XCTAssertEqualObjects(unmanaged.dateObj.lastObject, date(2)); XCTAssertEqualObjects(optUnmanaged.boolObj.lastObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.intObj.lastObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.floatObj.lastObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.doubleObj.lastObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.stringObj.lastObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.dataObj.lastObject, NSNull.null); XCTAssertEqualObjects(optUnmanaged.dateObj.lastObject, NSNull.null); XCTAssertEqualObjects(managed.boolObj.lastObject, @YES); XCTAssertEqualObjects(managed.intObj.lastObject, @3); XCTAssertEqualObjects(managed.floatObj.lastObject, @3.3f); XCTAssertEqualObjects(managed.doubleObj.lastObject, @3.3); XCTAssertEqualObjects(managed.stringObj.lastObject, @"b"); XCTAssertEqualObjects(managed.dataObj.lastObject, data(2)); XCTAssertEqualObjects(managed.dateObj.lastObject, date(2)); XCTAssertEqualObjects(optManaged.boolObj.lastObject, NSNull.null); XCTAssertEqualObjects(optManaged.intObj.lastObject, NSNull.null); XCTAssertEqualObjects(optManaged.floatObj.lastObject, NSNull.null); XCTAssertEqualObjects(optManaged.doubleObj.lastObject, NSNull.null); XCTAssertEqualObjects(optManaged.stringObj.lastObject, NSNull.null); XCTAssertEqualObjects(optManaged.dataObj.lastObject, NSNull.null); XCTAssertEqualObjects(optManaged.dateObj.lastObject, NSNull.null); [optUnmanaged.boolObj removeLastObject]; [optUnmanaged.intObj removeLastObject]; [optUnmanaged.floatObj removeLastObject]; [optUnmanaged.doubleObj removeLastObject]; [optUnmanaged.stringObj removeLastObject]; [optUnmanaged.dataObj removeLastObject]; [optUnmanaged.dateObj removeLastObject]; [optManaged.boolObj removeLastObject]; [optManaged.intObj removeLastObject]; [optManaged.floatObj removeLastObject]; [optManaged.doubleObj removeLastObject]; [optManaged.stringObj removeLastObject]; [optManaged.dataObj removeLastObject]; [optManaged.dateObj removeLastObject]; XCTAssertEqualObjects(optUnmanaged.boolObj.lastObject, @YES); XCTAssertEqualObjects(optUnmanaged.intObj.lastObject, @3); XCTAssertEqualObjects(optUnmanaged.floatObj.lastObject, @3.3f); XCTAssertEqualObjects(optUnmanaged.doubleObj.lastObject, @3.3); XCTAssertEqualObjects(optUnmanaged.stringObj.lastObject, @"b"); XCTAssertEqualObjects(optUnmanaged.dataObj.lastObject, data(2)); XCTAssertEqualObjects(optUnmanaged.dateObj.lastObject, date(2)); XCTAssertEqualObjects(optManaged.boolObj.lastObject, @YES); XCTAssertEqualObjects(optManaged.intObj.lastObject, @3); XCTAssertEqualObjects(optManaged.floatObj.lastObject, @3.3f); XCTAssertEqualObjects(optManaged.doubleObj.lastObject, @3.3); XCTAssertEqualObjects(optManaged.stringObj.lastObject, @"b"); XCTAssertEqualObjects(optManaged.dataObj.lastObject, data(2)); XCTAssertEqualObjects(optManaged.dateObj.lastObject, date(2)); } - (void)testAddObject { RLMAssertThrowsWithReason([unmanaged.boolObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj addObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optUnmanaged.boolObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optUnmanaged.intObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optUnmanaged.floatObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optUnmanaged.stringObj addObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optUnmanaged.dataObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optUnmanaged.dateObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([managed.boolObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj addObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optManaged.boolObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optManaged.intObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optManaged.floatObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optManaged.doubleObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optManaged.stringObj addObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optManaged.dataObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optManaged.dateObj addObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([unmanaged.boolObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'date'"); RLMAssertThrowsWithReason([managed.boolObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj addObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'date'"); [unmanaged.boolObj addObject:@NO]; [unmanaged.intObj addObject:@2]; [unmanaged.floatObj addObject:@2.2f]; [unmanaged.doubleObj addObject:@2.2]; [unmanaged.stringObj addObject:@"a"]; [unmanaged.dataObj addObject:data(1)]; [unmanaged.dateObj addObject:date(1)]; [optUnmanaged.boolObj addObject:@NO]; [optUnmanaged.intObj addObject:@2]; [optUnmanaged.floatObj addObject:@2.2f]; [optUnmanaged.doubleObj addObject:@2.2]; [optUnmanaged.stringObj addObject:@"a"]; [optUnmanaged.dataObj addObject:data(1)]; [optUnmanaged.dateObj addObject:date(1)]; [managed.boolObj addObject:@NO]; [managed.intObj addObject:@2]; [managed.floatObj addObject:@2.2f]; [managed.doubleObj addObject:@2.2]; [managed.stringObj addObject:@"a"]; [managed.dataObj addObject:data(1)]; [managed.dateObj addObject:date(1)]; [optManaged.boolObj addObject:@NO]; [optManaged.intObj addObject:@2]; [optManaged.floatObj addObject:@2.2f]; [optManaged.doubleObj addObject:@2.2]; [optManaged.stringObj addObject:@"a"]; [optManaged.dataObj addObject:data(1)]; [optManaged.dateObj addObject:date(1)]; XCTAssertEqualObjects(unmanaged.boolObj[0], @NO); XCTAssertEqualObjects(unmanaged.intObj[0], @2); XCTAssertEqualObjects(unmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(unmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(unmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(unmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[0], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[0], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(managed.boolObj[0], @NO); XCTAssertEqualObjects(managed.intObj[0], @2); XCTAssertEqualObjects(managed.floatObj[0], @2.2f); XCTAssertEqualObjects(managed.doubleObj[0], @2.2); XCTAssertEqualObjects(managed.stringObj[0], @"a"); XCTAssertEqualObjects(managed.dataObj[0], data(1)); XCTAssertEqualObjects(managed.dateObj[0], date(1)); XCTAssertEqualObjects(optManaged.boolObj[0], @NO); XCTAssertEqualObjects(optManaged.intObj[0], @2); XCTAssertEqualObjects(optManaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optManaged.stringObj[0], @"a"); XCTAssertEqualObjects(optManaged.dataObj[0], data(1)); XCTAssertEqualObjects(optManaged.dateObj[0], date(1)); [optUnmanaged.boolObj addObject:NSNull.null]; [optUnmanaged.intObj addObject:NSNull.null]; [optUnmanaged.floatObj addObject:NSNull.null]; [optUnmanaged.doubleObj addObject:NSNull.null]; [optUnmanaged.stringObj addObject:NSNull.null]; [optUnmanaged.dataObj addObject:NSNull.null]; [optUnmanaged.dateObj addObject:NSNull.null]; [optManaged.boolObj addObject:NSNull.null]; [optManaged.intObj addObject:NSNull.null]; [optManaged.floatObj addObject:NSNull.null]; [optManaged.doubleObj addObject:NSNull.null]; [optManaged.stringObj addObject:NSNull.null]; [optManaged.dataObj addObject:NSNull.null]; [optManaged.dateObj addObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.boolObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.intObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.floatObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.doubleObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.stringObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dataObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dateObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.boolObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.intObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.floatObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.doubleObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.stringObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.dataObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.dateObj[1], NSNull.null); } - (void)testAddObjects { RLMAssertThrowsWithReason([unmanaged.boolObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj addObjects:@[@2]], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optUnmanaged.boolObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optUnmanaged.intObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optUnmanaged.floatObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optUnmanaged.stringObj addObjects:@[@2]], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optUnmanaged.dataObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optUnmanaged.dateObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([managed.boolObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj addObjects:@[@2]], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optManaged.boolObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optManaged.intObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optManaged.floatObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optManaged.doubleObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optManaged.stringObj addObjects:@[@2]], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optManaged.dataObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optManaged.dateObj addObjects:@[@"a"]], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([unmanaged.boolObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'date'"); RLMAssertThrowsWithReason([managed.boolObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj addObjects:@[NSNull.null]], @"Invalid value '' of type 'NSNull' for expected type 'date'"); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqualObjects(unmanaged.boolObj[0], @NO); XCTAssertEqualObjects(unmanaged.intObj[0], @2); XCTAssertEqualObjects(unmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(unmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(unmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(unmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[0], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[0], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(managed.boolObj[0], @NO); XCTAssertEqualObjects(managed.intObj[0], @2); XCTAssertEqualObjects(managed.floatObj[0], @2.2f); XCTAssertEqualObjects(managed.doubleObj[0], @2.2); XCTAssertEqualObjects(managed.stringObj[0], @"a"); XCTAssertEqualObjects(managed.dataObj[0], data(1)); XCTAssertEqualObjects(managed.dateObj[0], date(1)); XCTAssertEqualObjects(optManaged.boolObj[0], @NO); XCTAssertEqualObjects(optManaged.intObj[0], @2); XCTAssertEqualObjects(optManaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optManaged.stringObj[0], @"a"); XCTAssertEqualObjects(optManaged.dataObj[0], data(1)); XCTAssertEqualObjects(optManaged.dateObj[0], date(1)); XCTAssertEqualObjects(unmanaged.boolObj[1], @YES); XCTAssertEqualObjects(unmanaged.intObj[1], @3); XCTAssertEqualObjects(unmanaged.floatObj[1], @3.3f); XCTAssertEqualObjects(unmanaged.doubleObj[1], @3.3); XCTAssertEqualObjects(unmanaged.stringObj[1], @"b"); XCTAssertEqualObjects(unmanaged.dataObj[1], data(2)); XCTAssertEqualObjects(unmanaged.dateObj[1], date(2)); XCTAssertEqualObjects(optUnmanaged.boolObj[1], @YES); XCTAssertEqualObjects(optUnmanaged.intObj[1], @3); XCTAssertEqualObjects(optUnmanaged.floatObj[1], @3.3f); XCTAssertEqualObjects(optUnmanaged.doubleObj[1], @3.3); XCTAssertEqualObjects(optUnmanaged.stringObj[1], @"b"); XCTAssertEqualObjects(optUnmanaged.dataObj[1], data(2)); XCTAssertEqualObjects(optUnmanaged.dateObj[1], date(2)); XCTAssertEqualObjects(managed.boolObj[1], @YES); XCTAssertEqualObjects(managed.intObj[1], @3); XCTAssertEqualObjects(managed.floatObj[1], @3.3f); XCTAssertEqualObjects(managed.doubleObj[1], @3.3); XCTAssertEqualObjects(managed.stringObj[1], @"b"); XCTAssertEqualObjects(managed.dataObj[1], data(2)); XCTAssertEqualObjects(managed.dateObj[1], date(2)); XCTAssertEqualObjects(optManaged.boolObj[1], @YES); XCTAssertEqualObjects(optManaged.intObj[1], @3); XCTAssertEqualObjects(optManaged.floatObj[1], @3.3f); XCTAssertEqualObjects(optManaged.doubleObj[1], @3.3); XCTAssertEqualObjects(optManaged.stringObj[1], @"b"); XCTAssertEqualObjects(optManaged.dataObj[1], data(2)); XCTAssertEqualObjects(optManaged.dateObj[1], date(2)); XCTAssertEqualObjects(optUnmanaged.boolObj[2], NSNull.null); XCTAssertEqualObjects(optUnmanaged.intObj[2], NSNull.null); XCTAssertEqualObjects(optUnmanaged.floatObj[2], NSNull.null); XCTAssertEqualObjects(optUnmanaged.doubleObj[2], NSNull.null); XCTAssertEqualObjects(optUnmanaged.stringObj[2], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dataObj[2], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dateObj[2], NSNull.null); XCTAssertEqualObjects(optManaged.boolObj[2], NSNull.null); XCTAssertEqualObjects(optManaged.intObj[2], NSNull.null); XCTAssertEqualObjects(optManaged.floatObj[2], NSNull.null); XCTAssertEqualObjects(optManaged.doubleObj[2], NSNull.null); XCTAssertEqualObjects(optManaged.stringObj[2], NSNull.null); XCTAssertEqualObjects(optManaged.dataObj[2], NSNull.null); XCTAssertEqualObjects(optManaged.dateObj[2], NSNull.null); } - (void)testInsertObject { RLMAssertThrowsWithReason([unmanaged.boolObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj insertObject:@2 atIndex:0], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optUnmanaged.boolObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optUnmanaged.intObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optUnmanaged.floatObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optUnmanaged.stringObj insertObject:@2 atIndex:0], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optUnmanaged.dataObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optUnmanaged.dateObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([managed.boolObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj insertObject:@2 atIndex:0], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optManaged.boolObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optManaged.intObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optManaged.floatObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optManaged.doubleObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optManaged.stringObj insertObject:@2 atIndex:0], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optManaged.dataObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optManaged.dateObj insertObject:@"a" atIndex:0], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([unmanaged.boolObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'date'"); RLMAssertThrowsWithReason([managed.boolObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj insertObject:NSNull.null atIndex:0], @"Invalid value '' of type 'NSNull' for expected type 'date'"); RLMAssertThrowsWithReason([unmanaged.boolObj insertObject:@NO atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([unmanaged.intObj insertObject:@2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([unmanaged.floatObj insertObject:@2.2f atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([unmanaged.doubleObj insertObject:@2.2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([unmanaged.stringObj insertObject:@"a" atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([unmanaged.dataObj insertObject:data(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([unmanaged.dateObj insertObject:date(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj insertObject:@NO atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optUnmanaged.intObj insertObject:@2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj insertObject:@2.2f atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj insertObject:@2.2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj insertObject:@"a" atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj insertObject:data(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj insertObject:date(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([managed.boolObj insertObject:@NO atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([managed.intObj insertObject:@2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([managed.floatObj insertObject:@2.2f atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([managed.doubleObj insertObject:@2.2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([managed.stringObj insertObject:@"a" atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([managed.dataObj insertObject:data(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([managed.dateObj insertObject:date(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optManaged.boolObj insertObject:@NO atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optManaged.intObj insertObject:@2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optManaged.floatObj insertObject:@2.2f atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optManaged.doubleObj insertObject:@2.2 atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optManaged.stringObj insertObject:@"a" atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optManaged.dataObj insertObject:data(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); RLMAssertThrowsWithReason([optManaged.dateObj insertObject:date(1) atIndex:1], @"Index 1 is out of bounds (must be less than 1)."); [unmanaged.boolObj insertObject:@NO atIndex:0]; [unmanaged.intObj insertObject:@2 atIndex:0]; [unmanaged.floatObj insertObject:@2.2f atIndex:0]; [unmanaged.doubleObj insertObject:@2.2 atIndex:0]; [unmanaged.stringObj insertObject:@"a" atIndex:0]; [unmanaged.dataObj insertObject:data(1) atIndex:0]; [unmanaged.dateObj insertObject:date(1) atIndex:0]; [optUnmanaged.boolObj insertObject:@NO atIndex:0]; [optUnmanaged.intObj insertObject:@2 atIndex:0]; [optUnmanaged.floatObj insertObject:@2.2f atIndex:0]; [optUnmanaged.doubleObj insertObject:@2.2 atIndex:0]; [optUnmanaged.stringObj insertObject:@"a" atIndex:0]; [optUnmanaged.dataObj insertObject:data(1) atIndex:0]; [optUnmanaged.dateObj insertObject:date(1) atIndex:0]; [managed.boolObj insertObject:@NO atIndex:0]; [managed.intObj insertObject:@2 atIndex:0]; [managed.floatObj insertObject:@2.2f atIndex:0]; [managed.doubleObj insertObject:@2.2 atIndex:0]; [managed.stringObj insertObject:@"a" atIndex:0]; [managed.dataObj insertObject:data(1) atIndex:0]; [managed.dateObj insertObject:date(1) atIndex:0]; [optManaged.boolObj insertObject:@NO atIndex:0]; [optManaged.intObj insertObject:@2 atIndex:0]; [optManaged.floatObj insertObject:@2.2f atIndex:0]; [optManaged.doubleObj insertObject:@2.2 atIndex:0]; [optManaged.stringObj insertObject:@"a" atIndex:0]; [optManaged.dataObj insertObject:data(1) atIndex:0]; [optManaged.dateObj insertObject:date(1) atIndex:0]; XCTAssertEqualObjects(unmanaged.boolObj[0], @NO); XCTAssertEqualObjects(unmanaged.intObj[0], @2); XCTAssertEqualObjects(unmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(unmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(unmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(unmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[0], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[0], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(managed.boolObj[0], @NO); XCTAssertEqualObjects(managed.intObj[0], @2); XCTAssertEqualObjects(managed.floatObj[0], @2.2f); XCTAssertEqualObjects(managed.doubleObj[0], @2.2); XCTAssertEqualObjects(managed.stringObj[0], @"a"); XCTAssertEqualObjects(managed.dataObj[0], data(1)); XCTAssertEqualObjects(managed.dateObj[0], date(1)); XCTAssertEqualObjects(optManaged.boolObj[0], @NO); XCTAssertEqualObjects(optManaged.intObj[0], @2); XCTAssertEqualObjects(optManaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optManaged.stringObj[0], @"a"); XCTAssertEqualObjects(optManaged.dataObj[0], data(1)); XCTAssertEqualObjects(optManaged.dateObj[0], date(1)); [unmanaged.boolObj insertObject:@YES atIndex:0]; [unmanaged.intObj insertObject:@3 atIndex:0]; [unmanaged.floatObj insertObject:@3.3f atIndex:0]; [unmanaged.doubleObj insertObject:@3.3 atIndex:0]; [unmanaged.stringObj insertObject:@"b" atIndex:0]; [unmanaged.dataObj insertObject:data(2) atIndex:0]; [unmanaged.dateObj insertObject:date(2) atIndex:0]; [optUnmanaged.boolObj insertObject:@YES atIndex:0]; [optUnmanaged.intObj insertObject:@3 atIndex:0]; [optUnmanaged.floatObj insertObject:@3.3f atIndex:0]; [optUnmanaged.doubleObj insertObject:@3.3 atIndex:0]; [optUnmanaged.stringObj insertObject:@"b" atIndex:0]; [optUnmanaged.dataObj insertObject:data(2) atIndex:0]; [optUnmanaged.dateObj insertObject:date(2) atIndex:0]; [managed.boolObj insertObject:@YES atIndex:0]; [managed.intObj insertObject:@3 atIndex:0]; [managed.floatObj insertObject:@3.3f atIndex:0]; [managed.doubleObj insertObject:@3.3 atIndex:0]; [managed.stringObj insertObject:@"b" atIndex:0]; [managed.dataObj insertObject:data(2) atIndex:0]; [managed.dateObj insertObject:date(2) atIndex:0]; [optManaged.boolObj insertObject:@YES atIndex:0]; [optManaged.intObj insertObject:@3 atIndex:0]; [optManaged.floatObj insertObject:@3.3f atIndex:0]; [optManaged.doubleObj insertObject:@3.3 atIndex:0]; [optManaged.stringObj insertObject:@"b" atIndex:0]; [optManaged.dataObj insertObject:data(2) atIndex:0]; [optManaged.dateObj insertObject:date(2) atIndex:0]; XCTAssertEqualObjects(unmanaged.boolObj[0], @YES); XCTAssertEqualObjects(unmanaged.intObj[0], @3); XCTAssertEqualObjects(unmanaged.floatObj[0], @3.3f); XCTAssertEqualObjects(unmanaged.doubleObj[0], @3.3); XCTAssertEqualObjects(unmanaged.stringObj[0], @"b"); XCTAssertEqualObjects(unmanaged.dataObj[0], data(2)); XCTAssertEqualObjects(unmanaged.dateObj[0], date(2)); XCTAssertEqualObjects(optUnmanaged.boolObj[0], @YES); XCTAssertEqualObjects(optUnmanaged.intObj[0], @3); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @3.3f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @3.3); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"b"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(2)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(2)); XCTAssertEqualObjects(managed.boolObj[0], @YES); XCTAssertEqualObjects(managed.intObj[0], @3); XCTAssertEqualObjects(managed.floatObj[0], @3.3f); XCTAssertEqualObjects(managed.doubleObj[0], @3.3); XCTAssertEqualObjects(managed.stringObj[0], @"b"); XCTAssertEqualObjects(managed.dataObj[0], data(2)); XCTAssertEqualObjects(managed.dateObj[0], date(2)); XCTAssertEqualObjects(optManaged.boolObj[0], @YES); XCTAssertEqualObjects(optManaged.intObj[0], @3); XCTAssertEqualObjects(optManaged.floatObj[0], @3.3f); XCTAssertEqualObjects(optManaged.doubleObj[0], @3.3); XCTAssertEqualObjects(optManaged.stringObj[0], @"b"); XCTAssertEqualObjects(optManaged.dataObj[0], data(2)); XCTAssertEqualObjects(optManaged.dateObj[0], date(2)); XCTAssertEqualObjects(unmanaged.boolObj[1], @NO); XCTAssertEqualObjects(unmanaged.intObj[1], @2); XCTAssertEqualObjects(unmanaged.floatObj[1], @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj[1], @2.2); XCTAssertEqualObjects(unmanaged.stringObj[1], @"a"); XCTAssertEqualObjects(unmanaged.dataObj[1], data(1)); XCTAssertEqualObjects(unmanaged.dateObj[1], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[1], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[1], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[1], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[1], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[1], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[1], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[1], date(1)); XCTAssertEqualObjects(managed.boolObj[1], @NO); XCTAssertEqualObjects(managed.intObj[1], @2); XCTAssertEqualObjects(managed.floatObj[1], @2.2f); XCTAssertEqualObjects(managed.doubleObj[1], @2.2); XCTAssertEqualObjects(managed.stringObj[1], @"a"); XCTAssertEqualObjects(managed.dataObj[1], data(1)); XCTAssertEqualObjects(managed.dateObj[1], date(1)); XCTAssertEqualObjects(optManaged.boolObj[1], @NO); XCTAssertEqualObjects(optManaged.intObj[1], @2); XCTAssertEqualObjects(optManaged.floatObj[1], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[1], @2.2); XCTAssertEqualObjects(optManaged.stringObj[1], @"a"); XCTAssertEqualObjects(optManaged.dataObj[1], data(1)); XCTAssertEqualObjects(optManaged.dateObj[1], date(1)); [optUnmanaged.boolObj insertObject:NSNull.null atIndex:1]; [optUnmanaged.intObj insertObject:NSNull.null atIndex:1]; [optUnmanaged.floatObj insertObject:NSNull.null atIndex:1]; [optUnmanaged.doubleObj insertObject:NSNull.null atIndex:1]; [optUnmanaged.stringObj insertObject:NSNull.null atIndex:1]; [optUnmanaged.dataObj insertObject:NSNull.null atIndex:1]; [optUnmanaged.dateObj insertObject:NSNull.null atIndex:1]; [optManaged.boolObj insertObject:NSNull.null atIndex:1]; [optManaged.intObj insertObject:NSNull.null atIndex:1]; [optManaged.floatObj insertObject:NSNull.null atIndex:1]; [optManaged.doubleObj insertObject:NSNull.null atIndex:1]; [optManaged.stringObj insertObject:NSNull.null atIndex:1]; [optManaged.dataObj insertObject:NSNull.null atIndex:1]; [optManaged.dateObj insertObject:NSNull.null atIndex:1]; XCTAssertEqualObjects(optUnmanaged.boolObj[0], @YES); XCTAssertEqualObjects(optUnmanaged.intObj[0], @3); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @3.3f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @3.3); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"b"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(2)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(2)); XCTAssertEqualObjects(optManaged.boolObj[0], @YES); XCTAssertEqualObjects(optManaged.intObj[0], @3); XCTAssertEqualObjects(optManaged.floatObj[0], @3.3f); XCTAssertEqualObjects(optManaged.doubleObj[0], @3.3); XCTAssertEqualObjects(optManaged.stringObj[0], @"b"); XCTAssertEqualObjects(optManaged.dataObj[0], data(2)); XCTAssertEqualObjects(optManaged.dateObj[0], date(2)); XCTAssertEqualObjects(optUnmanaged.boolObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.intObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.floatObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.doubleObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.stringObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dataObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dateObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.boolObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.intObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.floatObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.doubleObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.stringObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.dataObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.dateObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.boolObj[2], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[2], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[2], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[2], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[2], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[2], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[2], date(1)); XCTAssertEqualObjects(optManaged.boolObj[2], @NO); XCTAssertEqualObjects(optManaged.intObj[2], @2); XCTAssertEqualObjects(optManaged.floatObj[2], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[2], @2.2); XCTAssertEqualObjects(optManaged.stringObj[2], @"a"); XCTAssertEqualObjects(optManaged.dataObj[2], data(1)); XCTAssertEqualObjects(optManaged.dateObj[2], date(1)); } - (void)testRemoveObject { RLMAssertThrowsWithReason([unmanaged.boolObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.intObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.floatObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.doubleObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.stringObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dataObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dateObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.intObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.boolObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.intObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.floatObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.doubleObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.stringObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dataObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dateObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.boolObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.intObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.floatObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.doubleObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.stringObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dataObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dateObj removeObjectAtIndex:0], @"Index 0 is out of bounds (must be less than 0)."); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqual(unmanaged.boolObj.count, 2U); XCTAssertEqual(unmanaged.intObj.count, 2U); XCTAssertEqual(unmanaged.floatObj.count, 2U); XCTAssertEqual(unmanaged.doubleObj.count, 2U); XCTAssertEqual(unmanaged.stringObj.count, 2U); XCTAssertEqual(unmanaged.dataObj.count, 2U); XCTAssertEqual(unmanaged.dateObj.count, 2U); XCTAssertEqual(managed.boolObj.count, 2U); XCTAssertEqual(managed.intObj.count, 2U); XCTAssertEqual(managed.floatObj.count, 2U); XCTAssertEqual(managed.doubleObj.count, 2U); XCTAssertEqual(managed.stringObj.count, 2U); XCTAssertEqual(managed.dataObj.count, 2U); XCTAssertEqual(managed.dateObj.count, 2U); XCTAssertEqual(optUnmanaged.boolObj.count, 3U); XCTAssertEqual(optUnmanaged.intObj.count, 3U); XCTAssertEqual(optUnmanaged.floatObj.count, 3U); XCTAssertEqual(optUnmanaged.doubleObj.count, 3U); XCTAssertEqual(optUnmanaged.stringObj.count, 3U); XCTAssertEqual(optUnmanaged.dataObj.count, 3U); XCTAssertEqual(optUnmanaged.dateObj.count, 3U); XCTAssertEqual(optManaged.boolObj.count, 3U); XCTAssertEqual(optManaged.intObj.count, 3U); XCTAssertEqual(optManaged.floatObj.count, 3U); XCTAssertEqual(optManaged.doubleObj.count, 3U); XCTAssertEqual(optManaged.stringObj.count, 3U); XCTAssertEqual(optManaged.dataObj.count, 3U); XCTAssertEqual(optManaged.dateObj.count, 3U); RLMAssertThrowsWithReason([unmanaged.boolObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([unmanaged.intObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([unmanaged.floatObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([unmanaged.doubleObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([unmanaged.stringObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([unmanaged.dataObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([unmanaged.dateObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([managed.boolObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([managed.intObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([managed.floatObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([managed.doubleObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([managed.stringObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([managed.dataObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([managed.dateObj removeObjectAtIndex:2], @"Index 2 is out of bounds (must be less than 2)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optUnmanaged.intObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optManaged.boolObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optManaged.intObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optManaged.floatObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optManaged.doubleObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optManaged.stringObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optManaged.dataObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); RLMAssertThrowsWithReason([optManaged.dateObj removeObjectAtIndex:3], @"Index 3 is out of bounds (must be less than 3)."); [unmanaged.boolObj removeObjectAtIndex:0]; [unmanaged.intObj removeObjectAtIndex:0]; [unmanaged.floatObj removeObjectAtIndex:0]; [unmanaged.doubleObj removeObjectAtIndex:0]; [unmanaged.stringObj removeObjectAtIndex:0]; [unmanaged.dataObj removeObjectAtIndex:0]; [unmanaged.dateObj removeObjectAtIndex:0]; [optUnmanaged.boolObj removeObjectAtIndex:0]; [optUnmanaged.intObj removeObjectAtIndex:0]; [optUnmanaged.floatObj removeObjectAtIndex:0]; [optUnmanaged.doubleObj removeObjectAtIndex:0]; [optUnmanaged.stringObj removeObjectAtIndex:0]; [optUnmanaged.dataObj removeObjectAtIndex:0]; [optUnmanaged.dateObj removeObjectAtIndex:0]; [managed.boolObj removeObjectAtIndex:0]; [managed.intObj removeObjectAtIndex:0]; [managed.floatObj removeObjectAtIndex:0]; [managed.doubleObj removeObjectAtIndex:0]; [managed.stringObj removeObjectAtIndex:0]; [managed.dataObj removeObjectAtIndex:0]; [managed.dateObj removeObjectAtIndex:0]; [optManaged.boolObj removeObjectAtIndex:0]; [optManaged.intObj removeObjectAtIndex:0]; [optManaged.floatObj removeObjectAtIndex:0]; [optManaged.doubleObj removeObjectAtIndex:0]; [optManaged.stringObj removeObjectAtIndex:0]; [optManaged.dataObj removeObjectAtIndex:0]; [optManaged.dateObj removeObjectAtIndex:0]; XCTAssertEqual(unmanaged.boolObj.count, 1U); XCTAssertEqual(unmanaged.intObj.count, 1U); XCTAssertEqual(unmanaged.floatObj.count, 1U); XCTAssertEqual(unmanaged.doubleObj.count, 1U); XCTAssertEqual(unmanaged.stringObj.count, 1U); XCTAssertEqual(unmanaged.dataObj.count, 1U); XCTAssertEqual(unmanaged.dateObj.count, 1U); XCTAssertEqual(managed.boolObj.count, 1U); XCTAssertEqual(managed.intObj.count, 1U); XCTAssertEqual(managed.floatObj.count, 1U); XCTAssertEqual(managed.doubleObj.count, 1U); XCTAssertEqual(managed.stringObj.count, 1U); XCTAssertEqual(managed.dataObj.count, 1U); XCTAssertEqual(managed.dateObj.count, 1U); XCTAssertEqual(optUnmanaged.boolObj.count, 2U); XCTAssertEqual(optUnmanaged.intObj.count, 2U); XCTAssertEqual(optUnmanaged.floatObj.count, 2U); XCTAssertEqual(optUnmanaged.doubleObj.count, 2U); XCTAssertEqual(optUnmanaged.stringObj.count, 2U); XCTAssertEqual(optUnmanaged.dataObj.count, 2U); XCTAssertEqual(optUnmanaged.dateObj.count, 2U); XCTAssertEqual(optManaged.boolObj.count, 2U); XCTAssertEqual(optManaged.intObj.count, 2U); XCTAssertEqual(optManaged.floatObj.count, 2U); XCTAssertEqual(optManaged.doubleObj.count, 2U); XCTAssertEqual(optManaged.stringObj.count, 2U); XCTAssertEqual(optManaged.dataObj.count, 2U); XCTAssertEqual(optManaged.dateObj.count, 2U); XCTAssertEqualObjects(unmanaged.boolObj[0], @YES); XCTAssertEqualObjects(unmanaged.intObj[0], @3); XCTAssertEqualObjects(unmanaged.floatObj[0], @3.3f); XCTAssertEqualObjects(unmanaged.doubleObj[0], @3.3); XCTAssertEqualObjects(unmanaged.stringObj[0], @"b"); XCTAssertEqualObjects(unmanaged.dataObj[0], data(2)); XCTAssertEqualObjects(unmanaged.dateObj[0], date(2)); XCTAssertEqualObjects(optUnmanaged.boolObj[0], @YES); XCTAssertEqualObjects(optUnmanaged.intObj[0], @3); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @3.3f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @3.3); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"b"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(2)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(2)); XCTAssertEqualObjects(managed.boolObj[0], @YES); XCTAssertEqualObjects(managed.intObj[0], @3); XCTAssertEqualObjects(managed.floatObj[0], @3.3f); XCTAssertEqualObjects(managed.doubleObj[0], @3.3); XCTAssertEqualObjects(managed.stringObj[0], @"b"); XCTAssertEqualObjects(managed.dataObj[0], data(2)); XCTAssertEqualObjects(managed.dateObj[0], date(2)); XCTAssertEqualObjects(optManaged.boolObj[0], @YES); XCTAssertEqualObjects(optManaged.intObj[0], @3); XCTAssertEqualObjects(optManaged.floatObj[0], @3.3f); XCTAssertEqualObjects(optManaged.doubleObj[0], @3.3); XCTAssertEqualObjects(optManaged.stringObj[0], @"b"); XCTAssertEqualObjects(optManaged.dataObj[0], data(2)); XCTAssertEqualObjects(optManaged.dateObj[0], date(2)); XCTAssertEqualObjects(optUnmanaged.boolObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.intObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.floatObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.doubleObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.stringObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dataObj[1], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dateObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.boolObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.intObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.floatObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.doubleObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.stringObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.dataObj[1], NSNull.null); XCTAssertEqualObjects(optManaged.dateObj[1], NSNull.null); } - (void)testRemoveLastObject { XCTAssertNoThrow([unmanaged.boolObj removeLastObject]); XCTAssertNoThrow([unmanaged.intObj removeLastObject]); XCTAssertNoThrow([unmanaged.floatObj removeLastObject]); XCTAssertNoThrow([unmanaged.doubleObj removeLastObject]); XCTAssertNoThrow([unmanaged.stringObj removeLastObject]); XCTAssertNoThrow([unmanaged.dataObj removeLastObject]); XCTAssertNoThrow([unmanaged.dateObj removeLastObject]); XCTAssertNoThrow([optUnmanaged.boolObj removeLastObject]); XCTAssertNoThrow([optUnmanaged.intObj removeLastObject]); XCTAssertNoThrow([optUnmanaged.floatObj removeLastObject]); XCTAssertNoThrow([optUnmanaged.doubleObj removeLastObject]); XCTAssertNoThrow([optUnmanaged.stringObj removeLastObject]); XCTAssertNoThrow([optUnmanaged.dataObj removeLastObject]); XCTAssertNoThrow([optUnmanaged.dateObj removeLastObject]); XCTAssertNoThrow([managed.boolObj removeLastObject]); XCTAssertNoThrow([managed.intObj removeLastObject]); XCTAssertNoThrow([managed.floatObj removeLastObject]); XCTAssertNoThrow([managed.doubleObj removeLastObject]); XCTAssertNoThrow([managed.stringObj removeLastObject]); XCTAssertNoThrow([managed.dataObj removeLastObject]); XCTAssertNoThrow([managed.dateObj removeLastObject]); XCTAssertNoThrow([optManaged.boolObj removeLastObject]); XCTAssertNoThrow([optManaged.intObj removeLastObject]); XCTAssertNoThrow([optManaged.floatObj removeLastObject]); XCTAssertNoThrow([optManaged.doubleObj removeLastObject]); XCTAssertNoThrow([optManaged.stringObj removeLastObject]); XCTAssertNoThrow([optManaged.dataObj removeLastObject]); XCTAssertNoThrow([optManaged.dateObj removeLastObject]); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqual(unmanaged.boolObj.count, 2U); XCTAssertEqual(unmanaged.intObj.count, 2U); XCTAssertEqual(unmanaged.floatObj.count, 2U); XCTAssertEqual(unmanaged.doubleObj.count, 2U); XCTAssertEqual(unmanaged.stringObj.count, 2U); XCTAssertEqual(unmanaged.dataObj.count, 2U); XCTAssertEqual(unmanaged.dateObj.count, 2U); XCTAssertEqual(managed.boolObj.count, 2U); XCTAssertEqual(managed.intObj.count, 2U); XCTAssertEqual(managed.floatObj.count, 2U); XCTAssertEqual(managed.doubleObj.count, 2U); XCTAssertEqual(managed.stringObj.count, 2U); XCTAssertEqual(managed.dataObj.count, 2U); XCTAssertEqual(managed.dateObj.count, 2U); XCTAssertEqual(optUnmanaged.boolObj.count, 3U); XCTAssertEqual(optUnmanaged.intObj.count, 3U); XCTAssertEqual(optUnmanaged.floatObj.count, 3U); XCTAssertEqual(optUnmanaged.doubleObj.count, 3U); XCTAssertEqual(optUnmanaged.stringObj.count, 3U); XCTAssertEqual(optUnmanaged.dataObj.count, 3U); XCTAssertEqual(optUnmanaged.dateObj.count, 3U); XCTAssertEqual(optManaged.boolObj.count, 3U); XCTAssertEqual(optManaged.intObj.count, 3U); XCTAssertEqual(optManaged.floatObj.count, 3U); XCTAssertEqual(optManaged.doubleObj.count, 3U); XCTAssertEqual(optManaged.stringObj.count, 3U); XCTAssertEqual(optManaged.dataObj.count, 3U); XCTAssertEqual(optManaged.dateObj.count, 3U); [unmanaged.boolObj removeLastObject]; [unmanaged.intObj removeLastObject]; [unmanaged.floatObj removeLastObject]; [unmanaged.doubleObj removeLastObject]; [unmanaged.stringObj removeLastObject]; [unmanaged.dataObj removeLastObject]; [unmanaged.dateObj removeLastObject]; [optUnmanaged.boolObj removeLastObject]; [optUnmanaged.intObj removeLastObject]; [optUnmanaged.floatObj removeLastObject]; [optUnmanaged.doubleObj removeLastObject]; [optUnmanaged.stringObj removeLastObject]; [optUnmanaged.dataObj removeLastObject]; [optUnmanaged.dateObj removeLastObject]; [managed.boolObj removeLastObject]; [managed.intObj removeLastObject]; [managed.floatObj removeLastObject]; [managed.doubleObj removeLastObject]; [managed.stringObj removeLastObject]; [managed.dataObj removeLastObject]; [managed.dateObj removeLastObject]; [optManaged.boolObj removeLastObject]; [optManaged.intObj removeLastObject]; [optManaged.floatObj removeLastObject]; [optManaged.doubleObj removeLastObject]; [optManaged.stringObj removeLastObject]; [optManaged.dataObj removeLastObject]; [optManaged.dateObj removeLastObject]; XCTAssertEqual(unmanaged.boolObj.count, 1U); XCTAssertEqual(unmanaged.intObj.count, 1U); XCTAssertEqual(unmanaged.floatObj.count, 1U); XCTAssertEqual(unmanaged.doubleObj.count, 1U); XCTAssertEqual(unmanaged.stringObj.count, 1U); XCTAssertEqual(unmanaged.dataObj.count, 1U); XCTAssertEqual(unmanaged.dateObj.count, 1U); XCTAssertEqual(managed.boolObj.count, 1U); XCTAssertEqual(managed.intObj.count, 1U); XCTAssertEqual(managed.floatObj.count, 1U); XCTAssertEqual(managed.doubleObj.count, 1U); XCTAssertEqual(managed.stringObj.count, 1U); XCTAssertEqual(managed.dataObj.count, 1U); XCTAssertEqual(managed.dateObj.count, 1U); XCTAssertEqual(optUnmanaged.boolObj.count, 2U); XCTAssertEqual(optUnmanaged.intObj.count, 2U); XCTAssertEqual(optUnmanaged.floatObj.count, 2U); XCTAssertEqual(optUnmanaged.doubleObj.count, 2U); XCTAssertEqual(optUnmanaged.stringObj.count, 2U); XCTAssertEqual(optUnmanaged.dataObj.count, 2U); XCTAssertEqual(optUnmanaged.dateObj.count, 2U); XCTAssertEqual(optManaged.boolObj.count, 2U); XCTAssertEqual(optManaged.intObj.count, 2U); XCTAssertEqual(optManaged.floatObj.count, 2U); XCTAssertEqual(optManaged.doubleObj.count, 2U); XCTAssertEqual(optManaged.stringObj.count, 2U); XCTAssertEqual(optManaged.dataObj.count, 2U); XCTAssertEqual(optManaged.dateObj.count, 2U); XCTAssertEqualObjects(unmanaged.boolObj[0], @NO); XCTAssertEqualObjects(unmanaged.intObj[0], @2); XCTAssertEqualObjects(unmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(unmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(unmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(unmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[0], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[0], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(managed.boolObj[0], @NO); XCTAssertEqualObjects(managed.intObj[0], @2); XCTAssertEqualObjects(managed.floatObj[0], @2.2f); XCTAssertEqualObjects(managed.doubleObj[0], @2.2); XCTAssertEqualObjects(managed.stringObj[0], @"a"); XCTAssertEqualObjects(managed.dataObj[0], data(1)); XCTAssertEqualObjects(managed.dateObj[0], date(1)); XCTAssertEqualObjects(optManaged.boolObj[0], @NO); XCTAssertEqualObjects(optManaged.intObj[0], @2); XCTAssertEqualObjects(optManaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optManaged.stringObj[0], @"a"); XCTAssertEqualObjects(optManaged.dataObj[0], data(1)); XCTAssertEqualObjects(optManaged.dateObj[0], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[1], @YES); XCTAssertEqualObjects(optUnmanaged.intObj[1], @3); XCTAssertEqualObjects(optUnmanaged.floatObj[1], @3.3f); XCTAssertEqualObjects(optUnmanaged.doubleObj[1], @3.3); XCTAssertEqualObjects(optUnmanaged.stringObj[1], @"b"); XCTAssertEqualObjects(optUnmanaged.dataObj[1], data(2)); XCTAssertEqualObjects(optUnmanaged.dateObj[1], date(2)); XCTAssertEqualObjects(optManaged.boolObj[1], @YES); XCTAssertEqualObjects(optManaged.intObj[1], @3); XCTAssertEqualObjects(optManaged.floatObj[1], @3.3f); XCTAssertEqualObjects(optManaged.doubleObj[1], @3.3); XCTAssertEqualObjects(optManaged.stringObj[1], @"b"); XCTAssertEqualObjects(optManaged.dataObj[1], data(2)); XCTAssertEqualObjects(optManaged.dateObj[1], date(2)); } - (void)testReplace { RLMAssertThrowsWithReason([unmanaged.boolObj replaceObjectAtIndex:0 withObject:@NO], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.intObj replaceObjectAtIndex:0 withObject:@2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.floatObj replaceObjectAtIndex:0 withObject:@2.2f], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.doubleObj replaceObjectAtIndex:0 withObject:@2.2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.stringObj replaceObjectAtIndex:0 withObject:@"a"], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dataObj replaceObjectAtIndex:0 withObject:data(1)], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dateObj replaceObjectAtIndex:0 withObject:date(1)], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj replaceObjectAtIndex:0 withObject:@NO], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.intObj replaceObjectAtIndex:0 withObject:@2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj replaceObjectAtIndex:0 withObject:@2.2f], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj replaceObjectAtIndex:0 withObject:@2.2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj replaceObjectAtIndex:0 withObject:@"a"], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj replaceObjectAtIndex:0 withObject:data(1)], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj replaceObjectAtIndex:0 withObject:date(1)], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.boolObj replaceObjectAtIndex:0 withObject:@NO], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.intObj replaceObjectAtIndex:0 withObject:@2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.floatObj replaceObjectAtIndex:0 withObject:@2.2f], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.doubleObj replaceObjectAtIndex:0 withObject:@2.2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.stringObj replaceObjectAtIndex:0 withObject:@"a"], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dataObj replaceObjectAtIndex:0 withObject:data(1)], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dateObj replaceObjectAtIndex:0 withObject:date(1)], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.boolObj replaceObjectAtIndex:0 withObject:@NO], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.intObj replaceObjectAtIndex:0 withObject:@2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.floatObj replaceObjectAtIndex:0 withObject:@2.2f], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.doubleObj replaceObjectAtIndex:0 withObject:@2.2], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.stringObj replaceObjectAtIndex:0 withObject:@"a"], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dataObj replaceObjectAtIndex:0 withObject:data(1)], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dateObj replaceObjectAtIndex:0 withObject:date(1)], @"Index 0 is out of bounds (must be less than 0)."); [unmanaged.boolObj addObject:@NO]; [unmanaged.boolObj replaceObjectAtIndex:0 withObject:@YES]; XCTAssertEqualObjects(unmanaged.boolObj[0], @YES); [unmanaged.intObj addObject:@2]; [unmanaged.intObj replaceObjectAtIndex:0 withObject:@3]; XCTAssertEqualObjects(unmanaged.intObj[0], @3); [unmanaged.floatObj addObject:@2.2f]; [unmanaged.floatObj replaceObjectAtIndex:0 withObject:@3.3f]; XCTAssertEqualObjects(unmanaged.floatObj[0], @3.3f); [unmanaged.doubleObj addObject:@2.2]; [unmanaged.doubleObj replaceObjectAtIndex:0 withObject:@3.3]; XCTAssertEqualObjects(unmanaged.doubleObj[0], @3.3); [unmanaged.stringObj addObject:@"a"]; [unmanaged.stringObj replaceObjectAtIndex:0 withObject:@"b"]; XCTAssertEqualObjects(unmanaged.stringObj[0], @"b"); [unmanaged.dataObj addObject:data(1)]; [unmanaged.dataObj replaceObjectAtIndex:0 withObject:data(2)]; XCTAssertEqualObjects(unmanaged.dataObj[0], data(2)); [unmanaged.dateObj addObject:date(1)]; [unmanaged.dateObj replaceObjectAtIndex:0 withObject:date(2)]; XCTAssertEqualObjects(unmanaged.dateObj[0], date(2)); [optUnmanaged.boolObj addObject:@NO]; [optUnmanaged.boolObj replaceObjectAtIndex:0 withObject:@YES]; XCTAssertEqualObjects(optUnmanaged.boolObj[0], @YES); [optUnmanaged.intObj addObject:@2]; [optUnmanaged.intObj replaceObjectAtIndex:0 withObject:@3]; XCTAssertEqualObjects(optUnmanaged.intObj[0], @3); [optUnmanaged.floatObj addObject:@2.2f]; [optUnmanaged.floatObj replaceObjectAtIndex:0 withObject:@3.3f]; XCTAssertEqualObjects(optUnmanaged.floatObj[0], @3.3f); [optUnmanaged.doubleObj addObject:@2.2]; [optUnmanaged.doubleObj replaceObjectAtIndex:0 withObject:@3.3]; XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @3.3); [optUnmanaged.stringObj addObject:@"a"]; [optUnmanaged.stringObj replaceObjectAtIndex:0 withObject:@"b"]; XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"b"); [optUnmanaged.dataObj addObject:data(1)]; [optUnmanaged.dataObj replaceObjectAtIndex:0 withObject:data(2)]; XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(2)); [optUnmanaged.dateObj addObject:date(1)]; [optUnmanaged.dateObj replaceObjectAtIndex:0 withObject:date(2)]; XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(2)); [managed.boolObj addObject:@NO]; [managed.boolObj replaceObjectAtIndex:0 withObject:@YES]; XCTAssertEqualObjects(managed.boolObj[0], @YES); [managed.intObj addObject:@2]; [managed.intObj replaceObjectAtIndex:0 withObject:@3]; XCTAssertEqualObjects(managed.intObj[0], @3); [managed.floatObj addObject:@2.2f]; [managed.floatObj replaceObjectAtIndex:0 withObject:@3.3f]; XCTAssertEqualObjects(managed.floatObj[0], @3.3f); [managed.doubleObj addObject:@2.2]; [managed.doubleObj replaceObjectAtIndex:0 withObject:@3.3]; XCTAssertEqualObjects(managed.doubleObj[0], @3.3); [managed.stringObj addObject:@"a"]; [managed.stringObj replaceObjectAtIndex:0 withObject:@"b"]; XCTAssertEqualObjects(managed.stringObj[0], @"b"); [managed.dataObj addObject:data(1)]; [managed.dataObj replaceObjectAtIndex:0 withObject:data(2)]; XCTAssertEqualObjects(managed.dataObj[0], data(2)); [managed.dateObj addObject:date(1)]; [managed.dateObj replaceObjectAtIndex:0 withObject:date(2)]; XCTAssertEqualObjects(managed.dateObj[0], date(2)); [optManaged.boolObj addObject:@NO]; [optManaged.boolObj replaceObjectAtIndex:0 withObject:@YES]; XCTAssertEqualObjects(optManaged.boolObj[0], @YES); [optManaged.intObj addObject:@2]; [optManaged.intObj replaceObjectAtIndex:0 withObject:@3]; XCTAssertEqualObjects(optManaged.intObj[0], @3); [optManaged.floatObj addObject:@2.2f]; [optManaged.floatObj replaceObjectAtIndex:0 withObject:@3.3f]; XCTAssertEqualObjects(optManaged.floatObj[0], @3.3f); [optManaged.doubleObj addObject:@2.2]; [optManaged.doubleObj replaceObjectAtIndex:0 withObject:@3.3]; XCTAssertEqualObjects(optManaged.doubleObj[0], @3.3); [optManaged.stringObj addObject:@"a"]; [optManaged.stringObj replaceObjectAtIndex:0 withObject:@"b"]; XCTAssertEqualObjects(optManaged.stringObj[0], @"b"); [optManaged.dataObj addObject:data(1)]; [optManaged.dataObj replaceObjectAtIndex:0 withObject:data(2)]; XCTAssertEqualObjects(optManaged.dataObj[0], data(2)); [optManaged.dateObj addObject:date(1)]; [optManaged.dateObj replaceObjectAtIndex:0 withObject:date(2)]; XCTAssertEqualObjects(optManaged.dateObj[0], date(2)); [optUnmanaged.boolObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.boolObj[0], NSNull.null); [optUnmanaged.intObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.intObj[0], NSNull.null); [optUnmanaged.floatObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.floatObj[0], NSNull.null); [optUnmanaged.doubleObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.doubleObj[0], NSNull.null); [optUnmanaged.stringObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.stringObj[0], NSNull.null); [optUnmanaged.dataObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.dataObj[0], NSNull.null); [optUnmanaged.dateObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optUnmanaged.dateObj[0], NSNull.null); [optManaged.boolObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optManaged.boolObj[0], NSNull.null); [optManaged.intObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optManaged.intObj[0], NSNull.null); [optManaged.floatObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optManaged.floatObj[0], NSNull.null); [optManaged.doubleObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optManaged.doubleObj[0], NSNull.null); [optManaged.stringObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optManaged.stringObj[0], NSNull.null); [optManaged.dataObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optManaged.dataObj[0], NSNull.null); [optManaged.dateObj replaceObjectAtIndex:0 withObject:NSNull.null]; XCTAssertEqualObjects(optManaged.dateObj[0], NSNull.null); RLMAssertThrowsWithReason([unmanaged.boolObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj replaceObjectAtIndex:0 withObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optUnmanaged.boolObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optUnmanaged.intObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optUnmanaged.floatObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optUnmanaged.stringObj replaceObjectAtIndex:0 withObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optUnmanaged.dataObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optUnmanaged.dateObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([managed.boolObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj replaceObjectAtIndex:0 withObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optManaged.boolObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optManaged.intObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optManaged.floatObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optManaged.doubleObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optManaged.stringObj replaceObjectAtIndex:0 withObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optManaged.dataObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optManaged.dateObj replaceObjectAtIndex:0 withObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([unmanaged.boolObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'date'"); RLMAssertThrowsWithReason([managed.boolObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj replaceObjectAtIndex:0 withObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'date'"); } - (void)testMove { RLMAssertThrowsWithReason([unmanaged.boolObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.intObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.floatObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.doubleObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.stringObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dataObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dateObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.intObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.boolObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.intObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.floatObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.doubleObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.stringObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dataObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dateObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.boolObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.intObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.floatObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.doubleObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.stringObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dataObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dateObj moveObjectAtIndex:0 toIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.boolObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.intObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.floatObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.doubleObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.stringObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dataObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dateObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.intObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.boolObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.intObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.floatObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.doubleObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.stringObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dataObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dateObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.boolObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.intObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.floatObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.doubleObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.stringObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dataObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dateObj moveObjectAtIndex:1 toIndex:0], @"Index 1 is out of bounds (must be less than 0)."); [unmanaged.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3, @2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [optUnmanaged.intObj addObjects:@[@2, @3, @2, @3]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [managed.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [managed.intObj addObjects:@[@2, @3, @2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [optManaged.intObj addObjects:@[@2, @3, @2, @3]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [optManaged.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [optManaged.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [optManaged.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [unmanaged.boolObj moveObjectAtIndex:2 toIndex:0]; [unmanaged.intObj moveObjectAtIndex:2 toIndex:0]; [unmanaged.floatObj moveObjectAtIndex:2 toIndex:0]; [unmanaged.doubleObj moveObjectAtIndex:2 toIndex:0]; [unmanaged.stringObj moveObjectAtIndex:2 toIndex:0]; [unmanaged.dataObj moveObjectAtIndex:2 toIndex:0]; [unmanaged.dateObj moveObjectAtIndex:2 toIndex:0]; [optUnmanaged.boolObj moveObjectAtIndex:2 toIndex:0]; [optUnmanaged.intObj moveObjectAtIndex:2 toIndex:0]; [optUnmanaged.floatObj moveObjectAtIndex:2 toIndex:0]; [optUnmanaged.doubleObj moveObjectAtIndex:2 toIndex:0]; [optUnmanaged.stringObj moveObjectAtIndex:2 toIndex:0]; [optUnmanaged.dataObj moveObjectAtIndex:2 toIndex:0]; [optUnmanaged.dateObj moveObjectAtIndex:2 toIndex:0]; [managed.boolObj moveObjectAtIndex:2 toIndex:0]; [managed.intObj moveObjectAtIndex:2 toIndex:0]; [managed.floatObj moveObjectAtIndex:2 toIndex:0]; [managed.doubleObj moveObjectAtIndex:2 toIndex:0]; [managed.stringObj moveObjectAtIndex:2 toIndex:0]; [managed.dataObj moveObjectAtIndex:2 toIndex:0]; [managed.dateObj moveObjectAtIndex:2 toIndex:0]; [optManaged.boolObj moveObjectAtIndex:2 toIndex:0]; [optManaged.intObj moveObjectAtIndex:2 toIndex:0]; [optManaged.floatObj moveObjectAtIndex:2 toIndex:0]; [optManaged.doubleObj moveObjectAtIndex:2 toIndex:0]; [optManaged.stringObj moveObjectAtIndex:2 toIndex:0]; [optManaged.dataObj moveObjectAtIndex:2 toIndex:0]; [optManaged.dateObj moveObjectAtIndex:2 toIndex:0]; XCTAssertEqualObjects([unmanaged.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([unmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([unmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([unmanaged.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([unmanaged.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([optUnmanaged.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); XCTAssertEqualObjects([managed.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([managed.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([managed.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([managed.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([managed.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([managed.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([managed.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); XCTAssertEqualObjects([optManaged.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([optManaged.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([optManaged.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([optManaged.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([optManaged.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([optManaged.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([optManaged.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); } - (void)testExchange { RLMAssertThrowsWithReason([unmanaged.boolObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.intObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.floatObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.doubleObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.stringObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dataObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dateObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.intObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.boolObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.intObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.floatObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.doubleObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.stringObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dataObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dateObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.boolObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.intObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.floatObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.doubleObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.stringObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dataObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dateObj exchangeObjectAtIndex:0 withObjectAtIndex:1], @"Index 0 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.boolObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.intObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.floatObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.doubleObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.stringObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dataObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([unmanaged.dateObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.boolObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.intObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.floatObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.stringObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dataObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optUnmanaged.dateObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.boolObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.intObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.floatObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.doubleObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.stringObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dataObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([managed.dateObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.boolObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.intObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.floatObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.doubleObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.stringObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dataObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); RLMAssertThrowsWithReason([optManaged.dateObj exchangeObjectAtIndex:1 withObjectAtIndex:0], @"Index 1 is out of bounds (must be less than 0)."); [unmanaged.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3, @2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [optUnmanaged.intObj addObjects:@[@2, @3, @2, @3]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [managed.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [managed.intObj addObjects:@[@2, @3, @2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [optManaged.intObj addObjects:@[@2, @3, @2, @3]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [optManaged.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [optManaged.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [optManaged.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [unmanaged.boolObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [unmanaged.intObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [unmanaged.floatObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [unmanaged.doubleObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [unmanaged.stringObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [unmanaged.dataObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [unmanaged.dateObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optUnmanaged.boolObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optUnmanaged.intObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optUnmanaged.floatObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optUnmanaged.doubleObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optUnmanaged.stringObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optUnmanaged.dataObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optUnmanaged.dateObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [managed.boolObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [managed.intObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [managed.floatObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [managed.doubleObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [managed.stringObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [managed.dataObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [managed.dateObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optManaged.boolObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optManaged.intObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optManaged.floatObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optManaged.doubleObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optManaged.stringObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optManaged.dataObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; [optManaged.dateObj exchangeObjectAtIndex:2 withObjectAtIndex:1]; XCTAssertEqualObjects([unmanaged.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([unmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([unmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([unmanaged.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([unmanaged.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([optUnmanaged.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); XCTAssertEqualObjects([managed.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([managed.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([managed.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([managed.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([managed.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([managed.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([managed.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); XCTAssertEqualObjects([optManaged.boolObj valueForKey:@"self"], (@[@NO, @NO, @YES, @YES])); XCTAssertEqualObjects([optManaged.intObj valueForKey:@"self"], (@[@2, @2, @3, @3])); XCTAssertEqualObjects([optManaged.floatObj valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([optManaged.doubleObj valueForKey:@"self"], (@[@2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([optManaged.stringObj valueForKey:@"self"], (@[@"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([optManaged.dataObj valueForKey:@"self"], (@[data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([optManaged.dateObj valueForKey:@"self"], (@[date(1), date(1), date(2), date(2)])); } - (void)testIndexOfObject { XCTAssertEqual(NSNotFound, [unmanaged.boolObj indexOfObject:@NO]); XCTAssertEqual(NSNotFound, [unmanaged.intObj indexOfObject:@2]); XCTAssertEqual(NSNotFound, [unmanaged.floatObj indexOfObject:@2.2f]); XCTAssertEqual(NSNotFound, [unmanaged.doubleObj indexOfObject:@2.2]); XCTAssertEqual(NSNotFound, [unmanaged.stringObj indexOfObject:@"a"]); XCTAssertEqual(NSNotFound, [unmanaged.dataObj indexOfObject:data(1)]); XCTAssertEqual(NSNotFound, [unmanaged.dateObj indexOfObject:date(1)]); XCTAssertEqual(NSNotFound, [optUnmanaged.boolObj indexOfObject:@NO]); XCTAssertEqual(NSNotFound, [optUnmanaged.intObj indexOfObject:@2]); XCTAssertEqual(NSNotFound, [optUnmanaged.floatObj indexOfObject:@2.2f]); XCTAssertEqual(NSNotFound, [optUnmanaged.doubleObj indexOfObject:@2.2]); XCTAssertEqual(NSNotFound, [optUnmanaged.stringObj indexOfObject:@"a"]); XCTAssertEqual(NSNotFound, [optUnmanaged.dataObj indexOfObject:data(1)]); XCTAssertEqual(NSNotFound, [optUnmanaged.dateObj indexOfObject:date(1)]); XCTAssertEqual(NSNotFound, [managed.boolObj indexOfObject:@NO]); XCTAssertEqual(NSNotFound, [managed.intObj indexOfObject:@2]); XCTAssertEqual(NSNotFound, [managed.floatObj indexOfObject:@2.2f]); XCTAssertEqual(NSNotFound, [managed.doubleObj indexOfObject:@2.2]); XCTAssertEqual(NSNotFound, [managed.stringObj indexOfObject:@"a"]); XCTAssertEqual(NSNotFound, [managed.dataObj indexOfObject:data(1)]); XCTAssertEqual(NSNotFound, [managed.dateObj indexOfObject:date(1)]); XCTAssertEqual(NSNotFound, [optManaged.boolObj indexOfObject:@NO]); XCTAssertEqual(NSNotFound, [optManaged.intObj indexOfObject:@2]); XCTAssertEqual(NSNotFound, [optManaged.floatObj indexOfObject:@2.2f]); XCTAssertEqual(NSNotFound, [optManaged.doubleObj indexOfObject:@2.2]); XCTAssertEqual(NSNotFound, [optManaged.stringObj indexOfObject:@"a"]); XCTAssertEqual(NSNotFound, [optManaged.dataObj indexOfObject:data(1)]); XCTAssertEqual(NSNotFound, [optManaged.dateObj indexOfObject:date(1)]); RLMAssertThrowsWithReason([unmanaged.boolObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj indexOfObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optUnmanaged.boolObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optUnmanaged.intObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optUnmanaged.floatObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optUnmanaged.stringObj indexOfObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optUnmanaged.dataObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optUnmanaged.dateObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([managed.boolObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj indexOfObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optManaged.boolObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optManaged.intObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optManaged.floatObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optManaged.doubleObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optManaged.stringObj indexOfObject:@2], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optManaged.dataObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optManaged.dateObj indexOfObject:@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([unmanaged.boolObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'date'"); RLMAssertThrowsWithReason([managed.boolObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj indexOfObject:NSNull.null], @"Invalid value '' of type 'NSNull' for expected type 'date'"); XCTAssertEqual(NSNotFound, [optUnmanaged.boolObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optUnmanaged.intObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optUnmanaged.floatObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optUnmanaged.doubleObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optUnmanaged.stringObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optUnmanaged.dataObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optUnmanaged.dateObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optManaged.boolObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optManaged.intObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optManaged.floatObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optManaged.doubleObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optManaged.stringObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optManaged.dataObj indexOfObject:NSNull.null]); XCTAssertEqual(NSNotFound, [optManaged.dateObj indexOfObject:NSNull.null]); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqual(1U, [unmanaged.boolObj indexOfObject:@YES]); XCTAssertEqual(1U, [unmanaged.intObj indexOfObject:@3]); XCTAssertEqual(1U, [unmanaged.floatObj indexOfObject:@3.3f]); XCTAssertEqual(1U, [unmanaged.doubleObj indexOfObject:@3.3]); XCTAssertEqual(1U, [unmanaged.stringObj indexOfObject:@"b"]); XCTAssertEqual(1U, [unmanaged.dataObj indexOfObject:data(2)]); XCTAssertEqual(1U, [unmanaged.dateObj indexOfObject:date(2)]); XCTAssertEqual(1U, [optUnmanaged.boolObj indexOfObject:@YES]); XCTAssertEqual(1U, [optUnmanaged.intObj indexOfObject:@3]); XCTAssertEqual(1U, [optUnmanaged.floatObj indexOfObject:@3.3f]); XCTAssertEqual(1U, [optUnmanaged.doubleObj indexOfObject:@3.3]); XCTAssertEqual(1U, [optUnmanaged.stringObj indexOfObject:@"b"]); XCTAssertEqual(1U, [optUnmanaged.dataObj indexOfObject:data(2)]); XCTAssertEqual(1U, [optUnmanaged.dateObj indexOfObject:date(2)]); XCTAssertEqual(1U, [managed.boolObj indexOfObject:@YES]); XCTAssertEqual(1U, [managed.intObj indexOfObject:@3]); XCTAssertEqual(1U, [managed.floatObj indexOfObject:@3.3f]); XCTAssertEqual(1U, [managed.doubleObj indexOfObject:@3.3]); XCTAssertEqual(1U, [managed.stringObj indexOfObject:@"b"]); XCTAssertEqual(1U, [managed.dataObj indexOfObject:data(2)]); XCTAssertEqual(1U, [managed.dateObj indexOfObject:date(2)]); XCTAssertEqual(1U, [optManaged.boolObj indexOfObject:@YES]); XCTAssertEqual(1U, [optManaged.intObj indexOfObject:@3]); XCTAssertEqual(1U, [optManaged.floatObj indexOfObject:@3.3f]); XCTAssertEqual(1U, [optManaged.doubleObj indexOfObject:@3.3]); XCTAssertEqual(1U, [optManaged.stringObj indexOfObject:@"b"]); XCTAssertEqual(1U, [optManaged.dataObj indexOfObject:data(2)]); XCTAssertEqual(1U, [optManaged.dateObj indexOfObject:date(2)]); } - (void)testIndexOfObjectSorted { [managed.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [managed.intObj addObjects:@[@2, @3, @2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null, @YES, @NO]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null, @3, @2]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null, @3.3f, @2.2f]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null, @3.3, @2.2]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null, @"b", @"a"]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null, data(2), data(1)]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null, date(2), date(1)]]; XCTAssertEqual(0U, [[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@YES]); XCTAssertEqual(0U, [[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@3]); XCTAssertEqual(0U, [[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@3.3f]); XCTAssertEqual(0U, [[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@3.3]); XCTAssertEqual(0U, [[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@"b"]); XCTAssertEqual(0U, [[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:data(2)]); XCTAssertEqual(0U, [[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:date(2)]); XCTAssertEqual(2U, [[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@NO]); XCTAssertEqual(2U, [[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@2]); XCTAssertEqual(2U, [[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@2.2f]); XCTAssertEqual(2U, [[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@2.2]); XCTAssertEqual(2U, [[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@"a"]); XCTAssertEqual(2U, [[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:data(1)]); XCTAssertEqual(2U, [[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:date(1)]); XCTAssertEqual(0U, [[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@YES]); XCTAssertEqual(0U, [[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@3]); XCTAssertEqual(0U, [[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@3.3f]); XCTAssertEqual(0U, [[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@3.3]); XCTAssertEqual(0U, [[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@"b"]); XCTAssertEqual(0U, [[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:data(2)]); XCTAssertEqual(0U, [[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:date(2)]); XCTAssertEqual(2U, [[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@NO]); XCTAssertEqual(2U, [[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@2]); XCTAssertEqual(2U, [[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@2.2f]); XCTAssertEqual(2U, [[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@2.2]); XCTAssertEqual(2U, [[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:@"a"]); XCTAssertEqual(2U, [[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:data(1)]); XCTAssertEqual(2U, [[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:date(1)]); XCTAssertEqual(4U, [[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:NSNull.null]); XCTAssertEqual(4U, [[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:NSNull.null]); XCTAssertEqual(4U, [[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:NSNull.null]); XCTAssertEqual(4U, [[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:NSNull.null]); XCTAssertEqual(4U, [[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:NSNull.null]); XCTAssertEqual(4U, [[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:NSNull.null]); XCTAssertEqual(4U, [[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObject:NSNull.null]); } - (void)testIndexOfObjectDistinct { [managed.boolObj addObjects:@[@NO, @NO, @YES]]; [managed.intObj addObjects:@[@2, @2, @3]]; [managed.floatObj addObjects:@[@2.2f, @2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @NO, NSNull.null, @YES, @NO]]; [optManaged.intObj addObjects:@[@2, @2, NSNull.null, @3, @2]]; [optManaged.floatObj addObjects:@[@2.2f, @2.2f, NSNull.null, @3.3f, @2.2f]]; [optManaged.doubleObj addObjects:@[@2.2, @2.2, NSNull.null, @3.3, @2.2]]; [optManaged.stringObj addObjects:@[@"a", @"a", NSNull.null, @"b", @"a"]]; [optManaged.dataObj addObjects:@[data(1), data(1), NSNull.null, data(2), data(1)]]; [optManaged.dateObj addObjects:@[date(1), date(1), NSNull.null, date(2), date(1)]]; XCTAssertEqual(0U, [[managed.boolObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@NO]); XCTAssertEqual(0U, [[managed.intObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@2]); XCTAssertEqual(0U, [[managed.floatObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@2.2f]); XCTAssertEqual(0U, [[managed.doubleObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@2.2]); XCTAssertEqual(0U, [[managed.stringObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@"a"]); XCTAssertEqual(0U, [[managed.dataObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:data(1)]); XCTAssertEqual(0U, [[managed.dateObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:date(1)]); XCTAssertEqual(1U, [[managed.boolObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@YES]); XCTAssertEqual(1U, [[managed.intObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@3]); XCTAssertEqual(1U, [[managed.floatObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@3.3f]); XCTAssertEqual(1U, [[managed.doubleObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@3.3]); XCTAssertEqual(1U, [[managed.stringObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@"b"]); XCTAssertEqual(1U, [[managed.dataObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:data(2)]); XCTAssertEqual(1U, [[managed.dateObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:date(2)]); XCTAssertEqual(0U, [[optManaged.boolObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@NO]); XCTAssertEqual(0U, [[optManaged.intObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@2]); XCTAssertEqual(0U, [[optManaged.floatObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@2.2f]); XCTAssertEqual(0U, [[optManaged.doubleObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@2.2]); XCTAssertEqual(0U, [[optManaged.stringObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@"a"]); XCTAssertEqual(0U, [[optManaged.dataObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:data(1)]); XCTAssertEqual(0U, [[optManaged.dateObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:date(1)]); XCTAssertEqual(2U, [[optManaged.boolObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@YES]); XCTAssertEqual(2U, [[optManaged.intObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@3]); XCTAssertEqual(2U, [[optManaged.floatObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@3.3f]); XCTAssertEqual(2U, [[optManaged.doubleObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@3.3]); XCTAssertEqual(2U, [[optManaged.stringObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:@"b"]); XCTAssertEqual(2U, [[optManaged.dataObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:data(2)]); XCTAssertEqual(2U, [[optManaged.dateObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:date(2)]); XCTAssertEqual(1U, [[optManaged.boolObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:NSNull.null]); XCTAssertEqual(1U, [[optManaged.intObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:NSNull.null]); XCTAssertEqual(1U, [[optManaged.floatObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:NSNull.null]); XCTAssertEqual(1U, [[optManaged.doubleObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:NSNull.null]); XCTAssertEqual(1U, [[optManaged.stringObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:NSNull.null]); XCTAssertEqual(1U, [[optManaged.dataObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:NSNull.null]); XCTAssertEqual(1U, [[optManaged.dateObj distinctResultsUsingKeyPaths:@[@"self"]] indexOfObject:NSNull.null]); } - (void)testIndexOfObjectWhere { RLMAssertThrowsWithReason([managed.boolObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.intObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.floatObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.doubleObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.stringObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.dataObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.dateObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.boolObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.intObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.floatObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.doubleObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.stringObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.dataObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.dateObj indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWhere:@"TRUEPREDICATE"], @"implemented"); XCTAssertEqual(NSNotFound, [unmanaged.boolObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.intObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.floatObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.doubleObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.stringObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.dataObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.dateObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.boolObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.intObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.floatObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.doubleObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.stringObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.dataObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.dateObj indexOfObjectWhere:@"TRUEPREDICATE"]); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqual(0U, [unmanaged.boolObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [unmanaged.intObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [unmanaged.floatObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [unmanaged.doubleObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [unmanaged.stringObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [unmanaged.dataObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [unmanaged.dateObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [optUnmanaged.boolObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [optUnmanaged.intObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [optUnmanaged.floatObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [optUnmanaged.doubleObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [optUnmanaged.stringObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [optUnmanaged.dataObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(0U, [optUnmanaged.dateObj indexOfObjectWhere:@"TRUEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.boolObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.intObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.floatObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.doubleObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.stringObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.dataObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [unmanaged.dateObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.boolObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.intObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.floatObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.doubleObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.stringObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.dataObj indexOfObjectWhere:@"FALSEPREDICATE"]); XCTAssertEqual(NSNotFound, [optUnmanaged.dateObj indexOfObjectWhere:@"FALSEPREDICATE"]); } - (void)testIndexOfObjectWithPredicate { RLMAssertThrowsWithReason([managed.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); XCTAssertEqual(NSNotFound, [unmanaged.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [unmanaged.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [unmanaged.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [unmanaged.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [unmanaged.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [unmanaged.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [unmanaged.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [optUnmanaged.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [optUnmanaged.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [optUnmanaged.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [optUnmanaged.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [optUnmanaged.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [optUnmanaged.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [optUnmanaged.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqual(0U, [unmanaged.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [unmanaged.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [unmanaged.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [unmanaged.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [unmanaged.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [unmanaged.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [unmanaged.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [optUnmanaged.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [optUnmanaged.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [optUnmanaged.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [optUnmanaged.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [optUnmanaged.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [optUnmanaged.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(0U, [optUnmanaged.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); XCTAssertEqual(NSNotFound, [unmanaged.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [unmanaged.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [unmanaged.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [unmanaged.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [unmanaged.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [unmanaged.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [unmanaged.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [optUnmanaged.boolObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [optUnmanaged.intObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [optUnmanaged.floatObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [optUnmanaged.doubleObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [optUnmanaged.stringObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [optUnmanaged.dataObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); XCTAssertEqual(NSNotFound, [optUnmanaged.dateObj indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]]); } - (void)testSort { RLMAssertThrowsWithReason([unmanaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.boolObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.intObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.floatObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.doubleObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.stringObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dataObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dateObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.boolObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.intObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.floatObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.stringObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dataObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dateObj sortedResultsUsingDescriptors:@[]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([managed.boolObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([managed.intObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([managed.floatObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([managed.doubleObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([managed.stringObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([managed.dataObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([managed.dateObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([optManaged.boolObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([optManaged.intObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([optManaged.floatObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([optManaged.doubleObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([optManaged.stringObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([optManaged.dataObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); RLMAssertThrowsWithReason([optManaged.dateObj sortedResultsUsingKeyPath:@"not self" ascending:NO], @"can only be sorted on 'self'"); [managed.boolObj addObjects:@[@NO, @YES, @NO]]; [managed.intObj addObjects:@[@2, @3, @2]]; [managed.floatObj addObjects:@[@2.2f, @3.3f, @2.2f]]; [managed.doubleObj addObjects:@[@2.2, @3.3, @2.2]]; [managed.stringObj addObjects:@[@"a", @"b", @"a"]]; [managed.dataObj addObjects:@[data(1), data(2), data(1)]]; [managed.dateObj addObjects:@[date(1), date(2), date(1)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null, @YES, @NO]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null, @3, @2]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null, @3.3f, @2.2f]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null, @3.3, @2.2]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null, @"b", @"a"]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null, data(2), data(1)]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null, date(2), date(1)]]; XCTAssertEqualObjects([[managed.boolObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@NO, @YES, @NO])); XCTAssertEqualObjects([[managed.intObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@2, @3, @2])); XCTAssertEqualObjects([[managed.floatObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@2.2f, @3.3f, @2.2f])); XCTAssertEqualObjects([[managed.doubleObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@2.2, @3.3, @2.2])); XCTAssertEqualObjects([[managed.stringObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@"a", @"b", @"a"])); XCTAssertEqualObjects([[managed.dataObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[data(1), data(2), data(1)])); XCTAssertEqualObjects([[managed.dateObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[date(1), date(2), date(1)])); XCTAssertEqualObjects([[optManaged.boolObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@NO, @YES, NSNull.null, @YES, @NO])); XCTAssertEqualObjects([[optManaged.intObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@2, @3, NSNull.null, @3, @2])); XCTAssertEqualObjects([[optManaged.floatObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null, @3.3f, @2.2f])); XCTAssertEqualObjects([[optManaged.doubleObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null, @3.3, @2.2])); XCTAssertEqualObjects([[optManaged.stringObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[@"a", @"b", NSNull.null, @"b", @"a"])); XCTAssertEqualObjects([[optManaged.dataObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[data(1), data(2), NSNull.null, data(2), data(1)])); XCTAssertEqualObjects([[optManaged.dateObj sortedResultsUsingDescriptors:@[]] valueForKey:@"self"], (@[date(1), date(2), NSNull.null, date(2), date(1)])); XCTAssertEqualObjects([[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@YES, @NO, @NO])); XCTAssertEqualObjects([[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@3, @2, @2])); XCTAssertEqualObjects([[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@3.3f, @2.2f, @2.2f])); XCTAssertEqualObjects([[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@3.3, @2.2, @2.2])); XCTAssertEqualObjects([[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@"b", @"a", @"a"])); XCTAssertEqualObjects([[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[data(2), data(1), data(1)])); XCTAssertEqualObjects([[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[date(2), date(1), date(1)])); XCTAssertEqualObjects([[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@YES, @YES, @NO, @NO, NSNull.null])); XCTAssertEqualObjects([[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@3, @3, @2, @2, NSNull.null])); XCTAssertEqualObjects([[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@3.3f, @3.3f, @2.2f, @2.2f, NSNull.null])); XCTAssertEqualObjects([[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@3.3, @3.3, @2.2, @2.2, NSNull.null])); XCTAssertEqualObjects([[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[@"b", @"b", @"a", @"a", NSNull.null])); XCTAssertEqualObjects([[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[data(2), data(2), data(1), data(1), NSNull.null])); XCTAssertEqualObjects([[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] valueForKey:@"self"], (@[date(2), date(2), date(1), date(1), NSNull.null])); XCTAssertEqualObjects([[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[@NO, @NO, @YES])); XCTAssertEqualObjects([[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[@2, @2, @3])); XCTAssertEqualObjects([[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[@2.2f, @2.2f, @3.3f])); XCTAssertEqualObjects([[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[@2.2, @2.2, @3.3])); XCTAssertEqualObjects([[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[@"a", @"a", @"b"])); XCTAssertEqualObjects([[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[data(1), data(1), data(2)])); XCTAssertEqualObjects([[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[date(1), date(1), date(2)])); XCTAssertEqualObjects([[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[NSNull.null, @NO, @NO, @YES, @YES])); XCTAssertEqualObjects([[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[NSNull.null, @2, @2, @3, @3])); XCTAssertEqualObjects([[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[NSNull.null, @2.2f, @2.2f, @3.3f, @3.3f])); XCTAssertEqualObjects([[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[NSNull.null, @2.2, @2.2, @3.3, @3.3])); XCTAssertEqualObjects([[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[NSNull.null, @"a", @"a", @"b", @"b"])); XCTAssertEqualObjects([[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[NSNull.null, data(1), data(1), data(2), data(2)])); XCTAssertEqualObjects([[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:YES] valueForKey:@"self"], (@[NSNull.null, date(1), date(1), date(2), date(2)])); } - (void)testFilter { RLMAssertThrowsWithReason([unmanaged.boolObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.intObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.floatObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.doubleObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.stringObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dataObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dateObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.boolObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.intObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.floatObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.stringObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dataObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dateObj objectsWhere:@"TRUEPREDICATE"], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.boolObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.intObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.floatObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.doubleObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.stringObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dataObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dateObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.boolObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.intObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.floatObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.stringObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dataObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dateObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([managed.boolObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.intObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.floatObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.doubleObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.stringObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.dataObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.dateObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.boolObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.intObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.floatObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.doubleObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.stringObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.dataObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([optManaged.dateObj objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([managed.boolObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.intObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.floatObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.doubleObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.stringObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.dataObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([managed.dateObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.boolObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.intObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.floatObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.doubleObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.stringObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.dataObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([optManaged.dateObj objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWhere:@"TRUEPREDICATE"], @"implemented"); RLMAssertThrowsWithReason([[managed.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[managed.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.boolObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.intObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.floatObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.doubleObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.stringObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dataObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); RLMAssertThrowsWithReason([[optManaged.dateObj sortedResultsUsingKeyPath:@"self" ascending:NO] objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"implemented"); } - (void)testNotifications { RLMAssertThrowsWithReason([unmanaged.boolObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.intObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.floatObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.doubleObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.stringObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dataObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([unmanaged.dateObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.boolObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.intObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.floatObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.stringObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dataObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); RLMAssertThrowsWithReason([optUnmanaged.dateObj addNotificationBlock:^(__unused id a, __unused id c, __unused id e) { }], @"This method may only be called on RLMArray instances retrieved from an RLMRealm"); } - (void)testMin { RLMAssertThrowsWithReason([unmanaged.boolObj minOfProperty:@"self"], @"minOfProperty: is not supported for bool array"); RLMAssertThrowsWithReason([unmanaged.stringObj minOfProperty:@"self"], @"minOfProperty: is not supported for string array"); RLMAssertThrowsWithReason([unmanaged.dataObj minOfProperty:@"self"], @"minOfProperty: is not supported for data array"); RLMAssertThrowsWithReason([optUnmanaged.boolObj minOfProperty:@"self"], @"minOfProperty: is not supported for bool? array"); RLMAssertThrowsWithReason([optUnmanaged.stringObj minOfProperty:@"self"], @"minOfProperty: is not supported for string? array"); RLMAssertThrowsWithReason([optUnmanaged.dataObj minOfProperty:@"self"], @"minOfProperty: is not supported for data? array"); RLMAssertThrowsWithReason([managed.boolObj minOfProperty:@"self"], @"minOfProperty: is not supported for bool array 'AllPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([managed.stringObj minOfProperty:@"self"], @"minOfProperty: is not supported for string array 'AllPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([managed.dataObj minOfProperty:@"self"], @"minOfProperty: is not supported for data array 'AllPrimitiveArrays.dataObj'"); RLMAssertThrowsWithReason([optManaged.boolObj minOfProperty:@"self"], @"minOfProperty: is not supported for bool? array 'AllOptionalPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([optManaged.stringObj minOfProperty:@"self"], @"minOfProperty: is not supported for string? array 'AllOptionalPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([optManaged.dataObj minOfProperty:@"self"], @"minOfProperty: is not supported for data? array 'AllOptionalPrimitiveArrays.dataObj'"); XCTAssertNil([unmanaged.intObj minOfProperty:@"self"]); XCTAssertNil([unmanaged.floatObj minOfProperty:@"self"]); XCTAssertNil([unmanaged.doubleObj minOfProperty:@"self"]); XCTAssertNil([unmanaged.dateObj minOfProperty:@"self"]); XCTAssertNil([optUnmanaged.intObj minOfProperty:@"self"]); XCTAssertNil([optUnmanaged.floatObj minOfProperty:@"self"]); XCTAssertNil([optUnmanaged.doubleObj minOfProperty:@"self"]); XCTAssertNil([optUnmanaged.dateObj minOfProperty:@"self"]); XCTAssertNil([managed.intObj minOfProperty:@"self"]); XCTAssertNil([managed.floatObj minOfProperty:@"self"]); XCTAssertNil([managed.doubleObj minOfProperty:@"self"]); XCTAssertNil([managed.dateObj minOfProperty:@"self"]); XCTAssertNil([optManaged.intObj minOfProperty:@"self"]); XCTAssertNil([optManaged.floatObj minOfProperty:@"self"]); XCTAssertNil([optManaged.doubleObj minOfProperty:@"self"]); XCTAssertNil([optManaged.dateObj minOfProperty:@"self"]); [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqualObjects([unmanaged.intObj minOfProperty:@"self"], @2); XCTAssertEqualObjects([unmanaged.floatObj minOfProperty:@"self"], @2.2f); XCTAssertEqualObjects([unmanaged.doubleObj minOfProperty:@"self"], @2.2); XCTAssertEqualObjects([unmanaged.dateObj minOfProperty:@"self"], date(1)); XCTAssertEqualObjects([optUnmanaged.intObj minOfProperty:@"self"], @2); XCTAssertEqualObjects([optUnmanaged.floatObj minOfProperty:@"self"], @2.2f); XCTAssertEqualObjects([optUnmanaged.doubleObj minOfProperty:@"self"], @2.2); XCTAssertEqualObjects([optUnmanaged.dateObj minOfProperty:@"self"], date(1)); XCTAssertEqualObjects([managed.intObj minOfProperty:@"self"], @2); XCTAssertEqualObjects([managed.floatObj minOfProperty:@"self"], @2.2f); XCTAssertEqualObjects([managed.doubleObj minOfProperty:@"self"], @2.2); XCTAssertEqualObjects([managed.dateObj minOfProperty:@"self"], date(1)); XCTAssertEqualObjects([optManaged.intObj minOfProperty:@"self"], @2); XCTAssertEqualObjects([optManaged.floatObj minOfProperty:@"self"], @2.2f); XCTAssertEqualObjects([optManaged.doubleObj minOfProperty:@"self"], @2.2); XCTAssertEqualObjects([optManaged.dateObj minOfProperty:@"self"], date(1)); } - (void)testMax { RLMAssertThrowsWithReason([unmanaged.boolObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for bool array"); RLMAssertThrowsWithReason([unmanaged.stringObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for string array"); RLMAssertThrowsWithReason([unmanaged.dataObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for data array"); RLMAssertThrowsWithReason([optUnmanaged.boolObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for bool? array"); RLMAssertThrowsWithReason([optUnmanaged.stringObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for string? array"); RLMAssertThrowsWithReason([optUnmanaged.dataObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for data? array"); RLMAssertThrowsWithReason([managed.boolObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for bool array 'AllPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([managed.stringObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for string array 'AllPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([managed.dataObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for data array 'AllPrimitiveArrays.dataObj'"); RLMAssertThrowsWithReason([optManaged.boolObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for bool? array 'AllOptionalPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([optManaged.stringObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for string? array 'AllOptionalPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([optManaged.dataObj maxOfProperty:@"self"], @"maxOfProperty: is not supported for data? array 'AllOptionalPrimitiveArrays.dataObj'"); XCTAssertNil([unmanaged.intObj maxOfProperty:@"self"]); XCTAssertNil([unmanaged.floatObj maxOfProperty:@"self"]); XCTAssertNil([unmanaged.doubleObj maxOfProperty:@"self"]); XCTAssertNil([unmanaged.dateObj maxOfProperty:@"self"]); XCTAssertNil([optUnmanaged.intObj maxOfProperty:@"self"]); XCTAssertNil([optUnmanaged.floatObj maxOfProperty:@"self"]); XCTAssertNil([optUnmanaged.doubleObj maxOfProperty:@"self"]); XCTAssertNil([optUnmanaged.dateObj maxOfProperty:@"self"]); XCTAssertNil([managed.intObj maxOfProperty:@"self"]); XCTAssertNil([managed.floatObj maxOfProperty:@"self"]); XCTAssertNil([managed.doubleObj maxOfProperty:@"self"]); XCTAssertNil([managed.dateObj maxOfProperty:@"self"]); XCTAssertNil([optManaged.intObj maxOfProperty:@"self"]); XCTAssertNil([optManaged.floatObj maxOfProperty:@"self"]); XCTAssertNil([optManaged.doubleObj maxOfProperty:@"self"]); XCTAssertNil([optManaged.dateObj maxOfProperty:@"self"]); [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqualObjects([unmanaged.intObj maxOfProperty:@"self"], @3); XCTAssertEqualObjects([unmanaged.floatObj maxOfProperty:@"self"], @3.3f); XCTAssertEqualObjects([unmanaged.doubleObj maxOfProperty:@"self"], @3.3); XCTAssertEqualObjects([unmanaged.dateObj maxOfProperty:@"self"], date(2)); XCTAssertEqualObjects([optUnmanaged.intObj maxOfProperty:@"self"], @3); XCTAssertEqualObjects([optUnmanaged.floatObj maxOfProperty:@"self"], @3.3f); XCTAssertEqualObjects([optUnmanaged.doubleObj maxOfProperty:@"self"], @3.3); XCTAssertEqualObjects([optUnmanaged.dateObj maxOfProperty:@"self"], date(2)); XCTAssertEqualObjects([managed.intObj maxOfProperty:@"self"], @3); XCTAssertEqualObjects([managed.floatObj maxOfProperty:@"self"], @3.3f); XCTAssertEqualObjects([managed.doubleObj maxOfProperty:@"self"], @3.3); XCTAssertEqualObjects([managed.dateObj maxOfProperty:@"self"], date(2)); XCTAssertEqualObjects([optManaged.intObj maxOfProperty:@"self"], @3); XCTAssertEqualObjects([optManaged.floatObj maxOfProperty:@"self"], @3.3f); XCTAssertEqualObjects([optManaged.doubleObj maxOfProperty:@"self"], @3.3); XCTAssertEqualObjects([optManaged.dateObj maxOfProperty:@"self"], date(2)); } - (void)testSum { RLMAssertThrowsWithReason([unmanaged.boolObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for bool array"); RLMAssertThrowsWithReason([unmanaged.stringObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for string array"); RLMAssertThrowsWithReason([unmanaged.dataObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for data array"); RLMAssertThrowsWithReason([unmanaged.dateObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for date array"); RLMAssertThrowsWithReason([optUnmanaged.boolObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for bool? array"); RLMAssertThrowsWithReason([optUnmanaged.stringObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for string? array"); RLMAssertThrowsWithReason([optUnmanaged.dataObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for data? array"); RLMAssertThrowsWithReason([optUnmanaged.dateObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for date? array"); RLMAssertThrowsWithReason([managed.boolObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for bool array 'AllPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([managed.stringObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for string array 'AllPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([managed.dataObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for data array 'AllPrimitiveArrays.dataObj'"); RLMAssertThrowsWithReason([managed.dateObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for date array 'AllPrimitiveArrays.dateObj'"); RLMAssertThrowsWithReason([optManaged.boolObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for bool? array 'AllOptionalPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([optManaged.stringObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for string? array 'AllOptionalPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([optManaged.dataObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for data? array 'AllOptionalPrimitiveArrays.dataObj'"); RLMAssertThrowsWithReason([optManaged.dateObj sumOfProperty:@"self"], @"sumOfProperty: is not supported for date? array 'AllOptionalPrimitiveArrays.dateObj'"); XCTAssertEqualObjects([unmanaged.intObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([unmanaged.floatObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([unmanaged.doubleObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([optUnmanaged.intObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([optUnmanaged.floatObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([optUnmanaged.doubleObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([managed.intObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([managed.floatObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([managed.doubleObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([optManaged.intObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([optManaged.floatObj sumOfProperty:@"self"], @0); XCTAssertEqualObjects([optManaged.doubleObj sumOfProperty:@"self"], @0); [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; XCTAssertEqualObjects([unmanaged.intObj sumOfProperty:@"self"], @(2 + 3)); XCTAssertEqualObjects([unmanaged.floatObj sumOfProperty:@"self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([unmanaged.doubleObj sumOfProperty:@"self"], @(2.2 + 3.3)); XCTAssertEqualObjects([optUnmanaged.intObj sumOfProperty:@"self"], @(2 + 3)); XCTAssertEqualObjects([optUnmanaged.floatObj sumOfProperty:@"self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([optUnmanaged.doubleObj sumOfProperty:@"self"], @(2.2 + 3.3)); XCTAssertEqualObjects([managed.intObj sumOfProperty:@"self"], @(2 + 3)); XCTAssertEqualObjects([managed.floatObj sumOfProperty:@"self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([managed.doubleObj sumOfProperty:@"self"], @(2.2 + 3.3)); XCTAssertEqualObjects([optManaged.intObj sumOfProperty:@"self"], @(2 + 3)); XCTAssertEqualObjects([optManaged.floatObj sumOfProperty:@"self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([optManaged.doubleObj sumOfProperty:@"self"], @(2.2 + 3.3)); } - (void)testAverage { RLMAssertThrowsWithReason([unmanaged.boolObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for bool array"); RLMAssertThrowsWithReason([unmanaged.stringObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for string array"); RLMAssertThrowsWithReason([unmanaged.dataObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for data array"); RLMAssertThrowsWithReason([unmanaged.dateObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for date array"); RLMAssertThrowsWithReason([optUnmanaged.boolObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for bool? array"); RLMAssertThrowsWithReason([optUnmanaged.stringObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for string? array"); RLMAssertThrowsWithReason([optUnmanaged.dataObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for data? array"); RLMAssertThrowsWithReason([optUnmanaged.dateObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for date? array"); RLMAssertThrowsWithReason([managed.boolObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for bool array 'AllPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([managed.stringObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for string array 'AllPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([managed.dataObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for data array 'AllPrimitiveArrays.dataObj'"); RLMAssertThrowsWithReason([managed.dateObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for date array 'AllPrimitiveArrays.dateObj'"); RLMAssertThrowsWithReason([optManaged.boolObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for bool? array 'AllOptionalPrimitiveArrays.boolObj'"); RLMAssertThrowsWithReason([optManaged.stringObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for string? array 'AllOptionalPrimitiveArrays.stringObj'"); RLMAssertThrowsWithReason([optManaged.dataObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for data? array 'AllOptionalPrimitiveArrays.dataObj'"); RLMAssertThrowsWithReason([optManaged.dateObj averageOfProperty:@"self"], @"averageOfProperty: is not supported for date? array 'AllOptionalPrimitiveArrays.dateObj'"); XCTAssertNil([unmanaged.intObj averageOfProperty:@"self"]); XCTAssertNil([unmanaged.floatObj averageOfProperty:@"self"]); XCTAssertNil([unmanaged.doubleObj averageOfProperty:@"self"]); XCTAssertNil([optUnmanaged.intObj averageOfProperty:@"self"]); XCTAssertNil([optUnmanaged.floatObj averageOfProperty:@"self"]); XCTAssertNil([optUnmanaged.doubleObj averageOfProperty:@"self"]); XCTAssertNil([managed.intObj averageOfProperty:@"self"]); XCTAssertNil([managed.floatObj averageOfProperty:@"self"]); XCTAssertNil([managed.doubleObj averageOfProperty:@"self"]); XCTAssertNil([optManaged.intObj averageOfProperty:@"self"]); XCTAssertNil([optManaged.floatObj averageOfProperty:@"self"]); XCTAssertNil([optManaged.doubleObj averageOfProperty:@"self"]); [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; XCTAssertEqualWithAccuracy([unmanaged.intObj averageOfProperty:@"self"].doubleValue, (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([unmanaged.floatObj averageOfProperty:@"self"].doubleValue, (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([unmanaged.doubleObj averageOfProperty:@"self"].doubleValue, (2.2 + 3.3) / 2.0, .001); XCTAssertEqualWithAccuracy([optUnmanaged.intObj averageOfProperty:@"self"].doubleValue, (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([optUnmanaged.floatObj averageOfProperty:@"self"].doubleValue, (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([optUnmanaged.doubleObj averageOfProperty:@"self"].doubleValue, (2.2 + 3.3) / 2.0, .001); XCTAssertEqualWithAccuracy([managed.intObj averageOfProperty:@"self"].doubleValue, (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([managed.floatObj averageOfProperty:@"self"].doubleValue, (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([managed.doubleObj averageOfProperty:@"self"].doubleValue, (2.2 + 3.3) / 2.0, .001); XCTAssertEqualWithAccuracy([optManaged.intObj averageOfProperty:@"self"].doubleValue, (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([optManaged.floatObj averageOfProperty:@"self"].doubleValue, (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([optManaged.doubleObj averageOfProperty:@"self"].doubleValue, (2.2 + 3.3) / 2.0, .001); } - (void)testFastEnumeration { for (int i = 0; i < 10; ++i) { [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; } { NSUInteger i = 0; NSArray *values = @[@NO, @YES]; for (id value in unmanaged.boolObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, unmanaged.boolObj.count); } { NSUInteger i = 0; NSArray *values = @[@2, @3]; for (id value in unmanaged.intObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, unmanaged.intObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2f, @3.3f]; for (id value in unmanaged.floatObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, unmanaged.floatObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2, @3.3]; for (id value in unmanaged.doubleObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, unmanaged.doubleObj.count); } { NSUInteger i = 0; NSArray *values = @[@"a", @"b"]; for (id value in unmanaged.stringObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, unmanaged.stringObj.count); } { NSUInteger i = 0; NSArray *values = @[data(1), data(2)]; for (id value in unmanaged.dataObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, unmanaged.dataObj.count); } { NSUInteger i = 0; NSArray *values = @[date(1), date(2)]; for (id value in unmanaged.dateObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, unmanaged.dateObj.count); } { NSUInteger i = 0; NSArray *values = @[@NO, @YES, NSNull.null]; for (id value in optUnmanaged.boolObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optUnmanaged.boolObj.count); } { NSUInteger i = 0; NSArray *values = @[@2, @3, NSNull.null]; for (id value in optUnmanaged.intObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optUnmanaged.intObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2f, @3.3f, NSNull.null]; for (id value in optUnmanaged.floatObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optUnmanaged.floatObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2, @3.3, NSNull.null]; for (id value in optUnmanaged.doubleObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optUnmanaged.doubleObj.count); } { NSUInteger i = 0; NSArray *values = @[@"a", @"b", NSNull.null]; for (id value in optUnmanaged.stringObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optUnmanaged.stringObj.count); } { NSUInteger i = 0; NSArray *values = @[data(1), data(2), NSNull.null]; for (id value in optUnmanaged.dataObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optUnmanaged.dataObj.count); } { NSUInteger i = 0; NSArray *values = @[date(1), date(2), NSNull.null]; for (id value in optUnmanaged.dateObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optUnmanaged.dateObj.count); } { NSUInteger i = 0; NSArray *values = @[@NO, @YES]; for (id value in managed.boolObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, managed.boolObj.count); } { NSUInteger i = 0; NSArray *values = @[@2, @3]; for (id value in managed.intObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, managed.intObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2f, @3.3f]; for (id value in managed.floatObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, managed.floatObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2, @3.3]; for (id value in managed.doubleObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, managed.doubleObj.count); } { NSUInteger i = 0; NSArray *values = @[@"a", @"b"]; for (id value in managed.stringObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, managed.stringObj.count); } { NSUInteger i = 0; NSArray *values = @[data(1), data(2)]; for (id value in managed.dataObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, managed.dataObj.count); } { NSUInteger i = 0; NSArray *values = @[date(1), date(2)]; for (id value in managed.dateObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, managed.dateObj.count); } { NSUInteger i = 0; NSArray *values = @[@NO, @YES, NSNull.null]; for (id value in optManaged.boolObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optManaged.boolObj.count); } { NSUInteger i = 0; NSArray *values = @[@2, @3, NSNull.null]; for (id value in optManaged.intObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optManaged.intObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2f, @3.3f, NSNull.null]; for (id value in optManaged.floatObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optManaged.floatObj.count); } { NSUInteger i = 0; NSArray *values = @[@2.2, @3.3, NSNull.null]; for (id value in optManaged.doubleObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optManaged.doubleObj.count); } { NSUInteger i = 0; NSArray *values = @[@"a", @"b", NSNull.null]; for (id value in optManaged.stringObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optManaged.stringObj.count); } { NSUInteger i = 0; NSArray *values = @[data(1), data(2), NSNull.null]; for (id value in optManaged.dataObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optManaged.dataObj.count); } { NSUInteger i = 0; NSArray *values = @[date(1), date(2), NSNull.null]; for (id value in optManaged.dateObj) { XCTAssertEqualObjects(values[i++ % values.count], value); } XCTAssertEqual(i, optManaged.dateObj.count); } } - (void)testValueForKeySelf { XCTAssertEqualObjects([unmanaged.boolObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([unmanaged.floatObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([unmanaged.doubleObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([unmanaged.dataObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([unmanaged.dateObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optUnmanaged.intObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([managed.boolObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([managed.intObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([managed.floatObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([managed.doubleObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([managed.stringObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([managed.dataObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([managed.dateObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optManaged.boolObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optManaged.intObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optManaged.floatObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optManaged.doubleObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optManaged.stringObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optManaged.dataObj valueForKey:@"self"], @[]); XCTAssertEqualObjects([optManaged.dateObj valueForKey:@"self"], @[]); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqualObjects([unmanaged.boolObj valueForKey:@"self"], (@[@NO, @YES])); XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"self"], (@[@2, @3])); XCTAssertEqualObjects([unmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f])); XCTAssertEqualObjects([unmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3])); XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"self"], (@[@"a", @"b"])); XCTAssertEqualObjects([unmanaged.dataObj valueForKey:@"self"], (@[data(1), data(2)])); XCTAssertEqualObjects([unmanaged.dateObj valueForKey:@"self"], (@[date(1), date(2)])); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.intObj valueForKey:@"self"], (@[@2, @3, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); XCTAssertEqualObjects([managed.boolObj valueForKey:@"self"], (@[@NO, @YES])); XCTAssertEqualObjects([managed.intObj valueForKey:@"self"], (@[@2, @3])); XCTAssertEqualObjects([managed.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f])); XCTAssertEqualObjects([managed.doubleObj valueForKey:@"self"], (@[@2.2, @3.3])); XCTAssertEqualObjects([managed.stringObj valueForKey:@"self"], (@[@"a", @"b"])); XCTAssertEqualObjects([managed.dataObj valueForKey:@"self"], (@[data(1), data(2)])); XCTAssertEqualObjects([managed.dateObj valueForKey:@"self"], (@[date(1), date(2)])); XCTAssertEqualObjects([optManaged.boolObj valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); XCTAssertEqualObjects([optManaged.intObj valueForKey:@"self"], (@[@2, @3, NSNull.null])); XCTAssertEqualObjects([optManaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects([optManaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); XCTAssertEqualObjects([optManaged.stringObj valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); XCTAssertEqualObjects([optManaged.dataObj valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); XCTAssertEqualObjects([optManaged.dateObj valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); } - (void)testValueForKeyNumericAggregates { XCTAssertNil([unmanaged.intObj valueForKeyPath:@"@min.self"]); XCTAssertNil([unmanaged.floatObj valueForKeyPath:@"@min.self"]); XCTAssertNil([unmanaged.doubleObj valueForKeyPath:@"@min.self"]); XCTAssertNil([unmanaged.dateObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optUnmanaged.intObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optUnmanaged.floatObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optUnmanaged.doubleObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optUnmanaged.dateObj valueForKeyPath:@"@min.self"]); XCTAssertNil([managed.intObj valueForKeyPath:@"@min.self"]); XCTAssertNil([managed.floatObj valueForKeyPath:@"@min.self"]); XCTAssertNil([managed.doubleObj valueForKeyPath:@"@min.self"]); XCTAssertNil([managed.dateObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optManaged.intObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optManaged.floatObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optManaged.doubleObj valueForKeyPath:@"@min.self"]); XCTAssertNil([optManaged.dateObj valueForKeyPath:@"@min.self"]); XCTAssertNil([unmanaged.intObj valueForKeyPath:@"@max.self"]); XCTAssertNil([unmanaged.floatObj valueForKeyPath:@"@max.self"]); XCTAssertNil([unmanaged.doubleObj valueForKeyPath:@"@max.self"]); XCTAssertNil([unmanaged.dateObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optUnmanaged.intObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optUnmanaged.floatObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optUnmanaged.doubleObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optUnmanaged.dateObj valueForKeyPath:@"@max.self"]); XCTAssertNil([managed.intObj valueForKeyPath:@"@max.self"]); XCTAssertNil([managed.floatObj valueForKeyPath:@"@max.self"]); XCTAssertNil([managed.doubleObj valueForKeyPath:@"@max.self"]); XCTAssertNil([managed.dateObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optManaged.intObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optManaged.floatObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optManaged.doubleObj valueForKeyPath:@"@max.self"]); XCTAssertNil([optManaged.dateObj valueForKeyPath:@"@max.self"]); XCTAssertEqualObjects([unmanaged.intObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([unmanaged.floatObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([unmanaged.doubleObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([optUnmanaged.intObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([managed.intObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([managed.floatObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([managed.doubleObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([optManaged.intObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([optManaged.floatObj valueForKeyPath:@"@sum.self"], @0); XCTAssertEqualObjects([optManaged.doubleObj valueForKeyPath:@"@sum.self"], @0); XCTAssertNil([unmanaged.intObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([unmanaged.floatObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([unmanaged.doubleObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([optUnmanaged.intObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([optUnmanaged.floatObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([optUnmanaged.doubleObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([managed.intObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([managed.floatObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([managed.doubleObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([optManaged.intObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([optManaged.floatObj valueForKeyPath:@"@avg.self"]); XCTAssertNil([optManaged.doubleObj valueForKeyPath:@"@avg.self"]); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; XCTAssertEqualObjects([unmanaged.intObj valueForKeyPath:@"@min.self"], @2); XCTAssertEqualObjects([unmanaged.floatObj valueForKeyPath:@"@min.self"], @2.2f); XCTAssertEqualObjects([unmanaged.doubleObj valueForKeyPath:@"@min.self"], @2.2); XCTAssertEqualObjects([unmanaged.dateObj valueForKeyPath:@"@min.self"], date(1)); XCTAssertEqualObjects([optUnmanaged.intObj valueForKeyPath:@"@min.self"], @2); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKeyPath:@"@min.self"], @2.2f); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKeyPath:@"@min.self"], @2.2); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKeyPath:@"@min.self"], date(1)); XCTAssertEqualObjects([managed.intObj valueForKeyPath:@"@min.self"], @2); XCTAssertEqualObjects([managed.floatObj valueForKeyPath:@"@min.self"], @2.2f); XCTAssertEqualObjects([managed.doubleObj valueForKeyPath:@"@min.self"], @2.2); XCTAssertEqualObjects([managed.dateObj valueForKeyPath:@"@min.self"], date(1)); XCTAssertEqualObjects([optManaged.intObj valueForKeyPath:@"@min.self"], @2); XCTAssertEqualObjects([optManaged.floatObj valueForKeyPath:@"@min.self"], @2.2f); XCTAssertEqualObjects([optManaged.doubleObj valueForKeyPath:@"@min.self"], @2.2); XCTAssertEqualObjects([optManaged.dateObj valueForKeyPath:@"@min.self"], date(1)); XCTAssertEqualObjects([unmanaged.intObj valueForKeyPath:@"@max.self"], @3); XCTAssertEqualObjects([unmanaged.floatObj valueForKeyPath:@"@max.self"], @3.3f); XCTAssertEqualObjects([unmanaged.doubleObj valueForKeyPath:@"@max.self"], @3.3); XCTAssertEqualObjects([unmanaged.dateObj valueForKeyPath:@"@max.self"], date(2)); XCTAssertEqualObjects([optUnmanaged.intObj valueForKeyPath:@"@max.self"], @3); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKeyPath:@"@max.self"], @3.3f); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKeyPath:@"@max.self"], @3.3); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKeyPath:@"@max.self"], date(2)); XCTAssertEqualObjects([managed.intObj valueForKeyPath:@"@max.self"], @3); XCTAssertEqualObjects([managed.floatObj valueForKeyPath:@"@max.self"], @3.3f); XCTAssertEqualObjects([managed.doubleObj valueForKeyPath:@"@max.self"], @3.3); XCTAssertEqualObjects([managed.dateObj valueForKeyPath:@"@max.self"], date(2)); XCTAssertEqualObjects([optManaged.intObj valueForKeyPath:@"@max.self"], @3); XCTAssertEqualObjects([optManaged.floatObj valueForKeyPath:@"@max.self"], @3.3f); XCTAssertEqualObjects([optManaged.doubleObj valueForKeyPath:@"@max.self"], @3.3); XCTAssertEqualObjects([optManaged.dateObj valueForKeyPath:@"@max.self"], date(2)); XCTAssertEqualObjects([unmanaged.intObj valueForKeyPath:@"@sum.self"], @(2 + 3)); XCTAssertEqualObjects([unmanaged.floatObj valueForKeyPath:@"@sum.self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([unmanaged.doubleObj valueForKeyPath:@"@sum.self"], @(2.2 + 3.3)); XCTAssertEqualObjects([optUnmanaged.intObj valueForKeyPath:@"@sum.self"], @(2 + 3)); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKeyPath:@"@sum.self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKeyPath:@"@sum.self"], @(2.2 + 3.3)); XCTAssertEqualObjects([managed.intObj valueForKeyPath:@"@sum.self"], @(2 + 3)); XCTAssertEqualObjects([managed.floatObj valueForKeyPath:@"@sum.self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([managed.doubleObj valueForKeyPath:@"@sum.self"], @(2.2 + 3.3)); XCTAssertEqualObjects([optManaged.intObj valueForKeyPath:@"@sum.self"], @(2 + 3)); XCTAssertEqualObjects([optManaged.floatObj valueForKeyPath:@"@sum.self"], @(2.2f + 3.3f)); XCTAssertEqualObjects([optManaged.doubleObj valueForKeyPath:@"@sum.self"], @(2.2 + 3.3)); XCTAssertEqualWithAccuracy([[unmanaged.intObj valueForKeyPath:@"@avg.self"] doubleValue], (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([[unmanaged.floatObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([[unmanaged.doubleObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2 + 3.3) / 2.0, .001); XCTAssertEqualWithAccuracy([[optUnmanaged.intObj valueForKeyPath:@"@avg.self"] doubleValue], (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([[optUnmanaged.floatObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([[optUnmanaged.doubleObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2 + 3.3) / 2.0, .001); XCTAssertEqualWithAccuracy([[managed.intObj valueForKeyPath:@"@avg.self"] doubleValue], (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([[managed.floatObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([[managed.doubleObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2 + 3.3) / 2.0, .001); XCTAssertEqualWithAccuracy([[optManaged.intObj valueForKeyPath:@"@avg.self"] doubleValue], (2 + 3) / 2.0, .001); XCTAssertEqualWithAccuracy([[optManaged.floatObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2f + 3.3f) / 2.0, .001); XCTAssertEqualWithAccuracy([[optManaged.doubleObj valueForKeyPath:@"@avg.self"] doubleValue], (2.2 + 3.3) / 2.0, .001); } - (void)testValueForKeyLength { XCTAssertEqualObjects([unmanaged.boolObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([unmanaged.floatObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([unmanaged.doubleObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([unmanaged.dataObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([unmanaged.dateObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optUnmanaged.intObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([managed.boolObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([managed.intObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([managed.floatObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([managed.doubleObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([managed.stringObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([managed.dataObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([managed.dateObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optManaged.boolObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optManaged.intObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optManaged.floatObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optManaged.doubleObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optManaged.stringObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optManaged.dataObj valueForKey:@"length"], @[]); XCTAssertEqualObjects([optManaged.dateObj valueForKey:@"length"], @[]); [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [managed.stringObj addObjects:@[@"a", @"b"]]; XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"length"], ([@[@"a", @"b"] valueForKey:@"length"])); XCTAssertEqualObjects([managed.stringObj valueForKey:@"length"], ([@[@"a", @"b"] valueForKey:@"length"])); } // Sort the distinct results to match the order used in values, as it // doesn't preserve the order naturally static NSArray *sortedDistinctUnion(id array, NSString *type, NSString *prop) { return [[array valueForKeyPath:[NSString stringWithFormat:@"@distinctUnionOf%@.%@", type, prop]] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { bool aIsNull = a == NSNull.null; bool bIsNull = b == NSNull.null; if (aIsNull && bIsNull) { return 0; } if (aIsNull) { return 1; } if (bIsNull) { return -1; } if ([a isKindOfClass:[NSData class]]) { if ([a length] != [b length]) { return [a length] < [b length] ? -1 : 1; } int result = memcmp([a bytes], [b bytes], [a length]); if (!result) { return 0; } return result < 0 ? -1 : 1; } return [a compare:b]; }]; } - (void)testUnionOfObjects { XCTAssertEqualObjects([unmanaged.boolObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.intObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.floatObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.doubleObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.stringObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.dataObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.dateObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.intObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.boolObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.intObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.floatObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.doubleObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.stringObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.dataObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.dateObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.boolObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.intObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.floatObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.doubleObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.stringObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.dataObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.dateObj valueForKeyPath:@"@unionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.boolObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.intObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.floatObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.doubleObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.stringObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.dataObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([unmanaged.dateObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.intObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.boolObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.intObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.floatObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.doubleObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.stringObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.dataObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([managed.dateObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.boolObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.intObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.floatObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.doubleObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.stringObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.dataObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); XCTAssertEqualObjects([optManaged.dateObj valueForKeyPath:@"@distinctUnionOfObjects.self"], @[]); [unmanaged.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3, @2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null, @NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null, @2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null, @2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null, @2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null, @"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null, data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null, date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES, @NO, @YES]]; [managed.intObj addObjects:@[@2, @3, @2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f, @2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3, @2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b", @"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2), data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2), date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null, @NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null, @2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null, @2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null, @2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null, @"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null, data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null, date(1), date(2), NSNull.null]]; XCTAssertEqualObjects([unmanaged.boolObj valueForKeyPath:@"@unionOfObjects.self"], (@[@NO, @YES, @NO, @YES])); XCTAssertEqualObjects([unmanaged.intObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2, @3, @2, @3])); XCTAssertEqualObjects([unmanaged.floatObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2f, @3.3f, @2.2f, @3.3f])); XCTAssertEqualObjects([unmanaged.doubleObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2, @3.3, @2.2, @3.3])); XCTAssertEqualObjects([unmanaged.stringObj valueForKeyPath:@"@unionOfObjects.self"], (@[@"a", @"b", @"a", @"b"])); XCTAssertEqualObjects([unmanaged.dataObj valueForKeyPath:@"@unionOfObjects.self"], (@[data(1), data(2), data(1), data(2)])); XCTAssertEqualObjects([unmanaged.dateObj valueForKeyPath:@"@unionOfObjects.self"], (@[date(1), date(2), date(1), date(2)])); XCTAssertEqualObjects([optUnmanaged.boolObj valueForKeyPath:@"@unionOfObjects.self"], (@[@NO, @YES, NSNull.null, @NO, @YES, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.intObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2, @3, NSNull.null, @2, @3, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.floatObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2f, @3.3f, NSNull.null, @2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2, @3.3, NSNull.null, @2.2, @3.3, NSNull.null])); XCTAssertEqualObjects([optUnmanaged.stringObj valueForKeyPath:@"@unionOfObjects.self"], (@[@"a", @"b", NSNull.null, @"a", @"b", NSNull.null])); XCTAssertEqualObjects([optUnmanaged.dataObj valueForKeyPath:@"@unionOfObjects.self"], (@[data(1), data(2), NSNull.null, data(1), data(2), NSNull.null])); XCTAssertEqualObjects([optUnmanaged.dateObj valueForKeyPath:@"@unionOfObjects.self"], (@[date(1), date(2), NSNull.null, date(1), date(2), NSNull.null])); XCTAssertEqualObjects([managed.boolObj valueForKeyPath:@"@unionOfObjects.self"], (@[@NO, @YES, @NO, @YES])); XCTAssertEqualObjects([managed.intObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2, @3, @2, @3])); XCTAssertEqualObjects([managed.floatObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2f, @3.3f, @2.2f, @3.3f])); XCTAssertEqualObjects([managed.doubleObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2, @3.3, @2.2, @3.3])); XCTAssertEqualObjects([managed.stringObj valueForKeyPath:@"@unionOfObjects.self"], (@[@"a", @"b", @"a", @"b"])); XCTAssertEqualObjects([managed.dataObj valueForKeyPath:@"@unionOfObjects.self"], (@[data(1), data(2), data(1), data(2)])); XCTAssertEqualObjects([managed.dateObj valueForKeyPath:@"@unionOfObjects.self"], (@[date(1), date(2), date(1), date(2)])); XCTAssertEqualObjects([optManaged.boolObj valueForKeyPath:@"@unionOfObjects.self"], (@[@NO, @YES, NSNull.null, @NO, @YES, NSNull.null])); XCTAssertEqualObjects([optManaged.intObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2, @3, NSNull.null, @2, @3, NSNull.null])); XCTAssertEqualObjects([optManaged.floatObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2f, @3.3f, NSNull.null, @2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects([optManaged.doubleObj valueForKeyPath:@"@unionOfObjects.self"], (@[@2.2, @3.3, NSNull.null, @2.2, @3.3, NSNull.null])); XCTAssertEqualObjects([optManaged.stringObj valueForKeyPath:@"@unionOfObjects.self"], (@[@"a", @"b", NSNull.null, @"a", @"b", NSNull.null])); XCTAssertEqualObjects([optManaged.dataObj valueForKeyPath:@"@unionOfObjects.self"], (@[data(1), data(2), NSNull.null, data(1), data(2), NSNull.null])); XCTAssertEqualObjects([optManaged.dateObj valueForKeyPath:@"@unionOfObjects.self"], (@[date(1), date(2), NSNull.null, date(1), date(2), NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(unmanaged.boolObj, @"Objects", @"self"), (@[@NO, @YES])); XCTAssertEqualObjects(sortedDistinctUnion(unmanaged.intObj, @"Objects", @"self"), (@[@2, @3])); XCTAssertEqualObjects(sortedDistinctUnion(unmanaged.floatObj, @"Objects", @"self"), (@[@2.2f, @3.3f])); XCTAssertEqualObjects(sortedDistinctUnion(unmanaged.doubleObj, @"Objects", @"self"), (@[@2.2, @3.3])); XCTAssertEqualObjects(sortedDistinctUnion(unmanaged.stringObj, @"Objects", @"self"), (@[@"a", @"b"])); XCTAssertEqualObjects(sortedDistinctUnion(unmanaged.dataObj, @"Objects", @"self"), (@[data(1), data(2)])); XCTAssertEqualObjects(sortedDistinctUnion(unmanaged.dateObj, @"Objects", @"self"), (@[date(1), date(2)])); XCTAssertEqualObjects(sortedDistinctUnion(optUnmanaged.boolObj, @"Objects", @"self"), (@[@NO, @YES, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optUnmanaged.intObj, @"Objects", @"self"), (@[@2, @3, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optUnmanaged.floatObj, @"Objects", @"self"), (@[@2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optUnmanaged.doubleObj, @"Objects", @"self"), (@[@2.2, @3.3, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optUnmanaged.stringObj, @"Objects", @"self"), (@[@"a", @"b", NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optUnmanaged.dataObj, @"Objects", @"self"), (@[data(1), data(2), NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optUnmanaged.dateObj, @"Objects", @"self"), (@[date(1), date(2), NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(managed.boolObj, @"Objects", @"self"), (@[@NO, @YES])); XCTAssertEqualObjects(sortedDistinctUnion(managed.intObj, @"Objects", @"self"), (@[@2, @3])); XCTAssertEqualObjects(sortedDistinctUnion(managed.floatObj, @"Objects", @"self"), (@[@2.2f, @3.3f])); XCTAssertEqualObjects(sortedDistinctUnion(managed.doubleObj, @"Objects", @"self"), (@[@2.2, @3.3])); XCTAssertEqualObjects(sortedDistinctUnion(managed.stringObj, @"Objects", @"self"), (@[@"a", @"b"])); XCTAssertEqualObjects(sortedDistinctUnion(managed.dataObj, @"Objects", @"self"), (@[data(1), data(2)])); XCTAssertEqualObjects(sortedDistinctUnion(managed.dateObj, @"Objects", @"self"), (@[date(1), date(2)])); XCTAssertEqualObjects(sortedDistinctUnion(optManaged.boolObj, @"Objects", @"self"), (@[@NO, @YES, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optManaged.intObj, @"Objects", @"self"), (@[@2, @3, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optManaged.floatObj, @"Objects", @"self"), (@[@2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optManaged.doubleObj, @"Objects", @"self"), (@[@2.2, @3.3, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optManaged.stringObj, @"Objects", @"self"), (@[@"a", @"b", NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optManaged.dataObj, @"Objects", @"self"), (@[data(1), data(2), NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(optManaged.dateObj, @"Objects", @"self"), (@[date(1), date(2), NSNull.null])); } - (void)testUnionOfArrays { RLMResults *allRequired = [AllPrimitiveArrays allObjectsInRealm:realm]; RLMResults *allOptional = [AllOptionalPrimitiveArrays allObjectsInRealm:realm]; XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.boolObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.intObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.floatObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.doubleObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.stringObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.dataObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.dateObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.boolObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.intObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.floatObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.doubleObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.stringObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.dataObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.dateObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@distinctUnionOfArrays.boolObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@distinctUnionOfArrays.intObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@distinctUnionOfArrays.floatObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@distinctUnionOfArrays.doubleObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@distinctUnionOfArrays.stringObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@distinctUnionOfArrays.dataObj"], @[]); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@distinctUnionOfArrays.dateObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@distinctUnionOfArrays.boolObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@distinctUnionOfArrays.intObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@distinctUnionOfArrays.floatObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@distinctUnionOfArrays.doubleObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@distinctUnionOfArrays.stringObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@distinctUnionOfArrays.dataObj"], @[]); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@distinctUnionOfArrays.dateObj"], @[]); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [AllPrimitiveArrays createInRealm:realm withValue:managed]; [AllOptionalPrimitiveArrays createInRealm:realm withValue:optManaged]; XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.boolObj"], (@[@NO, @YES, @NO, @YES])); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.intObj"], (@[@2, @3, @2, @3])); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.floatObj"], (@[@2.2f, @3.3f, @2.2f, @3.3f])); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.doubleObj"], (@[@2.2, @3.3, @2.2, @3.3])); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.stringObj"], (@[@"a", @"b", @"a", @"b"])); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.dataObj"], (@[data(1), data(2), data(1), data(2)])); XCTAssertEqualObjects([allRequired valueForKeyPath:@"@unionOfArrays.dateObj"], (@[date(1), date(2), date(1), date(2)])); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.boolObj"], (@[@NO, @YES, NSNull.null, @NO, @YES, NSNull.null])); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.intObj"], (@[@2, @3, NSNull.null, @2, @3, NSNull.null])); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.floatObj"], (@[@2.2f, @3.3f, NSNull.null, @2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.doubleObj"], (@[@2.2, @3.3, NSNull.null, @2.2, @3.3, NSNull.null])); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.stringObj"], (@[@"a", @"b", NSNull.null, @"a", @"b", NSNull.null])); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.dataObj"], (@[data(1), data(2), NSNull.null, data(1), data(2), NSNull.null])); XCTAssertEqualObjects([allOptional valueForKeyPath:@"@unionOfArrays.dateObj"], (@[date(1), date(2), NSNull.null, date(1), date(2), NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(allRequired, @"Arrays", @"boolObj"), (@[@NO, @YES])); XCTAssertEqualObjects(sortedDistinctUnion(allRequired, @"Arrays", @"intObj"), (@[@2, @3])); XCTAssertEqualObjects(sortedDistinctUnion(allRequired, @"Arrays", @"floatObj"), (@[@2.2f, @3.3f])); XCTAssertEqualObjects(sortedDistinctUnion(allRequired, @"Arrays", @"doubleObj"), (@[@2.2, @3.3])); XCTAssertEqualObjects(sortedDistinctUnion(allRequired, @"Arrays", @"stringObj"), (@[@"a", @"b"])); XCTAssertEqualObjects(sortedDistinctUnion(allRequired, @"Arrays", @"dataObj"), (@[data(1), data(2)])); XCTAssertEqualObjects(sortedDistinctUnion(allRequired, @"Arrays", @"dateObj"), (@[date(1), date(2)])); XCTAssertEqualObjects(sortedDistinctUnion(allOptional, @"Arrays", @"boolObj"), (@[@NO, @YES, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(allOptional, @"Arrays", @"intObj"), (@[@2, @3, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(allOptional, @"Arrays", @"floatObj"), (@[@2.2f, @3.3f, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(allOptional, @"Arrays", @"doubleObj"), (@[@2.2, @3.3, NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(allOptional, @"Arrays", @"stringObj"), (@[@"a", @"b", NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(allOptional, @"Arrays", @"dataObj"), (@[data(1), data(2), NSNull.null])); XCTAssertEqualObjects(sortedDistinctUnion(allOptional, @"Arrays", @"dateObj"), (@[date(1), date(2), NSNull.null])); } - (void)testSetValueForKey { RLMAssertThrowsWithReason([unmanaged.boolObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([unmanaged.intObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([unmanaged.floatObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([unmanaged.doubleObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([unmanaged.stringObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([unmanaged.dataObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([unmanaged.dateObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optUnmanaged.boolObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optUnmanaged.intObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optUnmanaged.floatObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optUnmanaged.doubleObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optUnmanaged.stringObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optUnmanaged.dataObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optUnmanaged.dateObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([managed.boolObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([managed.intObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([managed.floatObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([managed.doubleObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([managed.stringObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([managed.dataObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([managed.dateObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optManaged.boolObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optManaged.intObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optManaged.floatObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optManaged.doubleObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optManaged.stringObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optManaged.dataObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([optManaged.dateObj setValue:@0 forKey:@"not self"], @"this class is not key value coding-compliant for the key not self."); RLMAssertThrowsWithReason([unmanaged.boolObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj setValue:@2 forKey:@"self"], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optUnmanaged.boolObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optUnmanaged.intObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optUnmanaged.floatObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optUnmanaged.doubleObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optUnmanaged.stringObj setValue:@2 forKey:@"self"], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optUnmanaged.dataObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optUnmanaged.dateObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([managed.boolObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj setValue:@2 forKey:@"self"], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date'"); RLMAssertThrowsWithReason([optManaged.boolObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'bool?'"); RLMAssertThrowsWithReason([optManaged.intObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'int?'"); RLMAssertThrowsWithReason([optManaged.floatObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'float?'"); RLMAssertThrowsWithReason([optManaged.doubleObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'double?'"); RLMAssertThrowsWithReason([optManaged.stringObj setValue:@2 forKey:@"self"], @"Invalid value '2' of type '__NSCFNumber' for expected type 'string?'"); RLMAssertThrowsWithReason([optManaged.dataObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'data?'"); RLMAssertThrowsWithReason([optManaged.dateObj setValue:@"a" forKey:@"self"], @"Invalid value 'a' of type '__NSCFConstantString' for expected type 'date?'"); RLMAssertThrowsWithReason([unmanaged.boolObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([unmanaged.intObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([unmanaged.floatObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([unmanaged.doubleObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([unmanaged.stringObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([unmanaged.dataObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([unmanaged.dateObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'date'"); RLMAssertThrowsWithReason([managed.boolObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'bool'"); RLMAssertThrowsWithReason([managed.intObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'int'"); RLMAssertThrowsWithReason([managed.floatObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'float'"); RLMAssertThrowsWithReason([managed.doubleObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'double'"); RLMAssertThrowsWithReason([managed.stringObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'string'"); RLMAssertThrowsWithReason([managed.dataObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'data'"); RLMAssertThrowsWithReason([managed.dateObj setValue:NSNull.null forKey:@"self"], @"Invalid value '' of type 'NSNull' for expected type 'date'"); [unmanaged.boolObj addObjects:@[@NO, @YES]]; [unmanaged.intObj addObjects:@[@2, @3]]; [unmanaged.floatObj addObjects:@[@2.2f, @3.3f]]; [unmanaged.doubleObj addObjects:@[@2.2, @3.3]]; [unmanaged.stringObj addObjects:@[@"a", @"b"]]; [unmanaged.dataObj addObjects:@[data(1), data(2)]]; [unmanaged.dateObj addObjects:@[date(1), date(2)]]; [optUnmanaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optUnmanaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optUnmanaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optUnmanaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optUnmanaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optUnmanaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optUnmanaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [managed.boolObj addObjects:@[@NO, @YES]]; [managed.intObj addObjects:@[@2, @3]]; [managed.floatObj addObjects:@[@2.2f, @3.3f]]; [managed.doubleObj addObjects:@[@2.2, @3.3]]; [managed.stringObj addObjects:@[@"a", @"b"]]; [managed.dataObj addObjects:@[data(1), data(2)]]; [managed.dateObj addObjects:@[date(1), date(2)]]; [optManaged.boolObj addObjects:@[@NO, @YES, NSNull.null]]; [optManaged.intObj addObjects:@[@2, @3, NSNull.null]]; [optManaged.floatObj addObjects:@[@2.2f, @3.3f, NSNull.null]]; [optManaged.doubleObj addObjects:@[@2.2, @3.3, NSNull.null]]; [optManaged.stringObj addObjects:@[@"a", @"b", NSNull.null]]; [optManaged.dataObj addObjects:@[data(1), data(2), NSNull.null]]; [optManaged.dateObj addObjects:@[date(1), date(2), NSNull.null]]; [unmanaged.boolObj setValue:@NO forKey:@"self"]; [unmanaged.intObj setValue:@2 forKey:@"self"]; [unmanaged.floatObj setValue:@2.2f forKey:@"self"]; [unmanaged.doubleObj setValue:@2.2 forKey:@"self"]; [unmanaged.stringObj setValue:@"a" forKey:@"self"]; [unmanaged.dataObj setValue:data(1) forKey:@"self"]; [unmanaged.dateObj setValue:date(1) forKey:@"self"]; [optUnmanaged.boolObj setValue:@NO forKey:@"self"]; [optUnmanaged.intObj setValue:@2 forKey:@"self"]; [optUnmanaged.floatObj setValue:@2.2f forKey:@"self"]; [optUnmanaged.doubleObj setValue:@2.2 forKey:@"self"]; [optUnmanaged.stringObj setValue:@"a" forKey:@"self"]; [optUnmanaged.dataObj setValue:data(1) forKey:@"self"]; [optUnmanaged.dateObj setValue:date(1) forKey:@"self"]; [managed.boolObj setValue:@NO forKey:@"self"]; [managed.intObj setValue:@2 forKey:@"self"]; [managed.floatObj setValue:@2.2f forKey:@"self"]; [managed.doubleObj setValue:@2.2 forKey:@"self"]; [managed.stringObj setValue:@"a" forKey:@"self"]; [managed.dataObj setValue:data(1) forKey:@"self"]; [managed.dateObj setValue:date(1) forKey:@"self"]; [optManaged.boolObj setValue:@NO forKey:@"self"]; [optManaged.intObj setValue:@2 forKey:@"self"]; [optManaged.floatObj setValue:@2.2f forKey:@"self"]; [optManaged.doubleObj setValue:@2.2 forKey:@"self"]; [optManaged.stringObj setValue:@"a" forKey:@"self"]; [optManaged.dataObj setValue:data(1) forKey:@"self"]; [optManaged.dateObj setValue:date(1) forKey:@"self"]; XCTAssertEqualObjects(unmanaged.boolObj[0], @NO); XCTAssertEqualObjects(unmanaged.intObj[0], @2); XCTAssertEqualObjects(unmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(unmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(unmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(unmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[0], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[0], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(1)); XCTAssertEqualObjects(managed.boolObj[0], @NO); XCTAssertEqualObjects(managed.intObj[0], @2); XCTAssertEqualObjects(managed.floatObj[0], @2.2f); XCTAssertEqualObjects(managed.doubleObj[0], @2.2); XCTAssertEqualObjects(managed.stringObj[0], @"a"); XCTAssertEqualObjects(managed.dataObj[0], data(1)); XCTAssertEqualObjects(managed.dateObj[0], date(1)); XCTAssertEqualObjects(optManaged.boolObj[0], @NO); XCTAssertEqualObjects(optManaged.intObj[0], @2); XCTAssertEqualObjects(optManaged.floatObj[0], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[0], @2.2); XCTAssertEqualObjects(optManaged.stringObj[0], @"a"); XCTAssertEqualObjects(optManaged.dataObj[0], data(1)); XCTAssertEqualObjects(optManaged.dateObj[0], date(1)); XCTAssertEqualObjects(unmanaged.boolObj[1], @NO); XCTAssertEqualObjects(unmanaged.intObj[1], @2); XCTAssertEqualObjects(unmanaged.floatObj[1], @2.2f); XCTAssertEqualObjects(unmanaged.doubleObj[1], @2.2); XCTAssertEqualObjects(unmanaged.stringObj[1], @"a"); XCTAssertEqualObjects(unmanaged.dataObj[1], data(1)); XCTAssertEqualObjects(unmanaged.dateObj[1], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[1], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[1], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[1], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[1], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[1], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[1], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[1], date(1)); XCTAssertEqualObjects(managed.boolObj[1], @NO); XCTAssertEqualObjects(managed.intObj[1], @2); XCTAssertEqualObjects(managed.floatObj[1], @2.2f); XCTAssertEqualObjects(managed.doubleObj[1], @2.2); XCTAssertEqualObjects(managed.stringObj[1], @"a"); XCTAssertEqualObjects(managed.dataObj[1], data(1)); XCTAssertEqualObjects(managed.dateObj[1], date(1)); XCTAssertEqualObjects(optManaged.boolObj[1], @NO); XCTAssertEqualObjects(optManaged.intObj[1], @2); XCTAssertEqualObjects(optManaged.floatObj[1], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[1], @2.2); XCTAssertEqualObjects(optManaged.stringObj[1], @"a"); XCTAssertEqualObjects(optManaged.dataObj[1], data(1)); XCTAssertEqualObjects(optManaged.dateObj[1], date(1)); XCTAssertEqualObjects(optUnmanaged.boolObj[2], @NO); XCTAssertEqualObjects(optUnmanaged.intObj[2], @2); XCTAssertEqualObjects(optUnmanaged.floatObj[2], @2.2f); XCTAssertEqualObjects(optUnmanaged.doubleObj[2], @2.2); XCTAssertEqualObjects(optUnmanaged.stringObj[2], @"a"); XCTAssertEqualObjects(optUnmanaged.dataObj[2], data(1)); XCTAssertEqualObjects(optUnmanaged.dateObj[2], date(1)); XCTAssertEqualObjects(optManaged.boolObj[2], @NO); XCTAssertEqualObjects(optManaged.intObj[2], @2); XCTAssertEqualObjects(optManaged.floatObj[2], @2.2f); XCTAssertEqualObjects(optManaged.doubleObj[2], @2.2); XCTAssertEqualObjects(optManaged.stringObj[2], @"a"); XCTAssertEqualObjects(optManaged.dataObj[2], data(1)); XCTAssertEqualObjects(optManaged.dateObj[2], date(1)); [optUnmanaged.boolObj setValue:NSNull.null forKey:@"self"]; [optUnmanaged.intObj setValue:NSNull.null forKey:@"self"]; [optUnmanaged.floatObj setValue:NSNull.null forKey:@"self"]; [optUnmanaged.doubleObj setValue:NSNull.null forKey:@"self"]; [optUnmanaged.stringObj setValue:NSNull.null forKey:@"self"]; [optUnmanaged.dataObj setValue:NSNull.null forKey:@"self"]; [optUnmanaged.dateObj setValue:NSNull.null forKey:@"self"]; [optManaged.boolObj setValue:NSNull.null forKey:@"self"]; [optManaged.intObj setValue:NSNull.null forKey:@"self"]; [optManaged.floatObj setValue:NSNull.null forKey:@"self"]; [optManaged.doubleObj setValue:NSNull.null forKey:@"self"]; [optManaged.stringObj setValue:NSNull.null forKey:@"self"]; [optManaged.dataObj setValue:NSNull.null forKey:@"self"]; [optManaged.dateObj setValue:NSNull.null forKey:@"self"]; XCTAssertEqualObjects(optUnmanaged.boolObj[0], NSNull.null); XCTAssertEqualObjects(optUnmanaged.intObj[0], NSNull.null); XCTAssertEqualObjects(optUnmanaged.floatObj[0], NSNull.null); XCTAssertEqualObjects(optUnmanaged.doubleObj[0], NSNull.null); XCTAssertEqualObjects(optUnmanaged.stringObj[0], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dataObj[0], NSNull.null); XCTAssertEqualObjects(optUnmanaged.dateObj[0], NSNull.null); XCTAssertEqualObjects(optManaged.boolObj[0], NSNull.null); XCTAssertEqualObjects(optManaged.intObj[0], NSNull.null); XCTAssertEqualObjects(optManaged.floatObj[0], NSNull.null); XCTAssertEqualObjects(optManaged.doubleObj[0], NSNull.null); XCTAssertEqualObjects(optManaged.stringObj[0], NSNull.null); XCTAssertEqualObjects(optManaged.dataObj[0], NSNull.null); XCTAssertEqualObjects(optManaged.dateObj[0], NSNull.null); } - (void)testAssignment { unmanaged.boolObj = (id)@[@YES]; XCTAssertEqualObjects(unmanaged.boolObj[0], @YES); unmanaged.intObj = (id)@[@3]; XCTAssertEqualObjects(unmanaged.intObj[0], @3); unmanaged.floatObj = (id)@[@3.3f]; XCTAssertEqualObjects(unmanaged.floatObj[0], @3.3f); unmanaged.doubleObj = (id)@[@3.3]; XCTAssertEqualObjects(unmanaged.doubleObj[0], @3.3); unmanaged.stringObj = (id)@[@"b"]; XCTAssertEqualObjects(unmanaged.stringObj[0], @"b"); unmanaged.dataObj = (id)@[data(2)]; XCTAssertEqualObjects(unmanaged.dataObj[0], data(2)); unmanaged.dateObj = (id)@[date(2)]; XCTAssertEqualObjects(unmanaged.dateObj[0], date(2)); optUnmanaged.boolObj = (id)@[@YES]; XCTAssertEqualObjects(optUnmanaged.boolObj[0], @YES); optUnmanaged.intObj = (id)@[@3]; XCTAssertEqualObjects(optUnmanaged.intObj[0], @3); optUnmanaged.floatObj = (id)@[@3.3f]; XCTAssertEqualObjects(optUnmanaged.floatObj[0], @3.3f); optUnmanaged.doubleObj = (id)@[@3.3]; XCTAssertEqualObjects(optUnmanaged.doubleObj[0], @3.3); optUnmanaged.stringObj = (id)@[@"b"]; XCTAssertEqualObjects(optUnmanaged.stringObj[0], @"b"); optUnmanaged.dataObj = (id)@[data(2)]; XCTAssertEqualObjects(optUnmanaged.dataObj[0], data(2)); optUnmanaged.dateObj = (id)@[date(2)]; XCTAssertEqualObjects(optUnmanaged.dateObj[0], date(2)); managed.boolObj = (id)@[@YES]; XCTAssertEqualObjects(managed.boolObj[0], @YES); managed.intObj = (id)@[@3]; XCTAssertEqualObjects(managed.intObj[0], @3); managed.floatObj = (id)@[@3.3f]; XCTAssertEqualObjects(managed.floatObj[0], @3.3f); managed.doubleObj = (id)@[@3.3]; XCTAssertEqualObjects(managed.doubleObj[0], @3.3); managed.stringObj = (id)@[@"b"]; XCTAssertEqualObjects(managed.stringObj[0], @"b"); managed.dataObj = (id)@[data(2)]; XCTAssertEqualObjects(managed.dataObj[0], data(2)); managed.dateObj = (id)@[date(2)]; XCTAssertEqualObjects(managed.dateObj[0], date(2)); optManaged.boolObj = (id)@[@YES]; XCTAssertEqualObjects(optManaged.boolObj[0], @YES); optManaged.intObj = (id)@[@3]; XCTAssertEqualObjects(optManaged.intObj[0], @3); optManaged.floatObj = (id)@[@3.3f]; XCTAssertEqualObjects(optManaged.floatObj[0], @3.3f); optManaged.doubleObj = (id)@[@3.3]; XCTAssertEqualObjects(optManaged.doubleObj[0], @3.3); optManaged.stringObj = (id)@[@"b"]; XCTAssertEqualObjects(optManaged.stringObj[0], @"b"); optManaged.dataObj = (id)@[data(2)]; XCTAssertEqualObjects(optManaged.dataObj[0], data(2)); optManaged.dateObj = (id)@[date(2)]; XCTAssertEqualObjects(optManaged.dateObj[0], date(2)); // Should replace and not append unmanaged.boolObj = (id)@[@NO, @YES]; XCTAssertEqualObjects([unmanaged.boolObj valueForKey:@"self"], (@[@NO, @YES])); unmanaged.intObj = (id)@[@2, @3]; XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"self"], (@[@2, @3])); unmanaged.floatObj = (id)@[@2.2f, @3.3f]; XCTAssertEqualObjects([unmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f])); unmanaged.doubleObj = (id)@[@2.2, @3.3]; XCTAssertEqualObjects([unmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3])); unmanaged.stringObj = (id)@[@"a", @"b"]; XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"self"], (@[@"a", @"b"])); unmanaged.dataObj = (id)@[data(1), data(2)]; XCTAssertEqualObjects([unmanaged.dataObj valueForKey:@"self"], (@[data(1), data(2)])); unmanaged.dateObj = (id)@[date(1), date(2)]; XCTAssertEqualObjects([unmanaged.dateObj valueForKey:@"self"], (@[date(1), date(2)])); optUnmanaged.boolObj = (id)@[@NO, @YES, NSNull.null]; XCTAssertEqualObjects([optUnmanaged.boolObj valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optUnmanaged.intObj = (id)@[@2, @3, NSNull.null]; XCTAssertEqualObjects([optUnmanaged.intObj valueForKey:@"self"], (@[@2, @3, NSNull.null])); optUnmanaged.floatObj = (id)@[@2.2f, @3.3f, NSNull.null]; XCTAssertEqualObjects([optUnmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optUnmanaged.doubleObj = (id)@[@2.2, @3.3, NSNull.null]; XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optUnmanaged.stringObj = (id)@[@"a", @"b", NSNull.null]; XCTAssertEqualObjects([optUnmanaged.stringObj valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optUnmanaged.dataObj = (id)@[data(1), data(2), NSNull.null]; XCTAssertEqualObjects([optUnmanaged.dataObj valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optUnmanaged.dateObj = (id)@[date(1), date(2), NSNull.null]; XCTAssertEqualObjects([optUnmanaged.dateObj valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); managed.boolObj = (id)@[@NO, @YES]; XCTAssertEqualObjects([managed.boolObj valueForKey:@"self"], (@[@NO, @YES])); managed.intObj = (id)@[@2, @3]; XCTAssertEqualObjects([managed.intObj valueForKey:@"self"], (@[@2, @3])); managed.floatObj = (id)@[@2.2f, @3.3f]; XCTAssertEqualObjects([managed.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f])); managed.doubleObj = (id)@[@2.2, @3.3]; XCTAssertEqualObjects([managed.doubleObj valueForKey:@"self"], (@[@2.2, @3.3])); managed.stringObj = (id)@[@"a", @"b"]; XCTAssertEqualObjects([managed.stringObj valueForKey:@"self"], (@[@"a", @"b"])); managed.dataObj = (id)@[data(1), data(2)]; XCTAssertEqualObjects([managed.dataObj valueForKey:@"self"], (@[data(1), data(2)])); managed.dateObj = (id)@[date(1), date(2)]; XCTAssertEqualObjects([managed.dateObj valueForKey:@"self"], (@[date(1), date(2)])); optManaged.boolObj = (id)@[@NO, @YES, NSNull.null]; XCTAssertEqualObjects([optManaged.boolObj valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optManaged.intObj = (id)@[@2, @3, NSNull.null]; XCTAssertEqualObjects([optManaged.intObj valueForKey:@"self"], (@[@2, @3, NSNull.null])); optManaged.floatObj = (id)@[@2.2f, @3.3f, NSNull.null]; XCTAssertEqualObjects([optManaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optManaged.doubleObj = (id)@[@2.2, @3.3, NSNull.null]; XCTAssertEqualObjects([optManaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optManaged.stringObj = (id)@[@"a", @"b", NSNull.null]; XCTAssertEqualObjects([optManaged.stringObj valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optManaged.dataObj = (id)@[data(1), data(2), NSNull.null]; XCTAssertEqualObjects([optManaged.dataObj valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optManaged.dateObj = (id)@[date(1), date(2), NSNull.null]; XCTAssertEqualObjects([optManaged.dateObj valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); // Should not clear the array unmanaged.boolObj = unmanaged.boolObj; XCTAssertEqualObjects([unmanaged.boolObj valueForKey:@"self"], (@[@NO, @YES])); unmanaged.intObj = unmanaged.intObj; XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"self"], (@[@2, @3])); unmanaged.floatObj = unmanaged.floatObj; XCTAssertEqualObjects([unmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f])); unmanaged.doubleObj = unmanaged.doubleObj; XCTAssertEqualObjects([unmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3])); unmanaged.stringObj = unmanaged.stringObj; XCTAssertEqualObjects([unmanaged.stringObj valueForKey:@"self"], (@[@"a", @"b"])); unmanaged.dataObj = unmanaged.dataObj; XCTAssertEqualObjects([unmanaged.dataObj valueForKey:@"self"], (@[data(1), data(2)])); unmanaged.dateObj = unmanaged.dateObj; XCTAssertEqualObjects([unmanaged.dateObj valueForKey:@"self"], (@[date(1), date(2)])); optUnmanaged.boolObj = optUnmanaged.boolObj; XCTAssertEqualObjects([optUnmanaged.boolObj valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optUnmanaged.intObj = optUnmanaged.intObj; XCTAssertEqualObjects([optUnmanaged.intObj valueForKey:@"self"], (@[@2, @3, NSNull.null])); optUnmanaged.floatObj = optUnmanaged.floatObj; XCTAssertEqualObjects([optUnmanaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optUnmanaged.doubleObj = optUnmanaged.doubleObj; XCTAssertEqualObjects([optUnmanaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optUnmanaged.stringObj = optUnmanaged.stringObj; XCTAssertEqualObjects([optUnmanaged.stringObj valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optUnmanaged.dataObj = optUnmanaged.dataObj; XCTAssertEqualObjects([optUnmanaged.dataObj valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optUnmanaged.dateObj = optUnmanaged.dateObj; XCTAssertEqualObjects([optUnmanaged.dateObj valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); managed.boolObj = managed.boolObj; XCTAssertEqualObjects([managed.boolObj valueForKey:@"self"], (@[@NO, @YES])); managed.intObj = managed.intObj; XCTAssertEqualObjects([managed.intObj valueForKey:@"self"], (@[@2, @3])); managed.floatObj = managed.floatObj; XCTAssertEqualObjects([managed.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f])); managed.doubleObj = managed.doubleObj; XCTAssertEqualObjects([managed.doubleObj valueForKey:@"self"], (@[@2.2, @3.3])); managed.stringObj = managed.stringObj; XCTAssertEqualObjects([managed.stringObj valueForKey:@"self"], (@[@"a", @"b"])); managed.dataObj = managed.dataObj; XCTAssertEqualObjects([managed.dataObj valueForKey:@"self"], (@[data(1), data(2)])); managed.dateObj = managed.dateObj; XCTAssertEqualObjects([managed.dateObj valueForKey:@"self"], (@[date(1), date(2)])); optManaged.boolObj = optManaged.boolObj; XCTAssertEqualObjects([optManaged.boolObj valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optManaged.intObj = optManaged.intObj; XCTAssertEqualObjects([optManaged.intObj valueForKey:@"self"], (@[@2, @3, NSNull.null])); optManaged.floatObj = optManaged.floatObj; XCTAssertEqualObjects([optManaged.floatObj valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optManaged.doubleObj = optManaged.doubleObj; XCTAssertEqualObjects([optManaged.doubleObj valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optManaged.stringObj = optManaged.stringObj; XCTAssertEqualObjects([optManaged.stringObj valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optManaged.dataObj = optManaged.dataObj; XCTAssertEqualObjects([optManaged.dataObj valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optManaged.dateObj = optManaged.dateObj; XCTAssertEqualObjects([optManaged.dateObj valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); [unmanaged.intObj removeAllObjects]; unmanaged.intObj = managed.intObj; XCTAssertEqualObjects([unmanaged.intObj valueForKey:@"self"], (@[@2, @3])); [managed.intObj removeAllObjects]; managed.intObj = unmanaged.intObj; XCTAssertEqualObjects([managed.intObj valueForKey:@"self"], (@[@2, @3])); } - (void)testDynamicAssignment { unmanaged[@"boolObj"] = (id)@[@YES]; XCTAssertEqualObjects(unmanaged[@"boolObj"][0], @YES); unmanaged[@"intObj"] = (id)@[@3]; XCTAssertEqualObjects(unmanaged[@"intObj"][0], @3); unmanaged[@"floatObj"] = (id)@[@3.3f]; XCTAssertEqualObjects(unmanaged[@"floatObj"][0], @3.3f); unmanaged[@"doubleObj"] = (id)@[@3.3]; XCTAssertEqualObjects(unmanaged[@"doubleObj"][0], @3.3); unmanaged[@"stringObj"] = (id)@[@"b"]; XCTAssertEqualObjects(unmanaged[@"stringObj"][0], @"b"); unmanaged[@"dataObj"] = (id)@[data(2)]; XCTAssertEqualObjects(unmanaged[@"dataObj"][0], data(2)); unmanaged[@"dateObj"] = (id)@[date(2)]; XCTAssertEqualObjects(unmanaged[@"dateObj"][0], date(2)); optUnmanaged[@"boolObj"] = (id)@[@YES]; XCTAssertEqualObjects(optUnmanaged[@"boolObj"][0], @YES); optUnmanaged[@"intObj"] = (id)@[@3]; XCTAssertEqualObjects(optUnmanaged[@"intObj"][0], @3); optUnmanaged[@"floatObj"] = (id)@[@3.3f]; XCTAssertEqualObjects(optUnmanaged[@"floatObj"][0], @3.3f); optUnmanaged[@"doubleObj"] = (id)@[@3.3]; XCTAssertEqualObjects(optUnmanaged[@"doubleObj"][0], @3.3); optUnmanaged[@"stringObj"] = (id)@[@"b"]; XCTAssertEqualObjects(optUnmanaged[@"stringObj"][0], @"b"); optUnmanaged[@"dataObj"] = (id)@[data(2)]; XCTAssertEqualObjects(optUnmanaged[@"dataObj"][0], data(2)); optUnmanaged[@"dateObj"] = (id)@[date(2)]; XCTAssertEqualObjects(optUnmanaged[@"dateObj"][0], date(2)); managed[@"boolObj"] = (id)@[@YES]; XCTAssertEqualObjects(managed[@"boolObj"][0], @YES); managed[@"intObj"] = (id)@[@3]; XCTAssertEqualObjects(managed[@"intObj"][0], @3); managed[@"floatObj"] = (id)@[@3.3f]; XCTAssertEqualObjects(managed[@"floatObj"][0], @3.3f); managed[@"doubleObj"] = (id)@[@3.3]; XCTAssertEqualObjects(managed[@"doubleObj"][0], @3.3); managed[@"stringObj"] = (id)@[@"b"]; XCTAssertEqualObjects(managed[@"stringObj"][0], @"b"); managed[@"dataObj"] = (id)@[data(2)]; XCTAssertEqualObjects(managed[@"dataObj"][0], data(2)); managed[@"dateObj"] = (id)@[date(2)]; XCTAssertEqualObjects(managed[@"dateObj"][0], date(2)); optManaged[@"boolObj"] = (id)@[@YES]; XCTAssertEqualObjects(optManaged[@"boolObj"][0], @YES); optManaged[@"intObj"] = (id)@[@3]; XCTAssertEqualObjects(optManaged[@"intObj"][0], @3); optManaged[@"floatObj"] = (id)@[@3.3f]; XCTAssertEqualObjects(optManaged[@"floatObj"][0], @3.3f); optManaged[@"doubleObj"] = (id)@[@3.3]; XCTAssertEqualObjects(optManaged[@"doubleObj"][0], @3.3); optManaged[@"stringObj"] = (id)@[@"b"]; XCTAssertEqualObjects(optManaged[@"stringObj"][0], @"b"); optManaged[@"dataObj"] = (id)@[data(2)]; XCTAssertEqualObjects(optManaged[@"dataObj"][0], data(2)); optManaged[@"dateObj"] = (id)@[date(2)]; XCTAssertEqualObjects(optManaged[@"dateObj"][0], date(2)); // Should replace and not append unmanaged[@"boolObj"] = (id)@[@NO, @YES]; XCTAssertEqualObjects([unmanaged[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES])); unmanaged[@"intObj"] = (id)@[@2, @3]; XCTAssertEqualObjects([unmanaged[@"intObj"] valueForKey:@"self"], (@[@2, @3])); unmanaged[@"floatObj"] = (id)@[@2.2f, @3.3f]; XCTAssertEqualObjects([unmanaged[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f])); unmanaged[@"doubleObj"] = (id)@[@2.2, @3.3]; XCTAssertEqualObjects([unmanaged[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3])); unmanaged[@"stringObj"] = (id)@[@"a", @"b"]; XCTAssertEqualObjects([unmanaged[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b"])); unmanaged[@"dataObj"] = (id)@[data(1), data(2)]; XCTAssertEqualObjects([unmanaged[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2)])); unmanaged[@"dateObj"] = (id)@[date(1), date(2)]; XCTAssertEqualObjects([unmanaged[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2)])); optUnmanaged[@"boolObj"] = (id)@[@NO, @YES, NSNull.null]; XCTAssertEqualObjects([optUnmanaged[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optUnmanaged[@"intObj"] = (id)@[@2, @3, NSNull.null]; XCTAssertEqualObjects([optUnmanaged[@"intObj"] valueForKey:@"self"], (@[@2, @3, NSNull.null])); optUnmanaged[@"floatObj"] = (id)@[@2.2f, @3.3f, NSNull.null]; XCTAssertEqualObjects([optUnmanaged[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optUnmanaged[@"doubleObj"] = (id)@[@2.2, @3.3, NSNull.null]; XCTAssertEqualObjects([optUnmanaged[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optUnmanaged[@"stringObj"] = (id)@[@"a", @"b", NSNull.null]; XCTAssertEqualObjects([optUnmanaged[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optUnmanaged[@"dataObj"] = (id)@[data(1), data(2), NSNull.null]; XCTAssertEqualObjects([optUnmanaged[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optUnmanaged[@"dateObj"] = (id)@[date(1), date(2), NSNull.null]; XCTAssertEqualObjects([optUnmanaged[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); managed[@"boolObj"] = (id)@[@NO, @YES]; XCTAssertEqualObjects([managed[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES])); managed[@"intObj"] = (id)@[@2, @3]; XCTAssertEqualObjects([managed[@"intObj"] valueForKey:@"self"], (@[@2, @3])); managed[@"floatObj"] = (id)@[@2.2f, @3.3f]; XCTAssertEqualObjects([managed[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f])); managed[@"doubleObj"] = (id)@[@2.2, @3.3]; XCTAssertEqualObjects([managed[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3])); managed[@"stringObj"] = (id)@[@"a", @"b"]; XCTAssertEqualObjects([managed[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b"])); managed[@"dataObj"] = (id)@[data(1), data(2)]; XCTAssertEqualObjects([managed[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2)])); managed[@"dateObj"] = (id)@[date(1), date(2)]; XCTAssertEqualObjects([managed[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2)])); optManaged[@"boolObj"] = (id)@[@NO, @YES, NSNull.null]; XCTAssertEqualObjects([optManaged[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optManaged[@"intObj"] = (id)@[@2, @3, NSNull.null]; XCTAssertEqualObjects([optManaged[@"intObj"] valueForKey:@"self"], (@[@2, @3, NSNull.null])); optManaged[@"floatObj"] = (id)@[@2.2f, @3.3f, NSNull.null]; XCTAssertEqualObjects([optManaged[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optManaged[@"doubleObj"] = (id)@[@2.2, @3.3, NSNull.null]; XCTAssertEqualObjects([optManaged[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optManaged[@"stringObj"] = (id)@[@"a", @"b", NSNull.null]; XCTAssertEqualObjects([optManaged[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optManaged[@"dataObj"] = (id)@[data(1), data(2), NSNull.null]; XCTAssertEqualObjects([optManaged[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optManaged[@"dateObj"] = (id)@[date(1), date(2), NSNull.null]; XCTAssertEqualObjects([optManaged[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); // Should not clear the array unmanaged[@"boolObj"] = unmanaged[@"boolObj"]; XCTAssertEqualObjects([unmanaged[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES])); unmanaged[@"intObj"] = unmanaged[@"intObj"]; XCTAssertEqualObjects([unmanaged[@"intObj"] valueForKey:@"self"], (@[@2, @3])); unmanaged[@"floatObj"] = unmanaged[@"floatObj"]; XCTAssertEqualObjects([unmanaged[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f])); unmanaged[@"doubleObj"] = unmanaged[@"doubleObj"]; XCTAssertEqualObjects([unmanaged[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3])); unmanaged[@"stringObj"] = unmanaged[@"stringObj"]; XCTAssertEqualObjects([unmanaged[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b"])); unmanaged[@"dataObj"] = unmanaged[@"dataObj"]; XCTAssertEqualObjects([unmanaged[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2)])); unmanaged[@"dateObj"] = unmanaged[@"dateObj"]; XCTAssertEqualObjects([unmanaged[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2)])); optUnmanaged[@"boolObj"] = optUnmanaged[@"boolObj"]; XCTAssertEqualObjects([optUnmanaged[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optUnmanaged[@"intObj"] = optUnmanaged[@"intObj"]; XCTAssertEqualObjects([optUnmanaged[@"intObj"] valueForKey:@"self"], (@[@2, @3, NSNull.null])); optUnmanaged[@"floatObj"] = optUnmanaged[@"floatObj"]; XCTAssertEqualObjects([optUnmanaged[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optUnmanaged[@"doubleObj"] = optUnmanaged[@"doubleObj"]; XCTAssertEqualObjects([optUnmanaged[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optUnmanaged[@"stringObj"] = optUnmanaged[@"stringObj"]; XCTAssertEqualObjects([optUnmanaged[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optUnmanaged[@"dataObj"] = optUnmanaged[@"dataObj"]; XCTAssertEqualObjects([optUnmanaged[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optUnmanaged[@"dateObj"] = optUnmanaged[@"dateObj"]; XCTAssertEqualObjects([optUnmanaged[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); managed[@"boolObj"] = managed[@"boolObj"]; XCTAssertEqualObjects([managed[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES])); managed[@"intObj"] = managed[@"intObj"]; XCTAssertEqualObjects([managed[@"intObj"] valueForKey:@"self"], (@[@2, @3])); managed[@"floatObj"] = managed[@"floatObj"]; XCTAssertEqualObjects([managed[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f])); managed[@"doubleObj"] = managed[@"doubleObj"]; XCTAssertEqualObjects([managed[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3])); managed[@"stringObj"] = managed[@"stringObj"]; XCTAssertEqualObjects([managed[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b"])); managed[@"dataObj"] = managed[@"dataObj"]; XCTAssertEqualObjects([managed[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2)])); managed[@"dateObj"] = managed[@"dateObj"]; XCTAssertEqualObjects([managed[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2)])); optManaged[@"boolObj"] = optManaged[@"boolObj"]; XCTAssertEqualObjects([optManaged[@"boolObj"] valueForKey:@"self"], (@[@NO, @YES, NSNull.null])); optManaged[@"intObj"] = optManaged[@"intObj"]; XCTAssertEqualObjects([optManaged[@"intObj"] valueForKey:@"self"], (@[@2, @3, NSNull.null])); optManaged[@"floatObj"] = optManaged[@"floatObj"]; XCTAssertEqualObjects([optManaged[@"floatObj"] valueForKey:@"self"], (@[@2.2f, @3.3f, NSNull.null])); optManaged[@"doubleObj"] = optManaged[@"doubleObj"]; XCTAssertEqualObjects([optManaged[@"doubleObj"] valueForKey:@"self"], (@[@2.2, @3.3, NSNull.null])); optManaged[@"stringObj"] = optManaged[@"stringObj"]; XCTAssertEqualObjects([optManaged[@"stringObj"] valueForKey:@"self"], (@[@"a", @"b", NSNull.null])); optManaged[@"dataObj"] = optManaged[@"dataObj"]; XCTAssertEqualObjects([optManaged[@"dataObj"] valueForKey:@"self"], (@[data(1), data(2), NSNull.null])); optManaged[@"dateObj"] = optManaged[@"dateObj"]; XCTAssertEqualObjects([optManaged[@"dateObj"] valueForKey:@"self"], (@[date(1), date(2), NSNull.null])); [unmanaged[@"intObj"] removeAllObjects]; unmanaged[@"intObj"] = managed.intObj; XCTAssertEqualObjects([unmanaged[@"intObj"] valueForKey:@"self"], (@[@2, @3])); [managed[@"intObj"] removeAllObjects]; managed[@"intObj"] = unmanaged.intObj; XCTAssertEqualObjects([managed[@"intObj"] valueForKey:@"self"], (@[@2, @3])); } - (void)testInvalidAssignment { RLMAssertThrowsWithReason(unmanaged.intObj = (id)@[NSNull.null], @"Invalid value '' of type 'NSNull' for 'int' array property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(unmanaged.intObj = (id)@[@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for 'int' array property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(unmanaged.intObj = (id)(@[@1, @"a"]), @"Invalid value 'a' of type '__NSCFConstantString' for 'int' array property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(unmanaged.intObj = (id)unmanaged.floatObj, @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(unmanaged.intObj = (id)optUnmanaged.intObj, @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(unmanaged[@"intObj"] = unmanaged[@"floatObj"], @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(unmanaged[@"intObj"] = optUnmanaged[@"intObj"], @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(managed.intObj = (id)@[NSNull.null], @"Invalid value '' of type 'NSNull' for 'int' array property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(managed.intObj = (id)@[@"a"], @"Invalid value 'a' of type '__NSCFConstantString' for 'int' array property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(managed.intObj = (id)(@[@1, @"a"]), @"Invalid value 'a' of type '__NSCFConstantString' for 'int' array property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(managed.intObj = (id)managed.floatObj, @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(managed.intObj = (id)optManaged.intObj, @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(managed[@"intObj"] = (id)managed[@"floatObj"], @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); RLMAssertThrowsWithReason(managed[@"intObj"] = (id)optManaged[@"intObj"], @"RLMArray does not match expected type 'int' for property 'AllPrimitiveArrays.intObj'."); } - (void)testAllMethodsCheckThread { RLMArray *array = managed.intObj; [self dispatchAsyncAndWait:^{ RLMAssertThrowsWithReason([array count], @"thread"); RLMAssertThrowsWithReason([array objectAtIndex:0], @"thread"); RLMAssertThrowsWithReason([array firstObject], @"thread"); RLMAssertThrowsWithReason([array lastObject], @"thread"); RLMAssertThrowsWithReason([array addObject:@0], @"thread"); RLMAssertThrowsWithReason([array addObjects:@[@0]], @"thread"); RLMAssertThrowsWithReason([array insertObject:@0 atIndex:0], @"thread"); RLMAssertThrowsWithReason([array removeObjectAtIndex:0], @"thread"); RLMAssertThrowsWithReason([array removeLastObject], @"thread"); RLMAssertThrowsWithReason([array removeAllObjects], @"thread"); RLMAssertThrowsWithReason([array replaceObjectAtIndex:0 withObject:@0], @"thread"); RLMAssertThrowsWithReason([array moveObjectAtIndex:0 toIndex:1], @"thread"); RLMAssertThrowsWithReason([array exchangeObjectAtIndex:0 withObjectAtIndex:1], @"thread"); RLMAssertThrowsWithReason([array indexOfObject:@1], @"thread"); /* RLMAssertThrowsWithReason([array indexOfObjectWhere:@"TRUEPREDICATE"], @"thread"); */ /* RLMAssertThrowsWithReason([array indexOfObjectWithPredicate:[NSPredicate predicateWithValue:NO]], @"thread"); */ /* RLMAssertThrowsWithReason([array objectsWhere:@"TRUEPREDICATE"], @"thread"); */ /* RLMAssertThrowsWithReason([array objectsWithPredicate:[NSPredicate predicateWithValue:NO]], @"thread"); */ RLMAssertThrowsWithReason([array sortedResultsUsingKeyPath:@"self" ascending:YES], @"thread"); RLMAssertThrowsWithReason([array sortedResultsUsingDescriptors:@[[RLMSortDescriptor sortDescriptorWithKeyPath:@"self" ascending:YES]]], @"thread"); RLMAssertThrowsWithReason(array[0], @"thread"); RLMAssertThrowsWithReason(array[0] = @0, @"thread"); RLMAssertThrowsWithReason([array valueForKey:@"self"], @"thread"); RLMAssertThrowsWithReason([array setValue:@1 forKey:@"self"], @"thread"); RLMAssertThrowsWithReason({for (__unused id obj in array);}, @"thread"); }]; } - (void)testAllMethodsCheckForInvalidation { RLMArray *array = managed.intObj; [realm cancelWriteTransaction]; [realm invalidate]; XCTAssertNoThrow([array objectClassName]); XCTAssertNoThrow([array realm]); XCTAssertNoThrow([array isInvalidated]); RLMAssertThrowsWithReason([array count], @"invalidated"); RLMAssertThrowsWithReason([array objectAtIndex:0], @"invalidated"); RLMAssertThrowsWithReason([array firstObject], @"invalidated"); RLMAssertThrowsWithReason([array lastObject], @"invalidated"); RLMAssertThrowsWithReason([array addObject:@0], @"invalidated"); RLMAssertThrowsWithReason([array addObjects:@[@0]], @"invalidated"); RLMAssertThrowsWithReason([array insertObject:@0 atIndex:0], @"invalidated"); RLMAssertThrowsWithReason([array removeObjectAtIndex:0], @"invalidated"); RLMAssertThrowsWithReason([array removeLastObject], @"invalidated"); RLMAssertThrowsWithReason([array removeAllObjects], @"invalidated"); RLMAssertThrowsWithReason([array replaceObjectAtIndex:0 withObject:@0], @"invalidated"); RLMAssertThrowsWithReason([array moveObjectAtIndex:0 toIndex:1], @"invalidated"); RLMAssertThrowsWithReason([array exchangeObjectAtIndex:0 withObjectAtIndex:1], @"invalidated"); RLMAssertThrowsWithReason([array indexOfObject:@1], @"invalidated"); /* RLMAssertThrowsWithReason([array indexOfObjectWhere:@"TRUEPREDICATE"], @"invalidated"); */ /* RLMAssertThrowsWithReason([array indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]], @"invalidated"); */ /* RLMAssertThrowsWithReason([array objectsWhere:@"TRUEPREDICATE"], @"invalidated"); */ /* RLMAssertThrowsWithReason([array objectsWithPredicate:[NSPredicate predicateWithValue:YES]], @"invalidated"); */ RLMAssertThrowsWithReason([array sortedResultsUsingKeyPath:@"self" ascending:YES], @"invalidated"); RLMAssertThrowsWithReason([array sortedResultsUsingDescriptors:@[[RLMSortDescriptor sortDescriptorWithKeyPath:@"self" ascending:YES]]], @"invalidated"); RLMAssertThrowsWithReason(array[0], @"invalidated"); RLMAssertThrowsWithReason(array[0] = @0, @"invalidated"); RLMAssertThrowsWithReason([array valueForKey:@"self"], @"invalidated"); RLMAssertThrowsWithReason([array setValue:@1 forKey:@"self"], @"invalidated"); RLMAssertThrowsWithReason({for (__unused id obj in array);}, @"invalidated"); [realm beginWriteTransaction]; } - (void)testMutatingMethodsCheckForWriteTransaction { RLMArray *array = managed.intObj; [array addObject:@0]; [realm commitWriteTransaction]; XCTAssertNoThrow([array objectClassName]); XCTAssertNoThrow([array realm]); XCTAssertNoThrow([array isInvalidated]); XCTAssertNoThrow([array count]); XCTAssertNoThrow([array objectAtIndex:0]); XCTAssertNoThrow([array firstObject]); XCTAssertNoThrow([array lastObject]); XCTAssertNoThrow([array indexOfObject:@1]); /* XCTAssertNoThrow([array indexOfObjectWhere:@"TRUEPREDICATE"]); */ /* XCTAssertNoThrow([array indexOfObjectWithPredicate:[NSPredicate predicateWithValue:YES]]); */ /* XCTAssertNoThrow([array objectsWhere:@"TRUEPREDICATE"]); */ /* XCTAssertNoThrow([array objectsWithPredicate:[NSPredicate predicateWithValue:YES]]); */ XCTAssertNoThrow([array sortedResultsUsingKeyPath:@"self" ascending:YES]); XCTAssertNoThrow([array sortedResultsUsingDescriptors:@[[RLMSortDescriptor sortDescriptorWithKeyPath:@"self" ascending:YES]]]); XCTAssertNoThrow(array[0]); XCTAssertNoThrow([array valueForKey:@"self"]); XCTAssertNoThrow({for (__unused id obj in array);}); RLMAssertThrowsWithReason([array addObject:@0], @"write transaction"); RLMAssertThrowsWithReason([array addObjects:@[@0]], @"write transaction"); RLMAssertThrowsWithReason([array insertObject:@0 atIndex:0], @"write transaction"); RLMAssertThrowsWithReason([array removeObjectAtIndex:0], @"write transaction"); RLMAssertThrowsWithReason([array removeLastObject], @"write transaction"); RLMAssertThrowsWithReason([array removeAllObjects], @"write transaction"); RLMAssertThrowsWithReason([array replaceObjectAtIndex:0 withObject:@0], @"write transaction"); RLMAssertThrowsWithReason([array moveObjectAtIndex:0 toIndex:1], @"write transaction"); RLMAssertThrowsWithReason([array exchangeObjectAtIndex:0 withObjectAtIndex:1], @"write transaction"); RLMAssertThrowsWithReason(array[0] = @0, @"write transaction"); RLMAssertThrowsWithReason([array setValue:@1 forKey:@"self"], @"write transaction"); } - (void)testDeleteOwningObject { RLMArray *array = managed.intObj; XCTAssertFalse(array.isInvalidated); [realm deleteObject:managed]; XCTAssertTrue(array.isInvalidated); } #pragma clang diagnostic ignored "-Warc-retain-cycles" - (void)testNotificationSentInitially { [realm commitWriteTransaction]; id expectation = [self expectationWithDescription:@""]; id token = [managed.intObj addNotificationBlock:^(RLMArray *array, RLMCollectionChange *change, NSError *error) { XCTAssertNotNil(array); XCTAssertNil(change); XCTAssertNil(error); [expectation fulfill]; }]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; [(RLMNotificationToken *)token invalidate]; } - (void)testNotificationSentAfterCommit { [realm commitWriteTransaction]; __block bool first = true; __block id expectation = [self expectationWithDescription:@""]; id token = [managed.intObj addNotificationBlock:^(RLMArray *array, RLMCollectionChange *change, NSError *error) { XCTAssertNotNil(array); XCTAssertNil(error); if (first) { XCTAssertNil(change); } else { XCTAssertEqualObjects(change.insertions, @[@0]); } first = false; [expectation fulfill]; }]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; expectation = [self expectationWithDescription:@""]; [self dispatchAsyncAndWait:^{ RLMRealm *r = [RLMRealm defaultRealm]; [r transactionWithBlock:^{ RLMArray *array = [(AllPrimitiveArrays *)[AllPrimitiveArrays allObjectsInRealm:r].firstObject intObj]; [array addObject:@0]; }]; }]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; [(RLMNotificationToken *)token invalidate]; } - (void)testNotificationNotSentForUnrelatedChange { [realm commitWriteTransaction]; id expectation = [self expectationWithDescription:@""]; id token = [managed.intObj addNotificationBlock:^(__unused RLMArray *array, __unused RLMCollectionChange *change, __unused NSError *error) { // will throw if it's incorrectly called a second time due to the // unrelated write transaction [expectation fulfill]; }]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; // All notification blocks are called as part of a single runloop event, so // waiting for this one also waits for the above one to get a chance to run [self waitForNotification:RLMRealmDidChangeNotification realm:realm block:^{ [self dispatchAsyncAndWait:^{ RLMRealm *r = [RLMRealm defaultRealm]; [r transactionWithBlock:^{ [AllPrimitiveArrays createInRealm:r withValue:@[]]; }]; }]; }]; [(RLMNotificationToken *)token invalidate]; } - (void)testNotificationSentOnlyForActualRefresh { [realm commitWriteTransaction]; __block id expectation = [self expectationWithDescription:@""]; id token = [managed.intObj addNotificationBlock:^(RLMArray *array, __unused RLMCollectionChange *change, NSError *error) { XCTAssertNotNil(array); XCTAssertNil(error); // will throw if it's called a second time before we create the new // expectation object immediately before manually refreshing [expectation fulfill]; }]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; // Turn off autorefresh, so the background commit should not result in a notification realm.autorefresh = NO; // All notification blocks are called as part of a single runloop event, so // waiting for this one also waits for the above one to get a chance to run [self waitForNotification:RLMRealmRefreshRequiredNotification realm:realm block:^{ [self dispatchAsyncAndWait:^{ RLMRealm *r = [RLMRealm defaultRealm]; [r transactionWithBlock:^{ RLMArray *array = [(AllPrimitiveArrays *)[AllPrimitiveArrays allObjectsInRealm:r].firstObject intObj]; [array addObject:@0]; }]; }]; }]; expectation = [self expectationWithDescription:@""]; [realm refresh]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; [(RLMNotificationToken *)token invalidate]; } - (void)testDeletingObjectWithNotificationsRegistered { [managed.intObj addObjects:@[@10, @20]]; [realm commitWriteTransaction]; __block bool first = true; __block id expectation = [self expectationWithDescription:@""]; id token = [managed.intObj addNotificationBlock:^(RLMArray *array, RLMCollectionChange *change, NSError *error) { XCTAssertNotNil(array); XCTAssertNil(error); if (first) { XCTAssertNil(change); first = false; } else { XCTAssertEqualObjects(change.deletions, (@[@0, @1])); } [expectation fulfill]; }]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; [realm beginWriteTransaction]; [realm deleteObject:managed]; [realm commitWriteTransaction]; expectation = [self expectationWithDescription:@""]; [self waitForExpectationsWithTimeout:2.0 handler:nil]; [(RLMNotificationToken *)token invalidate]; } @end