///|
/// Realistic benchmark dataset simulating a typical 2D RPG / action game UI sprite sheet:
/// contains 64 items across diverse standard categories:
/// - Small system icons (16x16, 24x24)
/// - Inventory item tiles and action badges (32x32, 40x40, 48x48)
/// - Skill icons and avatar portraits (64x64, 80x80)
/// - Horizontal progress bars and status gauges (128x24, 160x32, 200x40)
/// - Vertical equipment cards and weapon slots (48x128, 64x160)
/// - Character portrait cards and banner cards (120x80, 160x100)
pub fn game_ui_sprites() -> Array[Size] {
  [
    // Small action & status icons
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(20, 20),
    Size::new(20, 20),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    // Standard inventory tiles & buttons
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(40, 40),
    Size::new(40, 40),
    Size::new(40, 40),
    Size::new(40, 40),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    // Equipment & skill icons
    Size::new(56, 56),
    Size::new(56, 56),
    Size::new(64, 64),
    Size::new(64, 64),
    Size::new(64, 64),
    Size::new(64, 64),
    Size::new(72, 72),
    Size::new(80, 80),
    // Horizontal gauges & health bars
    Size::new(96, 32),
    Size::new(96, 32),
    Size::new(128, 24),
    Size::new(128, 32),
    Size::new(128, 48),
    Size::new(160, 32),
    Size::new(180, 36),
    Size::new(200, 40),
    // Vertical weapon slots & banners
    Size::new(32, 96),
    Size::new(32, 128),
    Size::new(48, 96),
    Size::new(48, 128),
    Size::new(48, 144),
    Size::new(64, 128),
    Size::new(64, 160),
    // Rectangular cards & portrait frames
    Size::new(80, 60),
    Size::new(80, 60),
    Size::new(90, 60),
    Size::new(100, 70),
    Size::new(100, 70),
    Size::new(120, 80),
    Size::new(120, 90),
    Size::new(140, 90),
    Size::new(150, 100),
    // Mixed UI fragments
    Size::new(36, 36),
    Size::new(44, 44),
    Size::new(52, 28),
    Size::new(28, 52),
    Size::new(68, 34),
    Size::new(34, 68),
    Size::new(84, 42),
    Size::new(42, 84),
  ]
}

///|
/// Realistic benchmark dataset simulating a vector font glyph cache:
/// 80 characters representing Chinese ideographs (Hanzi), Japanese Kana,
/// and extended Latin glyph bounding boxes with uniform or stepped heights:
/// - 16px font size row (width varies 6px..16px)
/// - 24px font size row (width varies 8px..24px)
/// - 32px font size row (width varies 12px..32px)
/// - 48px headline glyphs (width varies 16px..48px)
pub fn font_glyph_cache() -> Array[Size] {
  [
    // 16px row (narrow to square)
    Size::new(6, 16),
    Size::new(8, 16),
    Size::new(10, 16),
    Size::new(12, 16),
    Size::new(14, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(8, 16),
    Size::new(10, 16),
    Size::new(12, 16),
    Size::new(14, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    Size::new(16, 16),
    // 24px row
    Size::new(10, 24),
    Size::new(12, 24),
    Size::new(14, 24),
    Size::new(18, 24),
    Size::new(20, 24),
    Size::new(22, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(12, 24),
    Size::new(14, 24),
    Size::new(18, 24),
    Size::new(20, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    Size::new(24, 24),
    // 32px row (standard high-DPI CJK glyphs)
    Size::new(14, 32),
    Size::new(16, 32),
    Size::new(20, 32),
    Size::new(24, 32),
    Size::new(28, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(16, 32),
    Size::new(20, 32),
    Size::new(24, 32),
    Size::new(28, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    Size::new(32, 32),
    // 48px headline glyphs
    Size::new(24, 48),
    Size::new(28, 48),
    Size::new(32, 48),
    Size::new(36, 48),
    Size::new(40, 48),
    Size::new(44, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(28, 48),
    Size::new(32, 48),
    Size::new(36, 48),
    Size::new(40, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
    Size::new(48, 48),
  ]
}

///|
/// Pathological / stress test dataset containing 32 extreme aspect ratio items:
/// needle-like horizontal and vertical strips (aspect ratios up to 128:1),
/// prime dimension shapes, and large awkward blocks.
pub fn pathological_aspect_ratios() -> Array[Size] {
  [
    // Extreme horizontal ribbons
    Size::new(128, 2),
    Size::new(128, 3),
    Size::new(200, 4),
    Size::new(250, 5),
    Size::new(300, 6),
    Size::new(150, 3),
    Size::new(180, 4),
    Size::new(220, 5),
    // Extreme vertical needles
    Size::new(2, 128),
    Size::new(3, 128),
    Size::new(4, 200),
    Size::new(5, 250),
    Size::new(6, 300),
    Size::new(3, 150),
    Size::new(4, 180),
    Size::new(5, 220),
    // Prime dimensions (resists clean division)
    Size::new(17, 31),
    Size::new(31, 17),
    Size::new(43, 67),
    Size::new(67, 43),
    Size::new(53, 79),
    Size::new(79, 53),
    Size::new(97, 23),
    Size::new(23, 97),
    // Large dominant blocks mixed with slivers
    Size::new(180, 180),
    Size::new(190, 110),
    Size::new(110, 190),
    Size::new(200, 2),
    Size::new(2, 200),
    Size::new(15, 15),
    Size::new(13, 13),
    Size::new(11, 11),
  ]
}

///|
/// Large-scale dataset of 160 mixed items to stress-test multi-bin automatic overflow,
/// memory stability, and execution speed across multiple atlas pages.
pub fn large_scale_sprites() -> Array[Size] {
  let list = []
  let base_ui = game_ui_sprites()
  for item in base_ui {
    list.push(item)
  }
  let font = font_glyph_cache()
  for item in font {
    list.push(item)
  }
  let path = pathological_aspect_ratios()
  for item in path {
    if list.length() < 160 {
      list.push(item)
    }
  }
  list
}