 			return IndexPath(row: index, section: i.section)
 		}
 
-		if let previous = sections.index(i.section, offsetBy: -1, limitedBy: sections.startIndex) {
-			return IndexPath(row: sections[previous].index(before: sections[previous].endIndex),
-			                 section: previous)
-		}
-
-		return IndexPath(row: 0, section: -1)
+		if i.section == startIndex.section {
+			preconditionFailure("Cannot advance beyond `startIndex`.")
+		}
+
+		let next = sections.index(i.section, offsetBy: -1)
+		return IndexPath(row: sections[next].startIndex, section: next)
 	}
 
 	public func index(after i: IndexPath) -> IndexPath {
+		precondition(i < endIndex)
+
 		let section = sections[i.section]
 
 		if let index = section.index(i.row,

	}

	public var startIndex: IndexPath {
		let start = sections.startIndex
		return IndexPath(row: sections[start].startIndex, section: start)
	}

	public var endIndex: IndexPath {
		let end = sections.index(sections.endIndex, offsetBy: -1, limitedBy: sections.startIndex) ?? sections.startIndex
		return IndexPath(row: sections[end].endIndex, section: end)
	}

	public func index(before i: IndexPath) -> IndexPath {
		let section = sections[i.section]

		if let index = section.index(i.row,

	}

	var startIndex: Int {
		return 0
	}

	var endIndex: Int {
		return storage.count
	}

	subscript(position: Int) -> E {
