// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "../../../testing/fx_string_testhelpers.h"
#include "../../include/fxcrt/fx_string.h"
#include "testing/gtest/include/gtest/gtest.h"

TEST(fxcrt, ByteStringOperatorSubscript) {
    // CFX_ByteString includes the NUL terminator for non-empty strings.
    CFX_ByteString abc("abc");
    EXPECT_EQ('a', abc[0]);
    EXPECT_EQ('b', abc[1]);
    EXPECT_EQ('c', abc[2]);
    EXPECT_EQ(0, abc[3]);
}

TEST(fxcrt, ByteStringOperatorLT) {
    CFX_ByteString empty;
    CFX_ByteString a("a");
    CFX_ByteString abc("abc");
    CFX_ByteString def("def");

    EXPECT_FALSE(empty < empty);
    EXPECT_FALSE(a < a);
    EXPECT_FALSE(abc < abc);
    EXPECT_FALSE(def < def);

    EXPECT_TRUE(empty < a);
    EXPECT_FALSE(a < empty);

    EXPECT_TRUE(empty < abc);
    EXPECT_FALSE(abc < empty);

    EXPECT_TRUE(empty < def);
    EXPECT_FALSE(def < empty);

    EXPECT_TRUE(a < abc);
    EXPECT_FALSE(abc < a);

    EXPECT_TRUE(a < def);
    EXPECT_FALSE(def < a);

    EXPECT_TRUE(abc < def);
    EXPECT_FALSE(def < abc);
}

TEST(fxcrt, ByteStringOperatorEQ) {
    CFX_ByteString null_string;
    EXPECT_TRUE(null_string == null_string);

    CFX_ByteString empty_string("");
    EXPECT_TRUE(empty_string == empty_string);
    EXPECT_TRUE(empty_string == null_string);
    EXPECT_TRUE(null_string == empty_string);

    CFX_ByteString deleted_string("hello");
    deleted_string.Delete(0, 5);
    EXPECT_TRUE(deleted_string == deleted_string);
    EXPECT_TRUE(deleted_string == null_string);
    EXPECT_TRUE(deleted_string == empty_string);
    EXPECT_TRUE(null_string == deleted_string);
    EXPECT_TRUE(empty_string == deleted_string);

    CFX_ByteString byte_string("hello");
    EXPECT_TRUE(byte_string == byte_string);
    EXPECT_FALSE(byte_string == null_string);
    EXPECT_FALSE(byte_string == empty_string);
    EXPECT_FALSE(byte_string == deleted_string);
    EXPECT_FALSE(null_string == byte_string);
    EXPECT_FALSE(empty_string == byte_string);
    EXPECT_FALSE(deleted_string == byte_string);

    CFX_ByteString byte_string_same1("hello");
    EXPECT_TRUE(byte_string == byte_string_same1);
    EXPECT_TRUE(byte_string_same1 == byte_string);

    CFX_ByteString byte_string_same2(byte_string);
    EXPECT_TRUE(byte_string == byte_string_same2);
    EXPECT_TRUE(byte_string_same2 == byte_string);

    CFX_ByteString byte_string1("he");
    CFX_ByteString byte_string2("hellp");
    CFX_ByteString byte_string3("hellod");
    EXPECT_FALSE(byte_string == byte_string1);
    EXPECT_FALSE(byte_string == byte_string2);
    EXPECT_FALSE(byte_string == byte_string3);
    EXPECT_FALSE(byte_string1 == byte_string);
    EXPECT_FALSE(byte_string2 == byte_string);
    EXPECT_FALSE(byte_string3 == byte_string);

    CFX_ByteStringC null_string_c;
    CFX_ByteStringC empty_string_c("");
    EXPECT_TRUE(null_string == null_string_c);
    EXPECT_TRUE(null_string == empty_string_c);
    EXPECT_TRUE(empty_string == null_string_c);
    EXPECT_TRUE(empty_string == empty_string_c);
    EXPECT_TRUE(deleted_string == null_string_c);
    EXPECT_TRUE(deleted_string == empty_string_c);
    EXPECT_TRUE(null_string_c == null_string);
    EXPECT_TRUE(empty_string_c == null_string);
    EXPECT_TRUE(null_string_c == empty_string);
    EXPECT_TRUE(empty_string_c == empty_string);
    EXPECT_TRUE(null_string_c == deleted_string);
    EXPECT_TRUE(empty_string_c == deleted_string);

    CFX_ByteStringC byte_string_c_same1("hello");
    EXPECT_TRUE(byte_string == byte_string_c_same1);
    EXPECT_TRUE(byte_string_c_same1 == byte_string);

    CFX_ByteStringC byte_string_c1("he");
    CFX_ByteStringC byte_string_c2("hellp");
    CFX_ByteStringC byte_string_c3("hellod");
    EXPECT_FALSE(byte_string == byte_string_c1);
    EXPECT_FALSE(byte_string == byte_string_c2);
    EXPECT_FALSE(byte_string == byte_string_c3);
    EXPECT_FALSE(byte_string_c1 == byte_string);
    EXPECT_FALSE(byte_string_c2 == byte_string);
    EXPECT_FALSE(byte_string_c3 == byte_string);

    const char* c_null_string = nullptr;
    const char* c_empty_string = "";
    EXPECT_TRUE(null_string == c_null_string);
    EXPECT_TRUE(null_string == c_empty_string);
    EXPECT_TRUE(empty_string == c_null_string);
    EXPECT_TRUE(empty_string == c_empty_string);
    EXPECT_TRUE(deleted_string == c_null_string);
    EXPECT_TRUE(deleted_string == c_empty_string);
    EXPECT_TRUE(c_null_string == null_string);
    EXPECT_TRUE(c_empty_string == null_string);
    EXPECT_TRUE(c_null_string == empty_string);
    EXPECT_TRUE(c_empty_string == empty_string);
    EXPECT_TRUE(c_null_string == deleted_string);
    EXPECT_TRUE(c_empty_string == deleted_string);

    const char* c_string_same1 = "hello";
    EXPECT_TRUE(byte_string == c_string_same1);
    EXPECT_TRUE(c_string_same1 == byte_string);

    const char* c_string1 = "he";
    const char* c_string2 = "hellp";
    const char* c_string3 = "hellod";
    EXPECT_FALSE(byte_string == c_string1);
    EXPECT_FALSE(byte_string == c_string2);
    EXPECT_FALSE(byte_string == c_string3);
    EXPECT_FALSE(c_string1 == byte_string);
    EXPECT_FALSE(c_string2 == byte_string);
    EXPECT_FALSE(c_string3 == byte_string);
}

TEST(fxcrt, ByteStringOperatorNE) {
    CFX_ByteString null_string;
    EXPECT_FALSE(null_string != null_string);

    CFX_ByteString empty_string("");
    EXPECT_FALSE(empty_string != empty_string);
    EXPECT_FALSE(empty_string != null_string);
    EXPECT_FALSE(null_string != empty_string);

    CFX_ByteString deleted_string("hello");
    deleted_string.Delete(0, 5);
    EXPECT_FALSE(deleted_string != deleted_string);
    EXPECT_FALSE(deleted_string != null_string);
    EXPECT_FALSE(deleted_string != empty_string);
    EXPECT_FALSE(deleted_string != deleted_string);
    EXPECT_FALSE(null_string != deleted_string);
    EXPECT_FALSE(empty_string != deleted_string);
    EXPECT_FALSE(deleted_string != deleted_string);

    CFX_ByteString byte_string("hello");
    EXPECT_FALSE(byte_string != byte_string);
    EXPECT_TRUE(byte_string != null_string);
    EXPECT_TRUE(byte_string != empty_string);
    EXPECT_TRUE(byte_string != deleted_string);
    EXPECT_TRUE(null_string != byte_string);
    EXPECT_TRUE(empty_string != byte_string);
    EXPECT_TRUE(deleted_string != byte_string);

    CFX_ByteString byte_string_same1("hello");
    EXPECT_FALSE(byte_string != byte_string_same1);
    EXPECT_FALSE(byte_string_same1 != byte_string);

    CFX_ByteString byte_string_same2(byte_string);
    EXPECT_FALSE(byte_string != byte_string_same2);
    EXPECT_FALSE(byte_string_same2 != byte_string);

    CFX_ByteString byte_string1("he");
    CFX_ByteString byte_string2("hellp");
    CFX_ByteString byte_string3("hellod");
    EXPECT_TRUE(byte_string != byte_string1);
    EXPECT_TRUE(byte_string != byte_string2);
    EXPECT_TRUE(byte_string != byte_string3);
    EXPECT_TRUE(byte_string1 != byte_string);
    EXPECT_TRUE(byte_string2 != byte_string);
    EXPECT_TRUE(byte_string3 != byte_string);

    CFX_ByteStringC null_string_c;
    CFX_ByteStringC empty_string_c("");
    EXPECT_FALSE(null_string != null_string_c);
    EXPECT_FALSE(null_string != empty_string_c);
    EXPECT_FALSE(empty_string != null_string_c);
    EXPECT_FALSE(empty_string != empty_string_c);
    EXPECT_FALSE(null_string_c != null_string);
    EXPECT_FALSE(empty_string_c != null_string);
    EXPECT_FALSE(null_string_c != empty_string);
    EXPECT_FALSE(empty_string_c != empty_string);

    CFX_ByteStringC byte_string_c_same1("hello");
    EXPECT_FALSE(byte_string != byte_string_c_same1);
    EXPECT_FALSE(byte_string_c_same1 != byte_string);

    CFX_ByteStringC byte_string_c1("he");
    CFX_ByteStringC byte_string_c2("hellp");
    CFX_ByteStringC byte_string_c3("hellod");
    EXPECT_TRUE(byte_string != byte_string_c1);
    EXPECT_TRUE(byte_string != byte_string_c2);
    EXPECT_TRUE(byte_string != byte_string_c3);
    EXPECT_TRUE(byte_string_c1 != byte_string);
    EXPECT_TRUE(byte_string_c2 != byte_string);
    EXPECT_TRUE(byte_string_c3 != byte_string);

    const char* c_null_string = nullptr;
    const char* c_empty_string = "";
    EXPECT_FALSE(null_string != c_null_string);
    EXPECT_FALSE(null_string != c_empty_string);
    EXPECT_FALSE(empty_string != c_null_string);
    EXPECT_FALSE(empty_string != c_empty_string);
    EXPECT_FALSE(deleted_string != c_null_string);
    EXPECT_FALSE(deleted_string != c_empty_string);
    EXPECT_FALSE(c_null_string != null_string);
    EXPECT_FALSE(c_empty_string != null_string);
    EXPECT_FALSE(c_null_string != empty_string);
    EXPECT_FALSE(c_empty_string != empty_string);
    EXPECT_FALSE(c_null_string != deleted_string);
    EXPECT_FALSE(c_empty_string != deleted_string);

    const char* c_string_same1 = "hello";
    EXPECT_FALSE(byte_string != c_string_same1);
    EXPECT_FALSE(c_string_same1 != byte_string);

    const char* c_string1 = "he";
    const char* c_string2 = "hellp";
    const char* c_string3 = "hellod";
    EXPECT_TRUE(byte_string != c_string1);
    EXPECT_TRUE(byte_string != c_string2);
    EXPECT_TRUE(byte_string != c_string3);
    EXPECT_TRUE(c_string1 != byte_string);
    EXPECT_TRUE(c_string2 != byte_string);
    EXPECT_TRUE(c_string3 != byte_string);
}

TEST(fxcrt, ByteStringCNull) {
  CFX_ByteStringC null_string;
  EXPECT_EQ(null_string.GetPtr(), nullptr);
  EXPECT_EQ(null_string.GetLength(), 0);
  EXPECT_TRUE(null_string.IsEmpty());

  CFX_ByteStringC another_null_string;
  EXPECT_EQ(null_string, another_null_string);

  CFX_ByteStringC copied_null_string(null_string);
  EXPECT_EQ(copied_null_string.GetPtr(), nullptr);
  EXPECT_EQ(copied_null_string.GetLength(), 0);
  EXPECT_TRUE(copied_null_string.IsEmpty());
  EXPECT_EQ(null_string, copied_null_string);

  CFX_ByteStringC empty_string("");  // Pointer to NUL, not NULL pointer.
  EXPECT_NE(empty_string.GetPtr(), nullptr);
  EXPECT_EQ(empty_string.GetLength(), 0);
  EXPECT_TRUE(empty_string.IsEmpty());
  EXPECT_EQ(null_string, empty_string);

  CFX_ByteStringC assigned_null_string("initially not NULL");
  assigned_null_string = null_string;
  EXPECT_EQ(assigned_null_string.GetPtr(), nullptr);
  EXPECT_EQ(assigned_null_string.GetLength(), 0);
  EXPECT_TRUE(assigned_null_string.IsEmpty());
  EXPECT_EQ(null_string, assigned_null_string);

  CFX_ByteStringC assigned_nullptr_string("initially not NULL");
  assigned_nullptr_string = (const FX_CHAR*)nullptr;
  EXPECT_EQ(assigned_nullptr_string.GetPtr(), nullptr);
  EXPECT_EQ(assigned_nullptr_string.GetLength(), 0);
  EXPECT_TRUE(assigned_nullptr_string.IsEmpty());
  EXPECT_EQ(null_string, assigned_nullptr_string);

  CFX_ByteStringC non_null_string("a");
  EXPECT_NE(null_string, non_null_string);
}

TEST(fxcrt, ByteStringConcatInPlace) {
    CFX_ByteString fred;
    fred.ConcatInPlace(4, "FRED");
    EXPECT_EQ("FRED", fred);

    fred.ConcatInPlace(2, "DY");
    EXPECT_EQ("FREDDY", fred);

    fred.Delete(3, 3);
    EXPECT_EQ("FRE", fred);

    fred.ConcatInPlace(1, "D");
    EXPECT_EQ("FRED", fred);

    CFX_ByteString copy = fred;
    fred.ConcatInPlace(2, "DY");
    EXPECT_EQ("FREDDY", fred);
    EXPECT_EQ("FRED", copy);

    // Test invalid arguments.
    copy = fred;
    fred.ConcatInPlace(-6, "freddy");
    CFX_ByteString not_aliased("xxxxxx");
    EXPECT_EQ("FREDDY", fred);
    EXPECT_EQ("xxxxxx", not_aliased);
}

TEST(fxcrt, ByteStringCNotNull) {
  CFX_ByteStringC string3("abc");
  CFX_ByteStringC string6("abcdef");
  CFX_ByteStringC alternate_string3("abcdef", 3);
  CFX_ByteStringC embedded_nul_string7("abc\0def", 7);
  CFX_ByteStringC illegal_string7("abcdef", 7);

  EXPECT_EQ(3, string3.GetLength());
  EXPECT_EQ(6, string6.GetLength());
  EXPECT_EQ(3, alternate_string3.GetLength());
  EXPECT_EQ(7, embedded_nul_string7.GetLength());
  EXPECT_EQ(7, illegal_string7.GetLength());

  EXPECT_NE(string3, string6);
  EXPECT_EQ(string3, alternate_string3);
  EXPECT_NE(string3, embedded_nul_string7);
  EXPECT_NE(string3, illegal_string7);
  EXPECT_NE(string6, alternate_string3);
  EXPECT_NE(string6, embedded_nul_string7);
  EXPECT_NE(string6, illegal_string7);
  EXPECT_NE(alternate_string3, embedded_nul_string7);
  EXPECT_NE(alternate_string3, illegal_string7);
  EXPECT_NE(embedded_nul_string7, illegal_string7);

  CFX_ByteStringC copied_string3(string3);
  CFX_ByteStringC copied_alternate_string3(alternate_string3);
  CFX_ByteStringC copied_embedded_nul_string7(embedded_nul_string7);

  EXPECT_EQ(string3, copied_string3);
  EXPECT_EQ(alternate_string3, copied_alternate_string3);
  EXPECT_EQ(embedded_nul_string7, copied_embedded_nul_string7);

  CFX_ByteStringC assigned_string3("intially something else");
  CFX_ByteStringC assigned_alternate_string3("initally something else");
  CFX_ByteStringC assigned_ptr_string3("initially something else");
  CFX_ByteStringC assigned_embedded_nul_string7("initially something else");

  assigned_string3 = string3;
  assigned_alternate_string3 = alternate_string3;
  assigned_ptr_string3 = "abc";
  assigned_embedded_nul_string7 = embedded_nul_string7;
  EXPECT_EQ(string3, assigned_string3);
  EXPECT_EQ(alternate_string3, assigned_alternate_string3);
  EXPECT_EQ(alternate_string3, assigned_ptr_string3);
  EXPECT_EQ(embedded_nul_string7, assigned_embedded_nul_string7);
}

TEST(fxcrt, ByteStringCFromChar) {
  CFX_ByteStringC null_string;
  CFX_ByteStringC lower_a_string("a");

  // Must have lvalues that outlive the corresponding ByteStringC.
  char nul = '\0';
  char lower_a = 'a';
  CFX_ByteStringC nul_string_from_char(nul);
  CFX_ByteStringC lower_a_string_from_char(lower_a);

  // Pointer to nul, not NULL ptr, hence length 1 ...
  EXPECT_EQ(1, nul_string_from_char.GetLength());
  EXPECT_NE(null_string, nul_string_from_char);

  EXPECT_EQ(1, lower_a_string_from_char.GetLength());
  EXPECT_EQ(lower_a_string, lower_a_string_from_char);
  EXPECT_NE(nul_string_from_char, lower_a_string_from_char);

  CFX_ByteStringC longer_string("ab");
  EXPECT_NE(longer_string, lower_a_string_from_char);
}

TEST(fxcrt, ByteStringCGetID) {
  CFX_ByteStringC null_string;
  EXPECT_EQ(0u, null_string.GetID());
  EXPECT_EQ(0u, null_string.GetID(1));
  EXPECT_EQ(0u, null_string.GetID(-1));
  EXPECT_EQ(0u, null_string.GetID(-1000000));

  CFX_ByteStringC empty_string("");
  EXPECT_EQ(0u, empty_string.GetID());
  EXPECT_EQ(0u, empty_string.GetID(1));
  EXPECT_EQ(0u, empty_string.GetID(-1));
  EXPECT_EQ(0u, empty_string.GetID(-1000000));

  CFX_ByteStringC short_string("ab");
  EXPECT_EQ(FXBSTR_ID('a', 'b', 0, 0), short_string.GetID());
  EXPECT_EQ(FXBSTR_ID('b', 0, 0, 0), short_string.GetID(1));
  EXPECT_EQ(0u, short_string.GetID(2));
  EXPECT_EQ(0u, short_string.GetID(-1));
  EXPECT_EQ(0u, short_string.GetID(-1000000));

  CFX_ByteStringC longer_string("abcdef");
  EXPECT_EQ(FXBSTR_ID('a', 'b', 'c', 'd'), longer_string.GetID());
  EXPECT_EQ(FXBSTR_ID('b', 'c', 'd', 'e'), longer_string.GetID(1));
  EXPECT_EQ(FXBSTR_ID('c', 'd', 'e', 'f'), longer_string.GetID(2));
  EXPECT_EQ(FXBSTR_ID('d', 'e', 'f', 0), longer_string.GetID(3));
  EXPECT_EQ(FXBSTR_ID('e', 'f', 0 , 0), longer_string.GetID(4));
  EXPECT_EQ(FXBSTR_ID('f', 0 , 0, 0), longer_string.GetID(5));
  EXPECT_EQ(0u, longer_string.GetID(6));
  EXPECT_EQ(0u, longer_string.GetID(-1));
  EXPECT_EQ(0u, longer_string.GetID(-1000000));
}

TEST(fxcrt, ByteStringCMid) {
  CFX_ByteStringC null_string;
  EXPECT_EQ(null_string, null_string.Mid(0, 1));
  EXPECT_EQ(null_string, null_string.Mid(1, 1));

  CFX_ByteStringC empty_string("");
  EXPECT_EQ(empty_string, empty_string.Mid(0, 1));
  EXPECT_EQ(empty_string, empty_string.Mid(1, 1));

  CFX_ByteStringC single_character("a");
  EXPECT_EQ(empty_string, single_character.Mid(0, 0));
  EXPECT_EQ(single_character, single_character.Mid(0, 1));
  EXPECT_EQ(empty_string, single_character.Mid(1, 0));
  EXPECT_EQ(empty_string, single_character.Mid(1, 1));

  CFX_ByteStringC longer_string("abcdef");
  EXPECT_EQ(longer_string, longer_string.Mid(0, 6));
  EXPECT_EQ(longer_string, longer_string.Mid(0, 187));
  EXPECT_EQ(longer_string, longer_string.Mid(-42, 6));
  EXPECT_EQ(longer_string, longer_string.Mid(-42, 187));

  CFX_ByteStringC leading_substring("ab");
  EXPECT_EQ(leading_substring, longer_string.Mid(0, 2));
  EXPECT_EQ(leading_substring, longer_string.Mid(-1, 2));

  CFX_ByteStringC middle_substring("bcde");
  EXPECT_EQ(middle_substring, longer_string.Mid(1, 4));

  CFX_ByteStringC trailing_substring("ef");
  EXPECT_EQ(trailing_substring, longer_string.Mid(4, 2));
  EXPECT_EQ(trailing_substring, longer_string.Mid(4, 3));
}

TEST(fxcrt, ByteStringCGetAt) {
  CFX_ByteString short_string("a");
  CFX_ByteString longer_string("abc");
  CFX_ByteString embedded_nul_string("ab\0c", 4);

  EXPECT_EQ('a', short_string.GetAt(0));
  EXPECT_EQ('c', longer_string.GetAt(2));
  EXPECT_EQ('b', embedded_nul_string.GetAt(1));
  EXPECT_EQ('\0', embedded_nul_string.GetAt(2));
  EXPECT_EQ('c', embedded_nul_string.GetAt(3));
}

TEST(fxcrt, ByteStringCOperatorSubscript) {
    // CFX_ByteStringC includes the NUL terminator for non-empty strings.
    CFX_ByteStringC abc("abc");
    EXPECT_EQ('a', abc[0]);
    EXPECT_EQ('b', abc[1]);
    EXPECT_EQ('c', abc[2]);
    EXPECT_EQ(0, abc[3]);
}

TEST(fxcrt, ByteStringCOperatorLT) {
    CFX_ByteStringC empty;
    CFX_ByteStringC a("a");
    CFX_ByteStringC abc("abc");
    CFX_ByteStringC def("def");

    EXPECT_FALSE(empty < empty);
    EXPECT_FALSE(a < a);
    EXPECT_FALSE(abc < abc);
    EXPECT_FALSE(def < def);

    EXPECT_TRUE(empty < a);
    EXPECT_FALSE(a < empty);

    EXPECT_TRUE(empty < abc);
    EXPECT_FALSE(abc < empty);

    EXPECT_TRUE(empty < def);
    EXPECT_FALSE(def < empty);

    EXPECT_TRUE(a < abc);
    EXPECT_FALSE(abc < a);

    EXPECT_TRUE(a < def);
    EXPECT_FALSE(def < a);

    EXPECT_TRUE(abc < def);
    EXPECT_FALSE(def < abc);
}

TEST(fxcrt, ByteStringCOperatorEQ) {
    CFX_ByteStringC byte_string_c("hello");
    EXPECT_TRUE(byte_string_c == byte_string_c);

    CFX_ByteStringC byte_string_c_same1("hello");
    EXPECT_TRUE(byte_string_c == byte_string_c_same1);
    EXPECT_TRUE(byte_string_c_same1 == byte_string_c);

    CFX_ByteStringC byte_string_c_same2(byte_string_c);
    EXPECT_TRUE(byte_string_c == byte_string_c_same2);
    EXPECT_TRUE(byte_string_c_same2 == byte_string_c);

    CFX_ByteStringC byte_string_c1("he");
    CFX_ByteStringC byte_string_c2("hellp");
    CFX_ByteStringC byte_string_c3("hellod");
    EXPECT_FALSE(byte_string_c == byte_string_c1);
    EXPECT_FALSE(byte_string_c == byte_string_c2);
    EXPECT_FALSE(byte_string_c == byte_string_c3);
    EXPECT_FALSE(byte_string_c1 == byte_string_c);
    EXPECT_FALSE(byte_string_c2 == byte_string_c);
    EXPECT_FALSE(byte_string_c3 == byte_string_c);

    CFX_ByteString byte_string_same1("hello");
    EXPECT_TRUE(byte_string_c == byte_string_same1);
    EXPECT_TRUE(byte_string_same1 == byte_string_c);

    CFX_ByteString byte_string1("he");
    CFX_ByteString byte_string2("hellp");
    CFX_ByteString byte_string3("hellod");
    EXPECT_FALSE(byte_string_c == byte_string1);
    EXPECT_FALSE(byte_string_c == byte_string2);
    EXPECT_FALSE(byte_string_c == byte_string3);
    EXPECT_FALSE(byte_string1 == byte_string_c);
    EXPECT_FALSE(byte_string2 == byte_string_c);
    EXPECT_FALSE(byte_string3 == byte_string_c);

    const char* c_string_same1 = "hello";
    EXPECT_TRUE(byte_string_c == c_string_same1);
    EXPECT_TRUE(c_string_same1 == byte_string_c);

    const char* c_string1 = "he";
    const char* c_string2 = "hellp";
    const char* c_string3 = "hellod";
    EXPECT_FALSE(byte_string_c == c_string1);
    EXPECT_FALSE(byte_string_c == c_string2);
    EXPECT_FALSE(byte_string_c == c_string3);

    EXPECT_FALSE(c_string1 == byte_string_c);
    EXPECT_FALSE(c_string2 == byte_string_c);
    EXPECT_FALSE(c_string3 == byte_string_c);
}

TEST(fxcrt, ByteStringCOperatorNE) {
    CFX_ByteStringC byte_string_c("hello");
    EXPECT_FALSE(byte_string_c != byte_string_c);

    CFX_ByteStringC byte_string_c_same1("hello");
    EXPECT_FALSE(byte_string_c != byte_string_c_same1);
    EXPECT_FALSE(byte_string_c_same1 != byte_string_c);

    CFX_ByteStringC byte_string_c_same2(byte_string_c);
    EXPECT_FALSE(byte_string_c != byte_string_c_same2);
    EXPECT_FALSE(byte_string_c_same2 != byte_string_c);

    CFX_ByteStringC byte_string_c1("he");
    CFX_ByteStringC byte_string_c2("hellp");
    CFX_ByteStringC byte_string_c3("hellod");
    EXPECT_TRUE(byte_string_c != byte_string_c1);
    EXPECT_TRUE(byte_string_c != byte_string_c2);
    EXPECT_TRUE(byte_string_c != byte_string_c3);
    EXPECT_TRUE(byte_string_c1 != byte_string_c);
    EXPECT_TRUE(byte_string_c2 != byte_string_c);
    EXPECT_TRUE(byte_string_c3 != byte_string_c);

    CFX_ByteString byte_string_same1("hello");
    EXPECT_FALSE(byte_string_c != byte_string_same1);
    EXPECT_FALSE(byte_string_same1 != byte_string_c);

    CFX_ByteString byte_string1("he");
    CFX_ByteString byte_string2("hellp");
    CFX_ByteString byte_string3("hellod");
    EXPECT_TRUE(byte_string_c != byte_string1);
    EXPECT_TRUE(byte_string_c != byte_string2);
    EXPECT_TRUE(byte_string_c != byte_string3);
    EXPECT_TRUE(byte_string1 != byte_string_c);
    EXPECT_TRUE(byte_string2 != byte_string_c);
    EXPECT_TRUE(byte_string3 != byte_string_c);

    const char* c_string_same1 = "hello";
    EXPECT_FALSE(byte_string_c != c_string_same1);
    EXPECT_FALSE(c_string_same1 != byte_string_c);

    const char* c_string1 = "he";
    const char* c_string2 = "hellp";
    const char* c_string3 = "hellod";
    EXPECT_TRUE(byte_string_c != c_string1);
    EXPECT_TRUE(byte_string_c != c_string2);
    EXPECT_TRUE(byte_string_c != c_string3);

    EXPECT_TRUE(c_string1 != byte_string_c);
    EXPECT_TRUE(c_string2 != byte_string_c);
    EXPECT_TRUE(c_string3 != byte_string_c);
}
