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: eq_op.rs
    path of file: ./repos/rust-clippy/tests/ui
    
    the code of the file until where you have to start completion: #![warn(clippy::eq_op)]
#![allow(clippy::double_parens, clippy::identity_op, clippy::nonminimal_bool)]
#![allow(clippy::suspicious_xor_used_as_pow)]

fn main() {
    // simple values and comparisons
    let _ = 1 == 1;
    //~^ ERROR: equal expressions as operands to `==`
    //~| NOTE: `-D clippy::eq-op` implied by `-D warnings`
    let _ = "no" == "no";
    //~^ ERROR: equal expressions as operands to `==`
    // even though I agree that no means no ;-)
    let _ = false != false;
    //~^ ERROR: equal expressions as operands to `!=`
    let _ = 1.5 < 1.5;
    //~^ ERROR: equal expressions as operands to `<`
    let _ = 1u64 >= 1u64;
    //~^ ERROR: equal expressions as operands to `>=`
    let x = f32::NAN;
    let _ = x != x;
    //~^ ERROR: equal expressions as operands to `!=`
    //~| NOTE: if you intended to check if the operand is NaN, use `.is_nan()` instead

    // casts, methods, parentheses
    let _ = (1u32 as u64) & (1u32 as u64);
    //~^ ERROR: equal expressions as operands to `&`
    #[rustfmt::skip]
    {
        let _ = 1 ^ ((((((1))))));
        //~^ ERROR: equal expressions as operands to `^`
    };

    // unary and binary operators
    let _ = (-(2) < -(2));
    //~^ ERROR: equal expressions as operands to `<`
    let _ = ((1 + 1) & (1 + 1) == (1 + 1) & (1 + 1));
    //~^ ERROR: equal expressions as operands to `==`
    //~| ERROR: equal expressions as operands to `&`
    //~| ERROR: equal expressions as operands to `&`
    let _ = (1 * 2) + (3 * 4) == 1 * 2 + 3 * 4;
    //~^ ERROR: equal expressions as operands to `==`

    // various other things
    let _ = ([1] != [1]);
    //~^ ERROR: equal expressions as operands to `!=`
    let _ = ((1, 2) !
    
fn main() {
    // simple values and comparisons
    let _ = 1 == 1;
    //~^ ERROR: equal expressions as operands to `==`
    //~| NOTE: `-D clippy::eq-op` implied by `-D warnings`
    let _ = "no" == "no";
    //~^ ERROR: equal expressions as operands to `==`
    // even though I agree that no means no ;-)
    let _ = false != false;
    //~^ ERROR: equal expressions as operands to `!=`
    let _ = 1.5 < 1.5;
    //~^ ERROR: equal expressions as operands to `<`
    let _ = 1u64 >= 1u64;
    //~^ ERROR: equal expressions as operands to `>=`
    let x = f32::NAN;
    let _ = x != x;
    //~^ ERROR: equal expressions as operands to `!=`
    //~| NOTE: if you intended to check if the operand is NaN, use `.is_nan()` instead

    // casts, methods, parentheses
    let _ = (1u32 as u64) & (1u32 as u64);
    //~^ ERROR: equal expressions as operands to `&`
    #[rustfmt::skip]
    {
        let _ = 1 ^ ((((((1))))));
        //~^ ERROR: equal expressions as operands to `^`
    };

    // unary and binary operators
    let _ = (-(2) < -(2));
    //~^ ERROR: equal expressions as operands to `<`
    let _ = ((1 + 1) & (1 + 1) == (1 + 1) & (1 + 1));
    //~^ ERROR: equal expressions as operands to `==`
    //~| ERROR: equal expressions as operands to `&`
    //~| ERROR: equal expressions as operands to `&`
    let _ = (1 * 2) + (3 * 4) == 1 * 2 + 3 * 4;
    //~^ ERROR: equal expressions as operands to `==`

    // various other things
    let _ = ([1] != [1]);
    //~^ ERROR: equal expressions as operands to `!=`
    let _ = ((1, 2) != (1, 2));
    //~^ ERROR: equal expressions as operands to `!=`
    let _ = vec![1, 2, 3] == vec![1, 2, 3]; //no error yet, as we don't match macros

    // const folding
    let _ = 1 + 1 == 2;
    //~^ ERROR: equal expressions as operands to `==`
    let _ = 1 - 1 == 0;
    //~^ ERROR: equal expressions as operands to `==`
    //~| ERROR: equal expressions as operands to `-`

    let _ = 1 - 1;
    //~^ ERROR: equal expressions as operands to `-`
    let _ = 1 / 1;
    //~^ ERROR: equal expressions as operands to `/`
    let _ = true && true;
    //~^ ERROR: equal expressions as operands to `&&`

    let _ = true || true;
    //~^ ERROR: equal expressions as operands to `||`

    let a: u32 = 0;
    let b: u32 = 0;

    let _ = a == b && b == a;
    //~^ ERROR: equal expressions as operands to `&&`
    let _ = a != b && b != a;
    //~^ ERROR: equal expressions as operands to `&&`
    let _ = a < b && b > a;
    //~^ ERROR: equal expressions as operands to `&&`
    let _ = a <= b && b >= a;
    //~^ ERROR: equal expressions as operands to `&&`

    let mut a = vec![1];
    let _ = a == a;
    //~^ ERROR: equal expressions as operands to `==`
    let _ = 2 * a.len() == 2 * a.len(); // ok, functions
    let _ = a.pop() == a.pop(); // ok, functions

    check_ignore_macro();

    // named constants
    const A: u32 = 10;
    const B: u32 = 10;
    const C: u32 = A / B; // ok, different named constants
    const D: u32 = A / A;
    //~^ ERROR: equal expressions as operands to `/`
}