// -*- C++ -*-
//===------------------------------ span ---------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===---------------------------------------------------------------------===//
// UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 

// <span>

// template<class T, ptrdiff_t X, class U, ptrdiff_t Y>
//   constexpr bool operator!=(span<T, X> l, span<U, Y> r);
//   
//
// Effects: Equivalent to: return !(l == r);
//

#include <span>
#include <cassert>

#include "test_macros.h"

struct A{};
bool operator==(A, A) {return true;}

constexpr   int iArr1[] = { 0,  1,  2,  1,  2,  5,  6,  7,  8,  9};
            int iArr2[] = { 0,  1,  2,  1,  2,  5,  6,  7,  8,  9};
constexpr float fArr1[]  = {0., 1., 2., 1., 2., 5., 6., 7., 8., 9.};
          float fArr2[]  = {0., 1., 2., 1., 2., 5., 6., 7., 8., 9.};
         

int main () {

    constexpr std::span<const int>     csp0d{};
    constexpr std::span<const int>     csp1d{iArr1, 10};
    constexpr std::span<const int>     csp2d{iArr1 + 3, 2};
    constexpr std::span<const int>     csp3d{iArr1 + 1, 2};
    constexpr std::span<const int>     csp4d{iArr1 + 6, 2};

    constexpr std::span<const int,  0> csp0s{};
    constexpr std::span<const int, 10> csp1s{iArr1, 10};
    constexpr std::span<const int, 2>  csp2s{iArr1 + 3, 2};
    constexpr std::span<const int, 2>  csp3s{iArr1 + 1, 2};
    constexpr std::span<const int, 2>  csp4s{iArr1 + 6, 2};

    static_assert(!(csp0d != csp0d), "");
    static_assert(!(csp0s != csp0s), "");
    static_assert(!(csp0s != csp0d), "");
    static_assert(!(csp0d != csp0s), "");
    
    static_assert( (csp0d != csp1d), "");
    static_assert( (csp0s != csp1s), "");
    static_assert( (csp0s != csp1d), "");
    static_assert( (csp0d != csp1s), "");
    
    static_assert(!(csp1d != csp1s), "");
    static_assert(!(csp1s != csp1d), "");
    
    static_assert(!(csp2d != csp3d), "");
    static_assert(!(csp2s != csp3s), "");
    static_assert(!(csp2d != csp3s), "");
    static_assert(!(csp2s != csp3d), "");

    static_assert(!(csp2d != csp3d), "");
    static_assert(!(csp2s != csp3s), "");
    static_assert(!(csp2d != csp3s), "");
    static_assert(!(csp2s != csp3d), "");

    static_assert( (csp2d != csp4d), "");
    static_assert( (csp2s != csp4s), "");
    static_assert( (csp2d != csp4s), "");
    static_assert( (csp2s != csp4d), "");

    static_assert( (csp4d != csp2d), "");
    static_assert( (csp4s != csp2s), "");
    static_assert( (csp4d != csp2s), "");
    static_assert( (csp4s != csp2d), "");

    std::span<int>     sp0d{};
    std::span<int>     sp1d{iArr2, 10};
    std::span<int>     sp2d{iArr2 + 3, 2};
    std::span<int>     sp3d{iArr2 + 1, 2};
    std::span<int>     sp4d{iArr2 + 6, 2};

    std::span<int,  0> sp0s{};
    std::span<int, 10> sp1s{iArr2, 10};
    std::span<int, 2>  sp2s{iArr2 + 3, 2};
    std::span<int, 2>  sp3s{iArr2 + 1, 2};
    std::span<int, 2>  sp4s{iArr2 + 6, 2};

    assert(!(sp0d != sp0d));
    assert(!(sp0s != sp0s));
    assert(!(sp0s != sp0d));
    assert(!(sp0d != sp0s));
    
    assert( (sp0d != sp1d));
    assert( (sp0s != sp1s));
    assert( (sp0s != sp1d));
    assert( (sp0d != sp1s));
    
    assert(!(sp1d != sp1s));
    assert(!(sp1s != sp1d));
    
    assert(!(sp2d != sp3d));
    assert(!(sp2s != sp3s));
    assert(!(sp2d != sp3s));
    assert(!(sp2s != sp3d));

    assert(!(sp2d != sp3d));
    assert(!(sp2s != sp3s));
    assert(!(sp2d != sp3s));
    assert(!(sp2s != sp3d));

    assert( (sp2d != sp4d));
    assert( (sp2s != sp4s));
    assert( (sp2d != sp4s));
    assert( (sp2s != sp4d));

    assert( (sp4d != sp2d));
    assert( (sp4s != sp2s));
    assert( (sp4d != sp2s));
    assert( (sp4s != sp2d));

//  cross type comparisons
    assert(!(csp0d != sp0d));
    assert(!(csp0s != sp0s));
    assert(!(csp0s != sp0d));
    assert(!(csp0d != sp0s));
    
    assert( (csp0d != sp1d));
    assert( (csp0s != sp1s));
    assert( (csp0s != sp1d));
    assert( (csp0d != sp1s));
    
    assert(!(csp1d != sp1s));
    assert(!(csp1s != sp1d));
    
    assert(!(csp2d != sp3d));
    assert(!(csp2s != sp3s));
    assert(!(csp2d != sp3s));
    assert(!(csp2s != sp3d));

    assert(!(csp2d != sp3d));
    assert(!(csp2s != sp3s));
    assert(!(csp2d != sp3s));
    assert(!(csp2s != sp3d));

    assert( (csp2d != sp4d));
    assert( (csp2s != sp4s));
    assert( (csp2d != sp4s));
    assert( (csp2s != sp4d));
    
    assert( (csp4d != sp2d));
    assert( (csp4s != sp2s));
    assert( (csp4d != sp2s));
    assert( (csp4s != sp2d));

//  More cross-type comparisons (int vs float)
    static_assert(!(std::span<const float>{fArr1} != std::span<const   int>{iArr1}), "");
    static_assert(!(std::span<const   int>{iArr1} != std::span<const float>{fArr1}), "");
    assert(!(std::span<float>{fArr2} != std::span<int>{iArr2}));
    assert(!(std::span<int>{iArr2} != std::span<float>{fArr2}));

    static_assert( (std::span<const   int>{iArr1, 9} != std::span<const float>{fArr1, 8}), "");
}