/srv/osrm/osrm-backend/third_party/rapidjson/test/unittest
NameSizeModeActions
allocatorstest.cpp33080644editdlrm
bigintegertest.cpp42210644editdlrm
CMakeLists.txt31560644editdlrm
documenttest.cpp206940644editdlrm
dtoatest.cpp34030644editdlrm
encodedstreamtest.cpp120250644editdlrm
encodingstest.cpp193640644editdlrm
filestreamtest.cpp32180644editdlrm
fwdtest.cpp57440644editdlrm
istreamwrappertest.cpp53730644editdlrm
itoatest.cpp39660644editdlrm
jsoncheckertest.cpp31780644editdlrm
namespacetest.cpp24220644editdlrm
ostreamwrappertest.cpp24590644editdlrm
pointertest.cpp554070644editdlrm
prettywritertest.cpp57660644editdlrm
readertest.cpp705150644editdlrm
regextest.cpp161570644editdlrm
schematest.cpp473770644editdlrm
simdtest.cpp69200644editdlrm
strfunctest.cpp13370644editdlrm
stringbuffertest.cpp48340644editdlrm
strtodtest.cpp42730644editdlrm
unittest.cpp15480644editdlrm
unittest.h37660644editdlrm
valuetest.cpp549400644editdlrm
writertest.cpp149880644editdlrm
Edit: /srv/osrm/osrm-backend/third_party/rapidjson/test/unittest/itoatest.cpp (3966B)
// Tencent is pleased to support the open source community by making RapidJSON available. // // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. // // Licensed under the MIT License (the "License"); you may not use this file except // in compliance with the License. You may obtain a copy of the License at // // http://opensource.org/licenses/MIT // // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. #include "unittest.h" #include "rapidjson/internal/itoa.h" #ifdef __GNUC__ RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(type-limits) #endif using namespace rapidjson::internal; template struct Traits { }; template <> struct Traits { enum { kBufferSize = 11 }; enum { kMaxDigit = 10 }; static uint32_t Negate(uint32_t x) { return x; } }; template <> struct Traits { enum { kBufferSize = 12 }; enum { kMaxDigit = 10 }; static int32_t Negate(int32_t x) { return -x; } }; template <> struct Traits { enum { kBufferSize = 21 }; enum { kMaxDigit = 20 }; static uint64_t Negate(uint64_t x) { return x; } }; template <> struct Traits { enum { kBufferSize = 22 }; enum { kMaxDigit = 20 }; static int64_t Negate(int64_t x) { return -x; } }; template static void VerifyValue(T value, void(*f)(T, char*), char* (*g)(T, char*)) { char buffer1[Traits::kBufferSize]; char buffer2[Traits::kBufferSize]; f(value, buffer1); *g(value, buffer2) = '\0'; EXPECT_STREQ(buffer1, buffer2); } template static void Verify(void(*f)(T, char*), char* (*g)(T, char*)) { // Boundary cases VerifyValue(0, f, g); VerifyValue(std::numeric_limits::min(), f, g); VerifyValue(std::numeric_limits::max(), f, g); // 2^n - 1, 2^n, 10^n - 1, 10^n until overflow for (uint32_t power = 2; power <= 10; power += 8) { T i = 1, last; do { VerifyValue(i - 1, f, g); VerifyValue(i, f, g); if (std::numeric_limits::min() < 0) { VerifyValue(Traits::Negate(i), f, g); VerifyValue(Traits::Negate(i + 1), f, g); } last = i; if (i > static_cast(std::numeric_limits::max() / static_cast(power))) break; i *= power; } while (last < i); } } static void u32toa_naive(uint32_t value, char* buffer) { char temp[10]; char *p = temp; do { *p++ = static_cast(char(value % 10) + '0'); value /= 10; } while (value > 0); do { *buffer++ = *--p; } while (p != temp); *buffer = '\0'; } static void i32toa_naive(int32_t value, char* buffer) { uint32_t u = static_cast(value); if (value < 0) { *buffer++ = '-'; u = ~u + 1; } u32toa_naive(u, buffer); } static void u64toa_naive(uint64_t value, char* buffer) { char temp[20]; char *p = temp; do { *p++ = static_cast(char(value % 10) + '0'); value /= 10; } while (value > 0); do { *buffer++ = *--p; } while (p != temp); *buffer = '\0'; } static void i64toa_naive(int64_t value, char* buffer) { uint64_t u = static_cast(value); if (value < 0) { *buffer++ = '-'; u = ~u + 1; } u64toa_naive(u, buffer); } TEST(itoa, u32toa) { Verify(u32toa_naive, u32toa); } TEST(itoa, i32toa) { Verify(i32toa_naive, i32toa); } TEST(itoa, u64toa) { Verify(u64toa_naive, u64toa); } TEST(itoa, i64toa) { Verify(i64toa_naive, i64toa); } #ifdef __GNUC__ RAPIDJSON_DIAG_POP #endif