// analysis_intervals.mbt — time interval membership helpers.
//
// Port of `refs/SNNUtils.jl/src/stimuli/sequence/sequence.jl`:
//   - `time_in_interval(x, intervals)` — true if `x ∈ [start, end]` of
//     any interval in `intervals`.
//   - `start_interval(x, intervals)` — start of the interval containing
//     `x`, or -1.0F if no such interval exists.
//
// `intervals` is `Array[Array[Float]]` where each inner array has length 2
// (start, end).

///|
/// Returns true iff `x` is in any interval (start ≤ x ≤ end).
/// `intervals : Array[Array[Float]]` where each inner array has 2 entries
/// (start, end). Empty interval list → false.
pub fn time_in_interval(
  x : Float,
  intervals : Array[Array[Float]],
) -> Bool {
  for i in 0..= 2 {
      if x >= iv[0] && x <= iv[1] {
        return true
      }
    }
  }
  false
}

///|
/// Returns the start of the interval containing `x`, or -1.0F if none.
pub fn start_interval(
  x : Float,
  intervals : Array[Array[Float]],
) -> Float {
  for i in 0..= 2 {
      if x >= iv[0] && x <= iv[1] {
        return iv[0]
      }
    }
  }
  -1.0F
}

///|
/// Returns the end of the interval containing `x`, or -1.0F if none.
/// (Convenience counterpart to `start_interval` — useful in attack_decay
/// functions from `inputs.jl`.)
pub fn end_interval(
  x : Float,
  intervals : Array[Array[Float]],
) -> Float {
  for i in 0..= 2 {
      if x >= iv[0] && x <= iv[1] {
        return iv[1]
      }
    }
  }
  -1.0F
}