///|
fn main raise {
  // Sorted document identifiers from an inverted-list style workload.
  let documents : Array[UInt64] = [
    2UL, 5UL, 5UL, 21UL, 144UL, 1000UL, 1000000UL,
  ]
  let postings = @eliasfano.from_values(documents)
  assert_eq(postings.to_values(), documents)
  assert_true(postings.contains(144UL))
  assert_false(postings.contains(145UL))
  assert_eq(postings.predecessor(500UL), Some(144UL))
  assert_eq(postings.successor(500UL), Some(1000UL))
  let duplicates = postings.equal_range(5UL)
  assert_eq(duplicates.start, 1)
  assert_eq(duplicates.end, 3)
  let restored = @eliasfano.decode(@eliasfano.encode(postings))
  assert_eq(restored.to_values(), documents)
  let report = postings.space_report()
  println(
    "postings=\{report.logical_items} accounted_bits=\{report.accounted_bits()} serialized_bytes=\{report.serialized_bytes}",
  )
}