# Gemini

---

Here is the logic for determining a leap year from first principles, followed by the Rust implementation and tests.

### Leap Year Rules

A year is a leap year if it meets the following conditions:

1. It is evenly divisible by 4.

2. If it is also evenly divisible by 100, it is **not** a leap year, **unless**:

3. It is also evenly divisible by 400.

### Rust Implementation

```rust
/// Determines if a given year is a leap year from first principles.
fn is_leap_year(year: u32) -> bool {
    if year % 400 == 0 {
        true
    } else if year % 100 == 0 {
        false
    } else if year % 4 == 0 {
        true
    } else {
        false
    }
}

fn main() {
    // Test cases provided
    let test_years = [1, 4, 2023, 2024, 2025, 2048, 1900, 2100, 1600, 2000];

    // Expected outcomes based on leap year rules
    let expected_results = [
        false, // 1    -> Not divisible by 4
        true,  // 4    -> Divisible by 4, not 100
        false, // 2023 -> Not divisible by 4
        true,  // 2024 -> Divisible by 4, not 100
        false, // 2025 -> Not divisible by 4
        true,  // 2048 -> Divisible by 4, not 100
        false, // 1900 -> Divisible by 100, but not 400
        false, // 2100 -> Divisible by 100, but not 400
        true,  // 1600 -> Divisible by 400
        true,  // 2000 -> Divisible by 400
    ];

    let mut all_passed = true;

    println!("Year\t| Expected\t| Actual\t| Result");
    println!("-------------------------------------------------");

    for i in 0..test_years.len() {
        let year = test_years[i];
        let expected = expected_results[i];
        let actual = is_leap_year(year);
        let passed = actual == expected;

        if !passed {
            all_passed = false;
        }

        println!("{}\t| {}\t\t| {}\t\t| {}", 
            year, 
            expected, 
            actual, 
            if passed { "PASSED" } else { "FAILED" }
        );
    }

    println!("-------------------------------------------------");
    if all_passed {
        println!("All tests passed successfully.");
    } else {
        println!("Some tests failed.");
    }
}
```

### Model Used

- Gemini 3.5 Flash
