#include <iostream>

bool logic_a(double a, double b, double c, double d)
{
    return !((a>b&&c>d)||(a<b&&c<d));
}

bool logic_b(double a, double b, double c, double d)
{
    return (a>=b&&c<=d)||(a<=b&&c>=d)||(a==b)||(c==d);
}

int main()
{
    int num_failures = 0;
    double a,b,c,d;
    for (int i=-1; i<=1; ++i)
    {
        a = i;
        for (int j=-1; j<=1; ++j)
        {
            b = j;
            for (int k=-1; k<=1; ++k)
            {
                c = k;
                for (int l=-1; l<=1; ++l)
                {
                    d = l;
                    if (logic_a(a,b,c,d) != logic_b(a,b,c,d))
                    {
                        std::cout << "failed with:\n";                    
                        std::cout << "  a = " << a << '\n'
                                  << "  b = " << b << '\n'
                                  << "  c = " << c << '\n'
                                  << "  d = " << d << "\n\n";
                        ++num_failures;
                    }

                }
            }
        }
    }
    
    std::cout << num_failures << " failures\n";
    
}