///|
/// Correctness workload, not a benchmark against Apache ORC.
fn main raise {
  let schema = @orc.Schema::new([
    { name: "id", kind: Long, },
    { name: "tag", kind: String, },
  ])
  let writer = @orc.Writer::new(schema, options={
    ..@orc.WriteOptions::default(),
    compression: Zlib,
    stripe_rows: 1000,
  })
  for block = 0; block < 100; block = block + 1 {
    writer.push(
      @orc.Batch::new(schema, [
        Array::makei(1000, i => Integer((block * 1000 + i).to_int64())),
        Array::makei(1000, i => Text(["a", "b", "c"][i % 3])),
      ]),
    )
  }
  let bytes = writer.finish()
  let file = @orc.OrcFile::open(bytes)
  let scanner = file.scan(
    columns=Some(["id"]),
    predicate=Compare("id", GreaterEqual, Integer(99000L)),
    batch_rows=127,
    trust_statistics=true,
  )
  let mut count = 0
  let mut sum = 0L
  while scanner.next() is Some(batch) {
    count += batch.row_count()
    for v in batch.column("id") {
      if v is Integer(n) {
        sum += n
      }
    }
  }
  assert_eq(count, 1000)
  assert_eq(sum, 99499500L)
  assert_eq(scanner.metrics().stripes_skipped, 99)
  println(
    "scale: 100000 records, 100 stripes, 99 pruned, exact 1000-row result; bytes=\{bytes.length()}",
  )
}