Add unit tests for Scheme Rainbow.

PiperOrigin-RevId: 655062545
diff --git a/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeRainbowTests.swift b/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeRainbowTests.swift
index 73800bd..2935c28 100644
--- a/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeRainbowTests.swift
+++ b/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeRainbowTests.swift
@@ -18,6 +18,186 @@
 @testable import MaterialColorUtilities
 
 final class SchemeRainbowTests: XCTestCase {
+  func testKeyColors() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+
+    XCTAssertEqual(scheme.primaryPaletteKeyColor, 0xff69_6FC4)
+    XCTAssertEqual(scheme.secondaryPaletteKeyColor, 0xff75_758B)
+    XCTAssertEqual(scheme.tertiaryPaletteKeyColor, 0xff93_6B84)
+    XCTAssertEqual(scheme.neutralPaletteKeyColor, 0xff77_7777)
+    XCTAssertEqual(scheme.neutralVariantPaletteKeyColor, 0xff77_7777)
+  }
+
+  func testLightTheme_minContrast_primary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.primary, 0xff67_6DC1)
+  }
+
+  func testLightTheme_standardContrast_primary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.primary, 0xff50_56A9)
+  }
+
+  func testLightTheme_maxContrast_primary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.primary, 0xff1b_2074)
+  }
+
+  func testLightTheme_minContrast_primaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.primaryContainer, 0xffd5_d6ff)
+  }
+
+  func testLightTheme_standardContrast_primaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.primaryContainer, 0xffE0_E0FF)
+  }
+
+  func testLightTheme_maxContrast_primaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.primaryContainer, 0xff3a_4092)
+  }
+
+  func testLightTheme_minContrast_tertiaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.tertiaryContainer, 0xfffb_cbe7)
+  }
+
+  func testLightTheme_standardContrast_tertiaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.tertiaryContainer, 0xffff_d8ee)
+  }
+
+  func testLightTheme_maxContrast_tertiaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.tertiaryContainer, 0xff61_3e55)
+  }
+
+  func testLightTheme_minContrast_onPrimaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.onPrimaryContainer, 0xff6c_72c7)
+  }
+
+  func testLightTheme_standardContrast_onPrimaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.onPrimaryContainer, 0xff38_3e8f)
+  }
+
+  func testLightTheme_maxContrast_onPrimaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.onPrimaryContainer, 0xffff_ffff)
+  }
+
+  func testLightTheme_minContrast_surface() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.surface, 0xfff9_f9f9)
+  }
+
+  func testLightTheme_standardContrast_surface() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.surface, 0xfff9_f9f9)
+  }
+
+  func testLightTheme_maxContrast_surface() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.surface, 0xfff9_f9f9)
+  }
+
+  func testLightTheme_standardContrast_secondary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.secondary, 0xff5c_5d72)
+  }
+
+  func testLightTheme_standardContrast_secondaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: false, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.secondaryContainer, 0xffe1_e0f9)
+  }
+
+  func testDarkTheme_minContrast_primary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.primary, 0xff83_89e0)
+  }
+
+  func testDarkTheme_standardContrast_primary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.primary, 0xffbe_c2ff)
+  }
+
+  func testDarkTheme_maxContrast_primary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.primary, 0xfff0_eeff)
+  }
+
+  func testDarkTheme_minContrast_primaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.primaryContainer, 0xff2a_3082)
+  }
+
+  func testDarkTheme_standardContrast_primaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.primaryContainer, 0xff38_3E8F)
+  }
+
+  func testDarkTheme_maxContrast_primaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.primaryContainer, 0xffba_bdff)
+  }
+
+  func testDarkTheme_minContrast_onPrimaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.onPrimaryContainer, 0xff76_7cd2)
+  }
+
+  func testDarkTheme_standardContrast_onPrimaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.onPrimaryContainer, 0xffe0_e0ff)
+  }
+
+  func testDarkTheme_maxContrast_onPrimaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.onPrimaryContainer, 0xff00_003d)
+  }
+
+  func testDarkTheme_minContrast_onTertiaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.onTertiaryContainer, 0xffa1_7891)
+  }
+
+  func testDarkTheme_standardContrast_onTertiaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.onTertiaryContainer, 0xffff_d8ee)
+  }
+
+  func testDarkTheme_maxContrast_onTertiaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.onTertiaryContainer, 0xff1b_0315)
+  }
+
+  func testDarkTheme_minContrast_surface() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: -1.0)
+    XCTAssertEqual(scheme.surface, 0xff13_1313)
+  }
+
+  func testDarkTheme_standardContrast_surface() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.surface, 0xff13_1313)
+  }
+
+  func testDarkTheme_maxContrast_surface() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 1.0)
+    XCTAssertEqual(scheme.surface, 0xff13_1313)
+  }
+
+  func testDarkTheme_standardContrast_secondary() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.secondary, 0xffc5_c4dd)
+  }
+
+  func testDarkTheme_standardContrast_secondaryContainer() {
+    let scheme = SchemeRainbow(sourceColorHct: Hct(0xff00_00ff), isDark: true, contrastLevel: 0.0)
+    XCTAssertEqual(scheme.secondaryContainer, 0xff44_4559)
+  }
+
   func testSchemeRainbowProvider_returnsIdeniticalSchemeWithSameSourceColor() {
     let sourceColorHct = Hct(0xfffa_2bec)
     let isDark = false