aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Example/Tests/Core/FSTTargetIDGeneratorTests.m
diff options
context:
space:
mode:
Diffstat (limited to 'Firestore/Example/Tests/Core/FSTTargetIDGeneratorTests.m')
-rw-r--r--Firestore/Example/Tests/Core/FSTTargetIDGeneratorTests.m94
1 files changed, 94 insertions, 0 deletions
diff --git a/Firestore/Example/Tests/Core/FSTTargetIDGeneratorTests.m b/Firestore/Example/Tests/Core/FSTTargetIDGeneratorTests.m
new file mode 100644
index 0000000..11a7f46
--- /dev/null
+++ b/Firestore/Example/Tests/Core/FSTTargetIDGeneratorTests.m
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2017 Google
+ *
+ * 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 "Core/FSTTargetIDGenerator.h"
+
+#import <XCTest/XCTest.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FSTTargetIDGenerator ()
+- (instancetype)initWithGeneratorID:(NSInteger)generatorID startingAfterID:(FSTTargetID)after;
+@end
+
+@interface FSTTargetIDGeneratorTests : XCTestCase
+@end
+
+@implementation FSTTargetIDGeneratorTests
+
+- (void)testConstructor {
+ XCTAssertEqual([[[FSTTargetIDGenerator alloc] initWithGeneratorID:0 startingAfterID:0] nextID],
+ 2);
+ XCTAssertEqual([[[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:0] nextID],
+ 1);
+
+ XCTAssertEqual([[FSTTargetIDGenerator generatorForLocalStoreStartingAfterID:0] nextID], 2);
+ XCTAssertEqual([[FSTTargetIDGenerator generatorForSyncEngineStartingAfterID:0] nextID], 1);
+}
+
+- (void)testSkipPast {
+ FSTTargetIDGenerator *gen =
+ [[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:-1];
+ XCTAssertEqual([gen nextID], 1);
+
+ gen = [[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:2];
+ XCTAssertEqual([gen nextID], 3);
+
+ gen = [[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:4];
+ XCTAssertEqual([gen nextID], 5);
+
+ for (int i = 4; i < 12; ++i) {
+ FSTTargetIDGenerator *gen0 =
+ [[FSTTargetIDGenerator alloc] initWithGeneratorID:0 startingAfterID:i];
+ FSTTargetIDGenerator *gen1 =
+ [[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:i];
+ XCTAssertEqual([gen0 nextID], i + 2 & ~1, @"Skip failed for index %d", i);
+ XCTAssertEqual([gen1 nextID], i + 1 | 1, @"Skip failed for index %d", i);
+ }
+
+ gen = [[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:12];
+ XCTAssertEqual([gen nextID], 13);
+
+ gen = [[FSTTargetIDGenerator alloc] initWithGeneratorID:0 startingAfterID:22];
+ XCTAssertEqual([gen nextID], 24);
+}
+
+- (void)testIncrement {
+ FSTTargetIDGenerator *gen =
+ [[FSTTargetIDGenerator alloc] initWithGeneratorID:0 startingAfterID:0];
+ XCTAssertEqual([gen nextID], 2);
+ XCTAssertEqual([gen nextID], 4);
+ XCTAssertEqual([gen nextID], 6);
+ gen = [[FSTTargetIDGenerator alloc] initWithGeneratorID:0 startingAfterID:46];
+ XCTAssertEqual([gen nextID], 48);
+ XCTAssertEqual([gen nextID], 50);
+ XCTAssertEqual([gen nextID], 52);
+ XCTAssertEqual([gen nextID], 54);
+
+ gen = [[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:0];
+ XCTAssertEqual([gen nextID], 1);
+ XCTAssertEqual([gen nextID], 3);
+ XCTAssertEqual([gen nextID], 5);
+ gen = [[FSTTargetIDGenerator alloc] initWithGeneratorID:1 startingAfterID:46];
+ XCTAssertEqual([gen nextID], 47);
+ XCTAssertEqual([gen nextID], 49);
+ XCTAssertEqual([gen nextID], 51);
+ XCTAssertEqual([gen nextID], 53);
+}
+
+@end
+
+NS_ASSUME_NONNULL_END