{"action":"created","comment":{"url":"https://api.github.com/repos/apple/swift/pulls/comments/60513789","id":60513789,"diff_hunk":"@@ -0,0 +1,88 @@\n+// -*- swift -*-\n+\n+// RUN: rm -rf %t\n+// RUN: mkdir -p %t\n+// RUN: %S/../../../utils/gyb %s -o %t/main.swift\n+// RUN: %S/../../../utils/line-directive %t/main.swift -- %target-build-swift %t/main.swift -o %t/LazyFilterCollection.swift.a.out\n+// RUN: %S/../../../utils/line-directive %t/main.swift -- %target-run %t/LazyFilterCollection.swift.a.out\n+// REQUIRES: executable_test\n+\n+import StdlibUnittest\n+import StdlibCollectionUnittest\n+\n+// Also import modules which are used by StdlibUnittest internally. This\n+// workaround is needed to link all required libraries in case we compile\n+// StdlibUnittest with -sil-serialize-all.\n+import SwiftPrivate\n+#if _runtime(_ObjC)\n+import ObjectiveC\n+#endif\n+\n+var CollectionTests = TestSuite(\"Collection\")\n+\n+%{\n+variations = [('', 'Sequence'), ('', 'Collection'), ('Bidirectional', 'Collection')]\n+}%\n+\n+// Test collections using value types as elements.\n+% for (specifier, kind) in variations:\n+CollectionTests.add${specifier}${kind}Tests(\n+  make${kind}: { (elements: [OpaqueValue<Int>]) in\n+    Minimal${specifier}${kind}(elements: elements).lazy.filter { _ in return true }\n+  },\n+  wrapValue: identity,\n+  extractValue: identity,\n+  make${kind}OfEquatable: { (elements: [MinimalEquatableValue]) in\n+    Minimal${specifier}${kind}(elements: elements).lazy.filter { _ in return true }\n+  },\n+  wrapValueIntoEquatable: identityEq,\n+  extractValueFromEquatable: identityEq\n+)\n+% end\n+\n+// Test collections using reference types as elements.\n+% for (specifier, kind) in variations:\n+CollectionTests.add${specifier}${kind}Tests(\n+  make${kind}: { (elements: [LifetimeTracked]) in\n+    Minimal${specifier}${kind}(elements: elements).lazy.filter { _ in return true }\n+  },\n+  wrapValue: { (element: OpaqueValue<Int>) in\n+    LifetimeTracked(element.value, identity: element.identity)\n+  },\n+  extractValue: { (element: LifetimeTracked) in\n+    OpaqueValue(element.value, identity: element.identity)\n+  },\n+  make${kind}OfEquatable: { (elements: [LifetimeTracked]) in\n+    Minimal${specifier}${kind}(elements: elements).lazy.filter { _ in return true }","path":"validation-test/stdlib/Collection/LazyFilterCollection.swift.gyb","position":56,"original_position":56,"commit_id":"95fdcf7ddc38ff40a82468aa85937325cef96640","original_commit_id":"95fdcf7ddc38ff40a82468aa85937325cef96640","user":{"login":"gribozavr","id":1120569,"avatar_url":"https://avatars.githubusercontent.com/u/1120569?v=3","gravatar_id":"","url":"https://api.github.com/users/gribozavr","html_url":"https://github.com/gribozavr","followers_url":"https://api.github.com/users/gribozavr/followers","following_url":"https://api.github.com/users/gribozavr/following{/other_user}","gists_url":"https://api.github.com/users/gribozavr/gists{/gist_id}","starred_url":"https://api.github.com/users/gribozavr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gribozavr/subscriptions","organizations_url":"https://api.github.com/users/gribozavr/orgs","repos_url":"https://api.github.com/users/gribozavr/repos","events_url":"https://api.github.com/users/gribozavr/events{/privacy}","received_events_url":"https://api.github.com/users/gribozavr/received_events","type":"User","site_admin":false},"body":"I know I asked for a lot of revisions, but this one is very important I think: could you change the closure to be less predictable than always-true?  You would need to inject some extra data into the array, so that you can skip over it.\r\n\r\nThat is, given input elements `[ 1010, 2020, 3030, 4040 ]` we would inject elements like this: `[ 1010, 2020, 9999, 3030, 9999, 9999, 4040 ]` (just an example) and then adjust the predicate to skip the extra elements.  You can even use a random number generator from `stdlib/private/SwiftPrivate/PRNG.swift` to create different patterns each time.\r\n\r\nWhy is this important?  There is tricky logic in moving the index forward/backward in lazy filter collection, because we sometimes need to skip over multiple elements of the underlying collection.","created_at":"2016-04-21T01:17:24Z","updated_at":"2016-04-21T01:17:24Z","html_url":"https://github.com/apple/swift/pull/2247#discussion_r60513789","pull_request_url":"https://api.github.com/repos/apple/swift/pulls/2247","_links":{"self":{"href":"https://api.github.com/repos/apple/swift/pulls/comments/60513789"},"html":{"href":"https://github.com/apple/swift/pull/2247#discussion_r60513789"},"pull_request":{"href":"https://api.github.com/repos/apple/swift/pulls/2247"}}},"pull_request":{"url":"https://api.github.com/repos/apple/swift/pulls/2247","id":67111112,"html_url":"https://github.com/apple/swift/pull/2247","diff_url":"https://github.com/apple/swift/pull/2247.diff","patch_url":"https://github.com/apple/swift/pull/2247.patch","issue_url":"https://api.github.com/repos/apple/swift/issues/2247","number":2247,"state":"open","locked":false,"title":"Adding validation tests for LazyFilterCollection and LazyMapCollection","user":{"login":"austinzheng","id":3687054,"avatar_url":"https://avatars.githubusercontent.com/u/3687054?v=3","gravatar_id":"","url":"https://api.github.com/users/austinzheng","html_url":"https://github.com/austinzheng","followers_url":"https://api.github.com/users/austinzheng/followers","following_url":"https://api.github.com/users/austinzheng/following{/other_user}","gists_url":"https://api.github.com/users/austinzheng/gists{/gist_id}","starred_url":"https://api.github.com/users/austinzheng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/austinzheng/subscriptions","organizations_url":"https://api.github.com/users/austinzheng/orgs","repos_url":"https://api.github.com/users/austinzheng/repos","events_url":"https://api.github.com/users/austinzheng/events{/privacy}","received_events_url":"https://api.github.com/users/austinzheng/received_events","type":"User","site_admin":false},"body":"<!-- Please complete this template before creating pull request. -->\r\n#### What's in this pull request?\r\n\r\n@gribozavr \r\n\r\nThis PR adds validation tests for `LazyFilterCollection` and `LazyMapCollection`. As a side effect, it also makes `LifetimeTracked` formally `Comparable`.\r\n\r\nNOTE: The tests run but some of them fail. Not sure if it's because I am using the stdlib test APIs wrong or because there is an underlying bug with the new collection code, but given they only occur with one of the collection subtypes I'm inclined to believe it's the latter. I've reproduced the failing tests below:\r\n\r\n```\r\nCollection: Some tests failed, aborting\r\nUXPASS: []\r\nFAIL: [\"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.Index/OutOfBounds/Left/NonEmpty\", \"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.Index/OutOfBounds/Left/Empty\", \"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.subscript(_: Range)/OutOfBounds/Left/NonEmpty/Get\", \"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.subscript(_: Range)/OutOfBounds/Left/Empty/Get\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.index(where:)/semantics\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.Index/OutOfBounds/Left/NonEmpty\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.Index/OutOfBounds/Left/Empty\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.subscript(_: Range)/OutOfBounds/Left/NonEmpty/Get\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.subscript(_: Range)/OutOfBounds/Left/Empty/Get\", \"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.Index/OutOfBounds/Left/NonEmpty\", \"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.Index/OutOfBounds/Left/Empty\", \"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.subscript(_: Range)/OutOfBounds/Left/NonEmpty/Get\", \"LazyMapRandomAccessCollection<Array<OpaqueValue<Int>>, OpaqueValue<Int>>.Type.subscript(_: Range)/OutOfBounds/Left/Empty/Get\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.index(where:)/semantics\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.Index/OutOfBounds/Left/NonEmpty\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.Index/OutOfBounds/Left/Empty\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.subscript(_: Range)/OutOfBounds/Left/NonEmpty/Get\", \"LazyMapRandomAccessCollection<Array<LifetimeTracked>, LifetimeTracked>.Type.subscript(_: Range)/OutOfBounds/Left/Empty/Get\"]\r\nSKIP: []\r\n```\r\n\r\n* * * *\r\n\r\n<!-- This selection should only be completed by Swift admin -->\r\nBefore merging this pull request to apple/swift repository:\r\n- [ ] Test pull request on Swift continuous integration.\r\n\r\n<details>\r\n  <summary>Triggering Swift CI</summary>\r\n\r\nThe swift-ci is triggered by writing a comment on this PR addressed to the GitHub user @swift-ci. Different tests will run depending on the specific comment that you use. The currently available comments are:\r\n\r\n**Smoke Testing**\r\n\r\n        Platform     | Comment\r\n        ------------ | -------------\r\n        All supported platforms     | @swift-ci Please smoke test\r\n        OS X platform               | @swift-ci Please smoke test OS X platform\r\n        Linux platform              | @swift-ci Please smoke test Linux platform\r\n\r\n **Validation Testing**\r\n\r\n        Platform     | Comment\r\n        ------------ | -------------\r\n        All supported platforms     | @swift-ci Please test\r\n        OS X platform               | @swift-ci Please test OS X platform\r\n        Linux platform              | @swift-ci Please test Linux platform\r\n\r\nNote: Only members of the Apple organization can trigger swift-ci.\r\n</details>\r\n<!-- Thank you for your contribution to Swift! -->\r\n\r\n","created_at":"2016-04-20T00:19:18Z","updated_at":"2016-04-21T01:17:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ba8c554e4ecb3cec154fd494e03b392e0e10a6e1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apple/swift/pulls/2247/commits","review_comments_url":"https://api.github.com/repos/apple/swift/pulls/2247/comments","review_comment_url":"https://api.github.com/repos/apple/swift/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apple/swift/issues/2247/comments","statuses_url":"https://api.github.com/repos/apple/swift/statuses/95fdcf7ddc38ff40a82468aa85937325cef96640","head":{"label":"austinzheng:swift-3-indexing-model","ref":"swift-3-indexing-model","sha":"95fdcf7ddc38ff40a82468aa85937325cef96640","user":{"login":"austinzheng","id":3687054,"avatar_url":"https://avatars.githubusercontent.com/u/3687054?v=3","gravatar_id":"","url":"https://api.github.com/users/austinzheng","html_url":"https://github.com/austinzheng","followers_url":"https://api.github.com/users/austinzheng/followers","following_url":"https://api.github.com/users/austinzheng/following{/other_user}","gists_url":"https://api.github.com/users/austinzheng/gists{/gist_id}","starred_url":"https://api.github.com/users/austinzheng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/austinzheng/subscriptions","organizations_url":"https://api.github.com/users/austinzheng/orgs","repos_url":"https://api.github.com/users/austinzheng/repos","events_url":"https://api.github.com/users/austinzheng/events{/privacy}","received_events_url":"https://api.github.com/users/austinzheng/received_events","type":"User","site_admin":false},"repo":{"id":47350412,"name":"swift","full_name":"austinzheng/swift","owner":{"login":"austinzheng","id":3687054,"avatar_url":"https://avatars.githubusercontent.com/u/3687054?v=3","gravatar_id":"","url":"https://api.github.com/users/austinzheng","html_url":"https://github.com/austinzheng","followers_url":"https://api.github.com/users/austinzheng/followers","following_url":"https://api.github.com/users/austinzheng/following{/other_user}","gists_url":"https://api.github.com/users/austinzheng/gists{/gist_id}","starred_url":"https://api.github.com/users/austinzheng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/austinzheng/subscriptions","organizations_url":"https://api.github.com/users/austinzheng/orgs","repos_url":"https://api.github.com/users/austinzheng/repos","events_url":"https://api.github.com/users/austinzheng/events{/privacy}","received_events_url":"https://api.github.com/users/austinzheng/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/austinzheng/swift","description":"The Swift Programming Language","fork":true,"url":"https://api.github.com/repos/austinzheng/swift","forks_url":"https://api.github.com/repos/austinzheng/swift/forks","keys_url":"https://api.github.com/repos/austinzheng/swift/keys{/key_id}","collaborators_url":"https://api.github.com/repos/austinzheng/swift/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/austinzheng/swift/teams","hooks_url":"https://api.github.com/repos/austinzheng/swift/hooks","issue_events_url":"https://api.github.com/repos/austinzheng/swift/issues/events{/number}","events_url":"https://api.github.com/repos/austinzheng/swift/events","assignees_url":"https://api.github.com/repos/austinzheng/swift/assignees{/user}","branches_url":"https://api.github.com/repos/austinzheng/swift/branches{/branch}","tags_url":"https://api.github.com/repos/austinzheng/swift/tags","blobs_url":"https://api.github.com/repos/austinzheng/swift/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/austinzheng/swift/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/austinzheng/swift/git/refs{/sha}","trees_url":"https://api.github.com/repos/austinzheng/swift/git/trees{/sha}","statuses_url":"https://api.github.com/repos/austinzheng/swift/statuses/{sha}","languages_url":"https://api.github.com/repos/austinzheng/swift/languages","stargazers_url":"https://api.github.com/repos/austinzheng/swift/stargazers","contributors_url":"https://api.github.com/repos/austinzheng/swift/contributors","subscribers_url":"https://api.github.com/repos/austinzheng/swift/subscribers","subscription_url":"https://api.github.com/repos/austinzheng/swift/subscription","commits_url":"https://api.github.com/repos/austinzheng/swift/commits{/sha}","git_commits_url":"https://api.github.com/repos/austinzheng/swift/git/commits{/sha}","comments_url":"https://api.github.com/repos/austinzheng/swift/comments{/number}","issue_comment_url":"https://api.github.com/repos/austinzheng/swift/issues/comments{/number}","contents_url":"https://api.github.com/repos/austinzheng/swift/contents/{+path}","compare_url":"https://api.github.com/repos/austinzheng/swift/compare/{base}...{head}","merges_url":"https://api.github.com/repos/austinzheng/swift/merges","archive_url":"https://api.github.com/repos/austinzheng/swift/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/austinzheng/swift/downloads","issues_url":"https://api.github.com/repos/austinzheng/swift/issues{/number}","pulls_url":"https://api.github.com/repos/austinzheng/swift/pulls{/number}","milestones_url":"https://api.github.com/repos/austinzheng/swift/milestones{/number}","notifications_url":"https://api.github.com/repos/austinzheng/swift/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/austinzheng/swift/labels{/name}","releases_url":"https://api.github.com/repos/austinzheng/swift/releases{/id}","deployments_url":"https://api.github.com/repos/austinzheng/swift/deployments","created_at":"2015-12-03T18:05:27Z","updated_at":"2016-01-18T23:45:13Z","pushed_at":"2016-04-21T01:07:34Z","git_url":"git://github.com/austinzheng/swift.git","ssh_url":"git@github.com:austinzheng/swift.git","clone_url":"https://github.com/austinzheng/swift.git","svn_url":"https://github.com/austinzheng/swift","homepage":"","size":91771,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apple:swift-3-indexing-model","ref":"swift-3-indexing-model","sha":"6bd5a979e40d78ea35637037b83392051ec6b97c","user":{"login":"apple","id":10639145,"avatar_url":"https://avatars.githubusercontent.com/u/10639145?v=3","gravatar_id":"","url":"https://api.github.com/users/apple","html_url":"https://github.com/apple","followers_url":"https://api.github.com/users/apple/followers","following_url":"https://api.github.com/users/apple/following{/other_user}","gists_url":"https://api.github.com/users/apple/gists{/gist_id}","starred_url":"https://api.github.com/users/apple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apple/subscriptions","organizations_url":"https://api.github.com/users/apple/orgs","repos_url":"https://api.github.com/users/apple/repos","events_url":"https://api.github.com/users/apple/events{/privacy}","received_events_url":"https://api.github.com/users/apple/received_events","type":"Organization","site_admin":false},"repo":{"id":44838949,"name":"swift","full_name":"apple/swift","owner":{"login":"apple","id":10639145,"avatar_url":"https://avatars.githubusercontent.com/u/10639145?v=3","gravatar_id":"","url":"https://api.github.com/users/apple","html_url":"https://github.com/apple","followers_url":"https://api.github.com/users/apple/followers","following_url":"https://api.github.com/users/apple/following{/other_user}","gists_url":"https://api.github.com/users/apple/gists{/gist_id}","starred_url":"https://api.github.com/users/apple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apple/subscriptions","organizations_url":"https://api.github.com/users/apple/orgs","repos_url":"https://api.github.com/users/apple/repos","events_url":"https://api.github.com/users/apple/events{/privacy}","received_events_url":"https://api.github.com/users/apple/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apple/swift","description":"The Swift Programming Language","fork":false,"url":"https://api.github.com/repos/apple/swift","forks_url":"https://api.github.com/repos/apple/swift/forks","keys_url":"https://api.github.com/repos/apple/swift/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apple/swift/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apple/swift/teams","hooks_url":"https://api.github.com/repos/apple/swift/hooks","issue_events_url":"https://api.github.com/repos/apple/swift/issues/events{/number}","events_url":"https://api.github.com/repos/apple/swift/events","assignees_url":"https://api.github.com/repos/apple/swift/assignees{/user}","branches_url":"https://api.github.com/repos/apple/swift/branches{/branch}","tags_url":"https://api.github.com/repos/apple/swift/tags","blobs_url":"https://api.github.com/repos/apple/swift/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apple/swift/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apple/swift/git/refs{/sha}","trees_url":"https://api.github.com/repos/apple/swift/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apple/swift/statuses/{sha}","languages_url":"https://api.github.com/repos/apple/swift/languages","stargazers_url":"https://api.github.com/repos/apple/swift/stargazers","contributors_url":"https://api.github.com/repos/apple/swift/contributors","subscribers_url":"https://api.github.com/repos/apple/swift/subscribers","subscription_url":"https://api.github.com/repos/apple/swift/subscription","commits_url":"https://api.github.com/repos/apple/swift/commits{/sha}","git_commits_url":"https://api.github.com/repos/apple/swift/git/commits{/sha}","comments_url":"https://api.github.com/repos/apple/swift/comments{/number}","issue_comment_url":"https://api.github.com/repos/apple/swift/issues/comments{/number}","contents_url":"https://api.github.com/repos/apple/swift/contents/{+path}","compare_url":"https://api.github.com/repos/apple/swift/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apple/swift/merges","archive_url":"https://api.github.com/repos/apple/swift/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apple/swift/downloads","issues_url":"https://api.github.com/repos/apple/swift/issues{/number}","pulls_url":"https://api.github.com/repos/apple/swift/pulls{/number}","milestones_url":"https://api.github.com/repos/apple/swift/milestones{/number}","notifications_url":"https://api.github.com/repos/apple/swift/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apple/swift/labels{/name}","releases_url":"https://api.github.com/repos/apple/swift/releases{/id}","deployments_url":"https://api.github.com/repos/apple/swift/deployments","created_at":"2015-10-23T21:15:07Z","updated_at":"2016-04-21T00:58:24Z","pushed_at":"2016-04-21T01:14:21Z","git_url":"git://github.com/apple/swift.git","ssh_url":"git@github.com:apple/swift.git","clone_url":"https://github.com/apple/swift.git","svn_url":"https://github.com/apple/swift","homepage":"https://swift.org/","size":140110,"stargazers_count":29451,"watchers_count":29451,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3940,"mirror_url":null,"open_issues_count":78,"forks":3940,"open_issues":78,"watchers":29451,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apple/swift/pulls/2247"},"html":{"href":"https://github.com/apple/swift/pull/2247"},"issue":{"href":"https://api.github.com/repos/apple/swift/issues/2247"},"comments":{"href":"https://api.github.com/repos/apple/swift/issues/2247/comments"},"review_comments":{"href":"https://api.github.com/repos/apple/swift/pulls/2247/comments"},"review_comment":{"href":"https://api.github.com/repos/apple/swift/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apple/swift/pulls/2247/commits"},"statuses":{"href":"https://api.github.com/repos/apple/swift/statuses/95fdcf7ddc38ff40a82468aa85937325cef96640"}}}}