   public let _base: Base_
 }
 
-print(_prext_ReverseCollection(0..<12).startIndex)
-print(_prext_ReverseCollection(0..<12).array)
-print(_prext_ReverseCollection("foobar".characters).array)
-print(_prext_ReverseCollection("foobar".characters).startIndex)
+public struct _prext_ReverseRandomAccessCollection<
+  Base_ : CollectionType where Base_.Index : RandomAccessIndexType
+> : _ReverseCollectionType {
+  
+  public typealias Index = _prext_ReverseRandomAccessIndex<Base_.Index>
+  public typealias Generator = IndexingGenerator<
+    _prext_ReverseRandomAccessCollection
+  >
+  
+  public init(_ base: Base_) {
+    self._base = base
+  }
+
+  public let _base: Base_
+}
+
+tests.test("ReverseCollection") {
+
+  let expected = Array(stride(from: 11, through: 0, by: -1))
+  let r = 0..<12
+  checkRandomAccessCollection(
+    expected,
+    _prext_ReverseRandomAccessCollection(r))
+  
+  checkBidirectionalCollection(
+    "raboof".characters,
+    _prext_ReverseCollection("foobar".characters))
+}
+
 
 /*****
 /// The lazy `CollectionType` returned by `reverse(c)` where `c` is a

}
*/

var tests = TestSuite("Lazy")

tests.test("basics") {
  
}

runAllTests()

}

extension CollectionType
  where Self : _ReverseCollectionType, Self.Index.Base == Self.Base.Index
{
  public var startIndex : Index { return Self.Index(_base.endIndex) }
  public var endIndex : Index { return Self.Index(_base.startIndex) }
  public subscript(position: Index) -> Self.Base.Generator.Element {
    return _base[position._base.predecessor()]
