/// ============================================================================
/// 真实尺寸基准 — 1024² / 4096² 的 PNG 编解码与缩放(B3 现代化,取代 128² 固定小图)
/// ============================================================================

///| 构造 RGB 渐变测试图(x/y/对角分量),尺寸参数化。
///|
///| Build a RGB gradient test image with parameterized size.
fn make_gradient(w : Int32, h : Int32) -> @types.Image noraise {
  let buf : Array[Byte] = []
  for y in 0.. Int32 raise @types.LoadError {
  let bytes : Bytes = @lib.encode_png(img)
  let decoded = @lib.load_from_bytes_auto(bytes)
  decoded.width + decoded.height
}

///|
test (b : @bench.T) {
  let img_1024 = make_gradient(1024, 1024)
  let png_1024 : Bytes = @lib.encode_png(img_1024)
  b.bench(name="png_encode_1024", fn() {
    b.keep(@lib.encode_png(img_1024).length())
  })
  b.bench(name="png_decode_1024", fn() {
    b.keep(try { png_roundtrip(img_1024) } catch { _ => -1 })
  })
  b.bench(name="png_bytes_1024", fn() { b.keep(png_1024.length()) })
}

///|
test (b : @bench.T) {
  let img_1024 = make_gradient(1024, 1024)
  b.bench(name="resize_cover_1024_to_512", fn() {
    b.keep(try {
      let r = @transform.resize_to_cover(img_1024, 512, 512)
      r.width + r.height
    } catch {
      _ => -1
    })
  })
}

///|
test (b : @bench.T) {
  let img_4096 = make_gradient(4096, 4096)
  b.bench(name="png_encode_4096", fn() {
    b.keep(@lib.encode_png(img_4096).length())
  })
  b.bench(name="png_decode_4096", fn() {
    b.keep(try { png_roundtrip(img_4096) } catch { _ => -1 })
  })
}