Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2018 The LevelDB Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file. See the AUTHORS file for names of contributors.5#include <limits>6#include <string>8#include "leveldb/slice.h"9#include "util/logging.h"10#include "util/testharness.h"12namespace leveldb {14class Logging {};16TEST(Logging, NumberToString) {17ASSERT_EQ("0", NumberToString(0));18ASSERT_EQ("1", NumberToString(1));19ASSERT_EQ("9", NumberToString(9));21ASSERT_EQ("10", NumberToString(10));22ASSERT_EQ("11", NumberToString(11));23ASSERT_EQ("19", NumberToString(19));24ASSERT_EQ("99", NumberToString(99));26ASSERT_EQ("100", NumberToString(100));27ASSERT_EQ("109", NumberToString(109));28ASSERT_EQ("190", NumberToString(190));29ASSERT_EQ("123", NumberToString(123));30ASSERT_EQ("12345678", NumberToString(12345678));32static_assert(std::numeric_limits<uint64_t>::max() == 18446744073709551615U,33"Test consistency check");34ASSERT_EQ("18446744073709551000", NumberToString(18446744073709551000U));35ASSERT_EQ("18446744073709551600", NumberToString(18446744073709551600U));36ASSERT_EQ("18446744073709551610", NumberToString(18446744073709551610U));37ASSERT_EQ("18446744073709551614", NumberToString(18446744073709551614U));38ASSERT_EQ("18446744073709551615", NumberToString(18446744073709551615U));39}41void ConsumeDecimalNumberRoundtripTest(uint64_t number,42const std::string& padding = "") {43std::string decimal_number = NumberToString(number);44std::string input_string = decimal_number + padding;45Slice input(input_string);46Slice output = input;47uint64_t result;48ASSERT_TRUE(ConsumeDecimalNumber(&output, &result));49ASSERT_EQ(number, result);50ASSERT_EQ(decimal_number.size(), output.data() - input.data());51ASSERT_EQ(padding.size(), output.size());52}54TEST(Logging, ConsumeDecimalNumberRoundtrip) {55ConsumeDecimalNumberRoundtripTest(0);56ConsumeDecimalNumberRoundtripTest(1);57ConsumeDecimalNumberRoundtripTest(9);59ConsumeDecimalNumberRoundtripTest(10);60ConsumeDecimalNumberRoundtripTest(11);61ConsumeDecimalNumberRoundtripTest(19);62ConsumeDecimalNumberRoundtripTest(99);64ConsumeDecimalNumberRoundtripTest(100);65ConsumeDecimalNumberRoundtripTest(109);66ConsumeDecimalNumberRoundtripTest(190);67ConsumeDecimalNumberRoundtripTest(123);68ASSERT_EQ("12345678", NumberToString(12345678));70for (uint64_t i = 0; i < 100; ++i) {71uint64_t large_number = std::numeric_limits<uint64_t>::max() - i;72ConsumeDecimalNumberRoundtripTest(large_number);73}74}76TEST(Logging, ConsumeDecimalNumberRoundtripWithPadding) {77ConsumeDecimalNumberRoundtripTest(0, " ");78ConsumeDecimalNumberRoundtripTest(1, "abc");79ConsumeDecimalNumberRoundtripTest(9, "x");81ConsumeDecimalNumberRoundtripTest(10, "_");82ConsumeDecimalNumberRoundtripTest(11, std::string("\0\0\0", 3));83ConsumeDecimalNumberRoundtripTest(19, "abc");84ConsumeDecimalNumberRoundtripTest(99, "padding");86ConsumeDecimalNumberRoundtripTest(100, " ");88for (uint64_t i = 0; i < 100; ++i) {89uint64_t large_number = std::numeric_limits<uint64_t>::max() - i;90ConsumeDecimalNumberRoundtripTest(large_number, "pad");91}92}94void ConsumeDecimalNumberOverflowTest(const std::string& input_string) {95Slice input(input_string);96Slice output = input;97uint64_t result;98ASSERT_EQ(false, ConsumeDecimalNumber(&output, &result));99}101TEST(Logging, ConsumeDecimalNumberOverflow) {102static_assert(std::numeric_limits<uint64_t>::max() == 18446744073709551615U,103"Test consistency check");104ConsumeDecimalNumberOverflowTest("18446744073709551616");105ConsumeDecimalNumberOverflowTest("18446744073709551617");106ConsumeDecimalNumberOverflowTest("18446744073709551618");107ConsumeDecimalNumberOverflowTest("18446744073709551619");108ConsumeDecimalNumberOverflowTest("18446744073709551620");109ConsumeDecimalNumberOverflowTest("18446744073709551621");110ConsumeDecimalNumberOverflowTest("18446744073709551622");111ConsumeDecimalNumberOverflowTest("18446744073709551623");112ConsumeDecimalNumberOverflowTest("18446744073709551624");113ConsumeDecimalNumberOverflowTest("18446744073709551625");114ConsumeDecimalNumberOverflowTest("18446744073709551626");116ConsumeDecimalNumberOverflowTest("18446744073709551700");118ConsumeDecimalNumberOverflowTest("99999999999999999999");119}121void ConsumeDecimalNumberNoDigitsTest(const std::string& input_string) {122Slice input(input_string);123Slice output = input;124uint64_t result;125ASSERT_EQ(false, ConsumeDecimalNumber(&output, &result));126ASSERT_EQ(input.data(), output.data());127ASSERT_EQ(input.size(), output.size());128}130TEST(Logging, ConsumeDecimalNumberNoDigits) {131ConsumeDecimalNumberNoDigitsTest("");132ConsumeDecimalNumberNoDigitsTest(" ");133ConsumeDecimalNumberNoDigitsTest("a");134ConsumeDecimalNumberNoDigitsTest(" 123");135ConsumeDecimalNumberNoDigitsTest("a123");136ConsumeDecimalNumberNoDigitsTest(std::string("\000123", 4));137ConsumeDecimalNumberNoDigitsTest(std::string("\177123", 4));138ConsumeDecimalNumberNoDigitsTest(std::string("\377123", 4));139}141} // namespace leveldb143int main(int argc, char** argv) { return leveldb::test::RunAllTests(); }
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.