// Should return 5
float return_loop() {
    for (float i = 0; i < 10; ++i) {
        if (i == 5) { return i; }
    }
    return 0;
}

// Should return 35
float continue_loop() {
    float sum = 0;
    for (float i = 0; i < 10; ++i) {
        if (i < 5) { continue; }
        sum += i;
    }
    return sum;
}

// Should return 15
float break_loop() {
    float sum = 0;
    for (float i = 0; i < 10; ++i) {
        if (i > 5) { break; }
        sum += i;
    }
    return sum;
}

// Should return ~1.725
float float_loop() {
    float sum = 0;
    for (float i = 0.123; i < 0.6; i += 0.111) {
        sum += i;
    }
    return sum;
}

half4 main() {
    return half4(return_loop(), continue_loop(), break_loop(), float_loop());
}
