An amazing project that generates micro reports from tournament results
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

512 lines
25 KiB

////////////////////////////////////////////////////////////////////////////
//
// Copyright 2014 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 XCTest
import Realm
import Foundation
class SwiftArrayTests: RLMTestCase {
// Swift models
func testFastEnumeration() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
let dateMinInput = Date()
let dateMaxInput = dateMinInput.addingTimeInterval(1000)
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
try! realm.commitWriteTransaction()
let result = SwiftAggregateObject.objects(in: realm, where: "intCol < %d", 100)
XCTAssertEqual(result.count, UInt(10), "10 objects added")
var totalSum = 0
for obj in result {
if let ao = obj as? SwiftAggregateObject {
totalSum += ao.intCol
}
}
XCTAssertEqual(totalSum, 100, "total sum should be 100")
}
func testObjectAggregate() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
let dateMinInput = Date()
let dateMaxInput = dateMinInput.addingTimeInterval(1000)
_ = SwiftAggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = SwiftAggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
try! realm.commitWriteTransaction()
let noArray = SwiftAggregateObject.objects(in: realm, where: "boolCol == NO")
let yesArray = SwiftAggregateObject.objects(in: realm, where: "boolCol == YES")
// SUM ::::::::::::::::::::::::::::::::::::::::::::::
// Test int sum
XCTAssertEqual(noArray.sum(ofProperty: "intCol").intValue, 4, "Sum should be 4")
XCTAssertEqual(yesArray.sum(ofProperty: "intCol").intValue, 0, "Sum should be 0")
// Test float sum
XCTAssertEqual(noArray.sum(ofProperty: "floatCol").floatValue, Float(0), accuracy: 0.1, "Sum should be 0.0")
XCTAssertEqual(yesArray.sum(ofProperty: "floatCol").floatValue, Float(7.2), accuracy: 0.1, "Sum should be 7.2")
// Test double sum
XCTAssertEqual(noArray.sum(ofProperty: "doubleCol").doubleValue, Double(10), accuracy: 0.1, "Sum should be 10.0")
XCTAssertEqual(yesArray.sum(ofProperty: "doubleCol").doubleValue, Double(0), accuracy: 0.1, "Sum should be 0.0")
// Average ::::::::::::::::::::::::::::::::::::::::::::::
// Test int average
XCTAssertEqual(noArray.average(ofProperty: "intCol")!.doubleValue, Double(1), accuracy: 0.1, "Average should be 1.0")
XCTAssertEqual(yesArray.average(ofProperty: "intCol")!.doubleValue, Double(0), accuracy: 0.1, "Average should be 0.0")
// Test float average
XCTAssertEqual(noArray.average(ofProperty: "floatCol")!.doubleValue, Double(0), accuracy: 0.1, "Average should be 0.0")
XCTAssertEqual(yesArray.average(ofProperty: "floatCol")!.doubleValue, Double(1.2), accuracy: 0.1, "Average should be 1.2")
// Test double average
XCTAssertEqual(noArray.average(ofProperty: "doubleCol")!.doubleValue, Double(2.5), accuracy: 0.1, "Average should be 2.5")
XCTAssertEqual(yesArray.average(ofProperty: "doubleCol")!.doubleValue, Double(0), accuracy: 0.1, "Average should be 0.0")
// MIN ::::::::::::::::::::::::::::::::::::::::::::::
// Test int min
var min = noArray.min(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(min.int32Value, Int32(1), "Minimum should be 1")
min = yesArray.min(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(min.int32Value, Int32(0), "Minimum should be 0")
// Test float min
min = noArray.min(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(min.floatValue, Float(0), accuracy: 0.1, "Minimum should be 0.0f")
min = yesArray.min(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(min.floatValue, Float(1.2), accuracy: 0.1, "Minimum should be 1.2f")
// Test double min
min = noArray.min(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(min.doubleValue, Double(2.5), accuracy: 0.1, "Minimum should be 1.5")
min = yesArray.min(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(min.doubleValue, Double(0), accuracy: 0.1, "Minimum should be 0.0")
// Test date min
var dateMinOutput = noArray.min(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMinOutput, dateMaxInput, "Minimum should be dateMaxInput")
dateMinOutput = yesArray.min(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMinOutput, dateMinInput, "Minimum should be dateMinInput")
// MAX ::::::::::::::::::::::::::::::::::::::::::::::
// Test int max
var max = noArray.max(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(max.intValue, 1, "Maximum should be 8")
max = yesArray.max(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(max.intValue, 0, "Maximum should be 10")
// Test float max
max = noArray.max(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(max.floatValue, Float(0), accuracy: 0.1, "Maximum should be 0.0f")
max = yesArray.max(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(max.floatValue, Float(1.2), accuracy: 0.1, "Maximum should be 1.2f")
// Test double max
max = noArray.max(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(max.doubleValue, Double(2.5), accuracy: 0.1, "Maximum should be 3.5")
max = yesArray.max(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(max.doubleValue, Double(0), accuracy: 0.1, "Maximum should be 0.0")
// Test date max
var dateMaxOutput = noArray.max(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMaxOutput, dateMaxInput, "Maximum should be dateMaxInput")
dateMaxOutput = yesArray.max(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMaxOutput, dateMinInput, "Maximum should be dateMinInput")
}
func testArrayDescription() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
for _ in 0..<1012 {
let person = SwiftEmployeeObject()
person.name = "Mary"
person.age = 24
person.hired = true
realm.add(person)
}
try! realm.commitWriteTransaction()
let description = SwiftEmployeeObject.allObjects(in: realm).description
XCTAssertTrue((description as NSString).range(of: "name").location != Foundation.NSNotFound, "property names should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "Mary").location != Foundation.NSNotFound, "property values should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "age").location != Foundation.NSNotFound, "property names should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "24").location != Foundation.NSNotFound, "property values should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "12 objects skipped").location != Foundation.NSNotFound, "'12 objects skipped' should be displayed when calling \"description\" on RLMArray")
}
func testDeleteLinksAndObjectsInArray() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
let po1 = SwiftEmployeeObject()
po1.age = 40
po1.name = "Joe"
po1.hired = true
let po2 = SwiftEmployeeObject()
po2.age = 30
po2.name = "John"
po2.hired = false
let po3 = SwiftEmployeeObject()
po3.age = 25
po3.name = "Jill"
po3.hired = true
realm.add(po1)
realm.add(po2)
realm.add(po3)
let company = SwiftCompanyObject()
realm.add(company)
company.employees.addObjects(SwiftEmployeeObject.allObjects(in: realm))
try! realm.commitWriteTransaction()
let peopleInCompany = company.employees
XCTAssertEqual(peopleInCompany.count, UInt(3), "No links should have been deleted")
realm.beginWriteTransaction()
peopleInCompany.removeObject(at: 1) // Should delete link to employee
try! realm.commitWriteTransaction()
XCTAssertEqual(peopleInCompany.count, UInt(2), "link deleted when accessing via links")
var test = peopleInCompany[0]
XCTAssertEqual(test.age, po1.age, "Should be equal")
XCTAssertEqual(test.name, po1.name, "Should be equal")
XCTAssertEqual(test.hired, po1.hired, "Should be equal")
// XCTAssertEqual(test, po1, "Should be equal") //FIXME, should work. Asana : https://app.asana.com/0/861870036984/13123030433568
test = peopleInCompany[1]
XCTAssertEqual(test.age, po3.age, "Should be equal")
XCTAssertEqual(test.name, po3.name, "Should be equal")
XCTAssertEqual(test.hired, po3.hired, "Should be equal")
// XCTAssertEqual(test, po3, "Should be equal") //FIXME, should work. Asana : https://app.asana.com/0/861870036984/13123030433568
realm.beginWriteTransaction()
peopleInCompany.removeLastObject()
XCTAssertEqual(peopleInCompany.count, UInt(1), "1 remaining link")
peopleInCompany.replaceObject(at: 0, with: po2)
XCTAssertEqual(peopleInCompany.count, UInt(1), "1 link replaced")
peopleInCompany.insert(po1, at: 0)
XCTAssertEqual(peopleInCompany.count, UInt(2), "2 links")
peopleInCompany.removeAllObjects()
XCTAssertEqual(peopleInCompany.count, UInt(0), "0 remaining links")
try! realm.commitWriteTransaction()
}
// Objective-C models
func testFastEnumeration_objc() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
let dateMinInput = Date()
let dateMaxInput = dateMinInput.addingTimeInterval(1000)
_ = AggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [10, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [10, 1.2 as Float, 0 as Double, true, dateMinInput])
try! realm.commitWriteTransaction()
let result = AggregateObject.objects(in: realm, where: "intCol < %d", 100)
XCTAssertEqual(result.count, UInt(10), "10 objects added")
var totalSum: CInt = 0
for obj in result {
if let ao = obj as? AggregateObject {
totalSum += ao.intCol
}
}
XCTAssertEqual(totalSum, CInt(100), "total sum should be 100")
}
func testObjectAggregate_objc() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
let dateMinInput = Date()
let dateMaxInput = dateMinInput.addingTimeInterval(1000)
_ = AggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [1, 0 as Float, 2.5 as Double, false, dateMaxInput])
_ = AggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
_ = AggregateObject.create(in: realm, withValue: [0, 1.2 as Float, 0 as Double, true, dateMinInput])
try! realm.commitWriteTransaction()
let noArray = AggregateObject.objects(in: realm, where: "boolCol == NO")
let yesArray = AggregateObject.objects(in: realm, where: "boolCol == YES")
// SUM ::::::::::::::::::::::::::::::::::::::::::::::
// Test int sum
XCTAssertEqual(noArray.sum(ofProperty: "intCol").intValue, 4, "Sum should be 4")
XCTAssertEqual(yesArray.sum(ofProperty: "intCol").intValue, 0, "Sum should be 0")
// Test float sum
XCTAssertEqual(noArray.sum(ofProperty: "floatCol").floatValue, Float(0), accuracy: 0.1, "Sum should be 0.0")
XCTAssertEqual(yesArray.sum(ofProperty: "floatCol").floatValue, Float(7.2), accuracy: 0.1, "Sum should be 7.2")
// Test double sum
XCTAssertEqual(noArray.sum(ofProperty: "doubleCol").doubleValue, Double(10), accuracy: 0.1, "Sum should be 10.0")
XCTAssertEqual(yesArray.sum(ofProperty: "doubleCol").doubleValue, Double(0), accuracy: 0.1, "Sum should be 0.0")
// Average ::::::::::::::::::::::::::::::::::::::::::::::
// Test int average
XCTAssertEqual(noArray.average(ofProperty: "intCol")!.doubleValue, Double(1), accuracy: 0.1, "Average should be 1.0")
XCTAssertEqual(yesArray.average(ofProperty: "intCol")!.doubleValue, Double(0), accuracy: 0.1, "Average should be 0.0")
// Test float average
XCTAssertEqual(noArray.average(ofProperty: "floatCol")!.doubleValue, Double(0), accuracy: 0.1, "Average should be 0.0")
XCTAssertEqual(yesArray.average(ofProperty: "floatCol")!.doubleValue, Double(1.2), accuracy: 0.1, "Average should be 1.2")
// Test double average
XCTAssertEqual(noArray.average(ofProperty: "doubleCol")!.doubleValue, Double(2.5), accuracy: 0.1, "Average should be 2.5")
XCTAssertEqual(yesArray.average(ofProperty: "doubleCol")!.doubleValue, Double(0), accuracy: 0.1, "Average should be 0.0")
// MIN ::::::::::::::::::::::::::::::::::::::::::::::
// Test int min
var min = noArray.min(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(min.int32Value, Int32(1), "Minimum should be 1")
min = yesArray.min(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(min.int32Value, Int32(0), "Minimum should be 0")
// Test float min
min = noArray.min(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(min.floatValue, Float(0), accuracy: 0.1, "Minimum should be 0.0f")
min = yesArray.min(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(min.floatValue, Float(1.2), accuracy: 0.1, "Minimum should be 1.2f")
// Test double min
min = noArray.min(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(min.doubleValue, Double(2.5), accuracy: 0.1, "Minimum should be 1.5")
min = yesArray.min(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(min.doubleValue, Double(0), accuracy: 0.1, "Minimum should be 0.0")
// Test date min
var dateMinOutput = noArray.min(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMinOutput, dateMaxInput, "Minimum should be dateMaxInput")
dateMinOutput = yesArray.min(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMinOutput, dateMinInput, "Minimum should be dateMinInput")
// MAX ::::::::::::::::::::::::::::::::::::::::::::::
// Test int max
var max = noArray.max(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(max.intValue, 1, "Maximum should be 8")
max = yesArray.max(ofProperty: "intCol") as! NSNumber
XCTAssertEqual(max.intValue, 0, "Maximum should be 10")
// Test float max
max = noArray.max(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(max.floatValue, Float(0), accuracy: 0.1, "Maximum should be 0.0f")
max = yesArray.max(ofProperty: "floatCol") as! NSNumber
XCTAssertEqual(max.floatValue, Float(1.2), accuracy: 0.1, "Maximum should be 1.2f")
// Test double max
max = noArray.max(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(max.doubleValue, Double(2.5), accuracy: 0.1, "Maximum should be 3.5")
max = yesArray.max(ofProperty: "doubleCol") as! NSNumber
XCTAssertEqual(max.doubleValue, Double(0), accuracy: 0.1, "Maximum should be 0.0")
// Test date max
var dateMaxOutput = noArray.max(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMaxOutput, dateMaxInput, "Maximum should be dateMaxInput")
dateMaxOutput = yesArray.max(ofProperty: "dateCol") as! Date
XCTAssertEqual(dateMaxOutput, dateMinInput, "Maximum should be dateMinInput")
}
func testArrayDescription_objc() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
for _ in 0..<1012 {
let person = EmployeeObject()
person.name = "Mary"
person.age = 24
person.hired = true
realm.add(person)
}
try! realm.commitWriteTransaction()
let description = EmployeeObject.allObjects(in: realm).description
XCTAssertTrue((description as NSString).range(of: "name").location != Foundation.NSNotFound, "property names should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "Mary").location != Foundation.NSNotFound, "property values should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "age").location != Foundation.NSNotFound, "property names should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "24").location != Foundation.NSNotFound, "property values should be displayed when calling \"description\" on RLMArray")
XCTAssertTrue((description as NSString).range(of: "912 objects skipped").location != Foundation.NSNotFound, "'912 objects skipped' should be displayed when calling \"description\" on RLMArray")
}
func makeEmployee(_ realm: RLMRealm, _ age: Int32, _ name: String, _ hired: Bool) -> EmployeeObject {
let employee = EmployeeObject()
employee.age = age
employee.name = name
employee.hired = hired
realm.add(employee)
return employee
}
func testDeleteLinksAndObjectsInArray_objc() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
let po1 = makeEmployee(realm, 40, "Joe", true)
_ = makeEmployee(realm, 30, "John", false)
let po3 = makeEmployee(realm, 25, "Jill", true)
let company = CompanyObject()
company.name = "name"
realm.add(company)
company.employees.addObjects(EmployeeObject.allObjects(in: realm))
try! realm.commitWriteTransaction()
let peopleInCompany: RLMArray<EmployeeObject> = company.employees!
XCTAssertEqual(peopleInCompany.count, UInt(3), "No links should have been deleted")
realm.beginWriteTransaction()
peopleInCompany.removeObject(at: 1) // Should delete link to employee
try! realm.commitWriteTransaction()
XCTAssertEqual(peopleInCompany.count, UInt(2), "link deleted when accessing via links")
var test = peopleInCompany[0]
XCTAssertEqual(test.age, po1.age, "Should be equal")
XCTAssertEqual(test.name!, po1.name!, "Should be equal")
XCTAssertEqual(test.hired, po1.hired, "Should be equal")
// XCTAssertEqual(test, po1, "Should be equal") //FIXME, should work. Asana : https://app.asana.com/0/861870036984/13123030433568
test = peopleInCompany[1]
XCTAssertEqual(test.age, po3.age, "Should be equal")
XCTAssertEqual(test.name!, po3.name!, "Should be equal")
XCTAssertEqual(test.hired, po3.hired, "Should be equal")
// XCTAssertEqual(test, po3, "Should be equal") //FIXME, should work. Asana : https://app.asana.com/0/861870036984/13123030433568
let allPeople = EmployeeObject.allObjects(in: realm)
XCTAssertEqual(allPeople.count, UInt(3), "Only links should have been deleted, not the employees")
}
func testIndexOfObject_objc() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
let po1 = makeEmployee(realm, 40, "Joe", true)
let po2 = makeEmployee(realm, 30, "John", false)
let po3 = makeEmployee(realm, 25, "Jill", true)
try! realm.commitWriteTransaction()
let results = EmployeeObject.objects(in: realm, where: "hired = YES")
XCTAssertEqual(UInt(2), results.count)
XCTAssertEqual(UInt(0), results.index(of: po1));
XCTAssertEqual(UInt(1), results.index(of: po3));
XCTAssertEqual(NSNotFound, Int(results.index(of: po2)));
}
func testIndexOfObjectWhere_objc() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
_ = makeEmployee(realm, 40, "Joe", true)
_ = makeEmployee(realm, 30, "John", false)
_ = makeEmployee(realm, 25, "Jill", true)
try! realm.commitWriteTransaction()
let results = EmployeeObject.objects(in: realm, where: "hired = YES")
XCTAssertEqual(UInt(2), results.count)
XCTAssertEqual(UInt(0), results.indexOfObject(where: "age = %d", 40))
XCTAssertEqual(UInt(1), results.indexOfObject(where: "age = %d", 25))
XCTAssertEqual(NSNotFound, Int(results.indexOfObject(where: "age = %d", 30)))
}
func testSortingExistingQuery_objc() {
let realm = realmWithTestPath()
realm.beginWriteTransaction()
_ = makeEmployee(realm, 20, "A", true)
_ = makeEmployee(realm, 30, "B", false)
_ = makeEmployee(realm, 40, "C", true)
try! realm.commitWriteTransaction()
let sortedByAge = EmployeeObject.allObjects(in: realm).sortedResults(usingKeyPath: "age", ascending: true)
let sortedByName = sortedByAge.sortedResults(usingKeyPath: "name", ascending: false)
XCTAssertEqual(Int32(20), (sortedByAge[0] as! EmployeeObject).age)
XCTAssertEqual(Int32(40), (sortedByName[0] as! EmployeeObject).age)
}
}