// Copyright 2026 MoonBit DSP Authors
// Apache-2.0 License

///|
fn main {
  println("MoonBit DSP native benchmark workload")
  println("fft_radix2: \{Repr(@dsp_benchmark.benchmark_fft_radix2(256, 200))}")
  println(
    "iir_biquad: \{Repr(@dsp_bench.benchmark_iir_biquad(50.0, 1000.0, 1000, 100))}",
  )
  println("fir_filter: \{Repr(@dsp_bench.benchmark_fir_filter(31, 1000, 50))}")
  println(
    "matrix_inversion: \{Repr(@dsp_bench.benchmark_matrix_inversion(8, 20))}",
  )

  let analyzer = @streaming.FrameAnalyzer::new(
    256,
    128,
    8000.0,
    @window.WindowType::hann(),
  )
  let mut frames = 0
  for i = 0; i < 4096; i = i + 1 {
    let t = i.to_double() / 8000.0
    let sample = @cmath.sin(2.0 * @cmath.PI * 1000.0 * t)
    match analyzer.push(sample) {
      Some(_) => frames = frames + 1
      None => ()
    }
  }
  println("frame_analyzer: frames=\{frames}, samples=4096")
}