Home | History | Annotate | Download | only in fxcrt
      1 // Copyright 2015 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "core/fxcrt/fx_extension.h"
      6 #include "testing/gtest/include/gtest/gtest.h"
      7 
      8 namespace {
      9 
     10 uint32_t ReferenceGetBits32(const uint8_t* pData, int bitpos, int nbits) {
     11   int result = 0;
     12   for (int i = 0; i < nbits; i++) {
     13     if (pData[(bitpos + i) / 8] & (1 << (7 - (bitpos + i) % 8)))
     14       result |= 1 << (nbits - i - 1);
     15   }
     16   return result;
     17 }
     18 
     19 }  // namespace
     20 
     21 TEST(fxcrt, FXSYS_HexCharToInt) {
     22   EXPECT_EQ(10, FXSYS_HexCharToInt('a'));
     23   EXPECT_EQ(10, FXSYS_HexCharToInt('A'));
     24   EXPECT_EQ(7, FXSYS_HexCharToInt('7'));
     25   EXPECT_EQ(0, FXSYS_HexCharToInt('i'));
     26 }
     27 
     28 TEST(fxcrt, FXSYS_DecimalCharToInt) {
     29   EXPECT_EQ(7, FXSYS_DecimalCharToInt('7'));
     30   EXPECT_EQ(0, FXSYS_DecimalCharToInt('a'));
     31   EXPECT_EQ(7, FXSYS_DecimalCharToInt(L'7'));
     32   EXPECT_EQ(0, FXSYS_DecimalCharToInt(L'a'));
     33 }
     34 
     35 TEST(fxcrt, FXSYS_isDecimalDigit) {
     36   EXPECT_TRUE(FXSYS_isDecimalDigit('7'));
     37   EXPECT_TRUE(FXSYS_isDecimalDigit(L'7'));
     38   EXPECT_FALSE(FXSYS_isDecimalDigit('a'));
     39   EXPECT_FALSE(FXSYS_isDecimalDigit(L'a'));
     40 }
     41 
     42 TEST(fxcrt, FX_HashCode_Ascii) {
     43   EXPECT_EQ(0u, FX_HashCode_GetA("", false));
     44   EXPECT_EQ(65u, FX_HashCode_GetA("A", false));
     45   EXPECT_EQ(97u, FX_HashCode_GetA("A", true));
     46   EXPECT_EQ(31 * 65u + 66u, FX_HashCode_GetA("AB", false));
     47 }
     48 
     49 TEST(fxcrt, FX_HashCode_Wide) {
     50   EXPECT_EQ(0u, FX_HashCode_GetW(L"", false));
     51   EXPECT_EQ(65u, FX_HashCode_GetW(L"A", false));
     52   EXPECT_EQ(97u, FX_HashCode_GetW(L"A", true));
     53   EXPECT_EQ(1313 * 65u + 66u, FX_HashCode_GetW(L"AB", false));
     54 }
     55 
     56 TEST(fxcrt, FXSYS_IntToTwoHexChars) {
     57   char buf[3] = {0};
     58   FXSYS_IntToTwoHexChars(0x0, buf);
     59   EXPECT_STREQ("00", buf);
     60   FXSYS_IntToTwoHexChars(0x9, buf);
     61   EXPECT_STREQ("09", buf);
     62   FXSYS_IntToTwoHexChars(0xA, buf);
     63   EXPECT_STREQ("0A", buf);
     64   FXSYS_IntToTwoHexChars(0x8C, buf);
     65   EXPECT_STREQ("8C", buf);
     66   FXSYS_IntToTwoHexChars(0xBE, buf);
     67   EXPECT_STREQ("BE", buf);
     68   FXSYS_IntToTwoHexChars(0xD0, buf);
     69   EXPECT_STREQ("D0", buf);
     70   FXSYS_IntToTwoHexChars(0xFF, buf);
     71   EXPECT_STREQ("FF", buf);
     72 }
     73 
     74 TEST(fxcrt, FXSYS_IntToFourHexChars) {
     75   char buf[5] = {0};
     76   FXSYS_IntToFourHexChars(0x0, buf);
     77   EXPECT_STREQ("0000", buf);
     78   FXSYS_IntToFourHexChars(0xA23, buf);
     79   EXPECT_STREQ("0A23", buf);
     80   FXSYS_IntToFourHexChars(0xB701, buf);
     81   EXPECT_STREQ("B701", buf);
     82   FXSYS_IntToFourHexChars(0xFFFF, buf);
     83   EXPECT_STREQ("FFFF", buf);
     84 }
     85 
     86 TEST(fxcrt, FXSYS_ToUTF16BE) {
     87   char buf[9] = {0};
     88   // Test U+0000 to U+D7FF and U+E000 to U+FFFF
     89   EXPECT_EQ(4U, FXSYS_ToUTF16BE(0x0, buf));
     90   EXPECT_STREQ("0000", buf);
     91   EXPECT_EQ(4U, FXSYS_ToUTF16BE(0xD7FF, buf));
     92   EXPECT_STREQ("D7FF", buf);
     93   EXPECT_EQ(4U, FXSYS_ToUTF16BE(0xE000, buf));
     94   EXPECT_STREQ("E000", buf);
     95   EXPECT_EQ(4U, FXSYS_ToUTF16BE(0xFFFF, buf));
     96   EXPECT_STREQ("FFFF", buf);
     97   // Test U+10000 to U+10FFFF
     98   EXPECT_EQ(8U, FXSYS_ToUTF16BE(0x10000, buf));
     99   EXPECT_STREQ("D800DC00", buf);
    100   EXPECT_EQ(8U, FXSYS_ToUTF16BE(0x10FFFF, buf));
    101   EXPECT_STREQ("DBFFDFFF", buf);
    102   EXPECT_EQ(8U, FXSYS_ToUTF16BE(0x2003E, buf));
    103   EXPECT_STREQ("D840DC3E", buf);
    104 }
    105 
    106 TEST(fxcrt, GetBits32) {
    107   unsigned char data[] = {0xDE, 0x3F, 0xB1, 0x7C, 0x12, 0x9A, 0x04, 0x56};
    108   for (int nbits = 1; nbits <= 32; ++nbits) {
    109     for (int bitpos = 0; bitpos < (int)sizeof(data) * 8 - nbits; ++bitpos) {
    110       EXPECT_EQ(ReferenceGetBits32(data, bitpos, nbits),
    111                 GetBits32(data, bitpos, nbits));
    112     }
    113   }
    114 }
    115