You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: float_cmp_const.rs
    path of file: ./repos/rust-clippy/tests/ui
    
    the code of the file until where you have to start completion: // does not test any rustfixable lints
//@no-rustfix
#![warn(clippy::float_cmp_const)]
#![allow(clippy::float_cmp)]
#![allow(unused, clippy::no_effect, clippy::unnecessary_operation)]

const ONE: f32 = 1.0;
const TWO: f32 = 2.0;

fn eq_one(x: f32) -> bool {
    if x.is_nan() { false } else { x == ONE } // no error, inside "eq" fn
}

fn main() {
    // has errors
    1f32 == ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
    TWO == ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` consta
    
fn main() {
    // has errors
    1f32 == ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
    TWO == ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
    TWO != ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
    ONE + ONE == TWO;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
    let x = 1;
    x as f32 == ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`

    let v = 0.9;
    v == ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
    v != ONE;
    //~^ ERROR: strict comparison of `f32` or `f64` constant
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`

    // no errors, lower than or greater than comparisons
    v < ONE;
    v > ONE;
    v <= ONE;
    v >= ONE;

    // no errors, zero and infinity values
    ONE != 0f32;
    TWO == 0f32;
    ONE != f32::INFINITY;
    ONE == f32::NEG_INFINITY;

    // no errors, but will warn clippy::float_cmp if '#![allow(float_cmp)]' above is removed
    let w = 1.1;
    v == w;
    v != w;
    v == 1.0;
    v != 1.0;

    const ZERO_ARRAY: [f32; 3] = [0.0, 0.0, 0.0];
    const ZERO_INF_ARRAY: [f32; 3] = [0.0, f32::INFINITY, f32::NEG_INFINITY];
    const NON_ZERO_ARRAY: [f32; 3] = [0.0, 0.1, 0.2];
    const NON_ZERO_ARRAY2: [f32; 3] = [0.2, 0.1, 0.0];

    // no errors, zero and infinity values
    NON_ZERO_ARRAY[0] == NON_ZERO_ARRAY2[1]; // lhs is 0.0
    ZERO_ARRAY == NON_ZERO_ARRAY; // lhs is all zeros
    ZERO_INF_ARRAY == NON_ZERO_ARRAY; // lhs is all zeros or infinities

    // has errors
    NON_ZERO_ARRAY == NON_ZERO_ARRAY2;
    //~^ ERROR: strict comparison of `f32` or `f64` constant arrays
    //~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
}