data-structure-typed 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/CMakeLists.txt +52 -0
- package/README.md +4 -4
- package/README_CN.md +5 -5
- package/benchmark/report.html +141 -12
- package/benchmark/report.json +1969 -38
- package/build/CMakeCache.txt +603 -0
- package/build/CMakeFiles/4.0.3/CMakeCXXCompiler.cmake +104 -0
- package/build/CMakeFiles/4.0.3/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/build/CMakeFiles/4.0.3/CMakeSystem.cmake +15 -0
- package/build/CMakeFiles/4.0.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +920 -0
- package/build/CMakeFiles/4.0.3/CompilerIdCXX/a.out +0 -0
- package/build/CMakeFiles/4.0.3/CompilerIdCXX/apple-sdk.cpp +1 -0
- package/build/CMakeFiles/CMakeConfigureLog.yaml +2146 -0
- package/build/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- package/build/CMakeFiles/InstallScripts.json +9 -0
- package/build/CMakeFiles/Makefile.cmake +100 -0
- package/build/CMakeFiles/Makefile2 +720 -0
- package/build/CMakeFiles/TargetDirectories.txt +23 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.internal +839 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.make +2506 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp.o +0 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp.o.d +835 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.internal +839 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.make +2506 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/test/performance/data-structures/binary-tree/avl-tree.test.cpp.o +0 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/test/performance/data-structures/binary-tree/avl-tree.test.cpp.o.d +835 -0
- package/build/CMakeFiles/cmake.check_cache +1 -0
- package/build/CMakeFiles/deque-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/deque-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/deque-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.internal +791 -0
- package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.make +2362 -0
- package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/deque-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/deque-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/deque-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/deque-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/deque-benchmark.dir/test/performance/data-structures/queue/deque.test.cpp.o +0 -0
- package/build/CMakeFiles/deque-benchmark.dir/test/performance/data-structures/queue/deque.test.cpp.o.d +787 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.internal +790 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.make +2359 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp.o +0 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp.o.d +786 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.internal +790 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.make +2359 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/test/performance/data-structures/hash/hash-map.test.cpp.o +0 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/test/performance/data-structures/hash/hash-map.test.cpp.o.d +786 -0
- package/build/CMakeFiles/heap-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/heap-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/heap-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.internal +843 -0
- package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.make +2518 -0
- package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/heap-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/heap-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/heap-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/heap-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/heap-benchmark.dir/test/performance/data-structures/heap/heap.test.cpp.o +0 -0
- package/build/CMakeFiles/heap-benchmark.dir/test/performance/data-structures/heap/heap.test.cpp.o.d +839 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.internal +793 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.make +2368 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/test/performance/data-structures/priority-queue/priority-queue.test.cpp.o +0 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/test/performance/data-structures/priority-queue/priority-queue.test.cpp.o.d +789 -0
- package/build/CMakeFiles/progress.marks +1 -0
- package/build/CMakeFiles/queue-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/queue-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/queue-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.internal +793 -0
- package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.make +2368 -0
- package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/queue-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/queue-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/queue-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/queue-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/queue-benchmark.dir/test/performance/data-structures/queue/queue.test.cpp.o +0 -0
- package/build/CMakeFiles/queue-benchmark.dir/test/performance/data-structures/queue/queue.test.cpp.o.d +789 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.internal +839 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.make +2506 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/test/performance/data-structures/binary-tree/red-black-tree.test.cpp.o +0 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/test/performance/data-structures/binary-tree/red-black-tree.test.cpp.o.d +835 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.internal +790 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.make +2359 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/singly-linked-list.test.cpp.o +0 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/singly-linked-list.test.cpp.o.d +786 -0
- package/build/CMakeFiles/stack-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/stack-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/stack-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.internal +793 -0
- package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.make +2368 -0
- package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/stack-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/stack-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/stack-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/stack-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/stack-benchmark.dir/test/performance/data-structures/stack/stack.test.cpp.o +0 -0
- package/build/CMakeFiles/stack-benchmark.dir/test/performance/data-structures/stack/stack.test.cpp.o.d +789 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.internal +839 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.make +2506 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-map.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-map.test.cpp.o.d +835 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.internal +839 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.make +2506 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp.o.d +835 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.internal +839 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.make +2506 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp.o.d +835 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/DependInfo.cmake +23 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/build.make +114 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/cmake_clean.cmake +11 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.internal +839 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.make +2506 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.ts +2 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/depend.make +2 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/flags.make +10 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/link.txt +1 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/progress.make +3 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-set.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-set.test.cpp.o.d +835 -0
- package/build/Makefile +783 -0
- package/build/_deps/benchmark-build/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- package/build/_deps/benchmark-build/CMakeFiles/progress.marks +1 -0
- package/build/_deps/benchmark-build/Makefile +140 -0
- package/build/_deps/benchmark-build/benchmark.pc +12 -0
- package/build/_deps/benchmark-build/benchmarkConfig.cmake +14 -0
- package/build/_deps/benchmark-build/benchmarkConfigVersion.cmake +65 -0
- package/build/_deps/benchmark-build/benchmarkTargets.cmake +84 -0
- package/build/_deps/benchmark-build/cmake_install.cmake +50 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/DependInfo.cmake +41 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark.cc.o.d +875 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_api_internal.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_api_internal.cc.o.d +802 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_name.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_name.cc.o.d +772 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_register.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_register.cc.o.d +841 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_runner.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_runner.cc.o.d +833 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/build.make +402 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/check.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/check.cc.o.d +784 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/cmake_clean.cmake +47 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/cmake_clean_target.cmake +3 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/colorprint.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/colorprint.cc.o.d +791 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/commandlineflags.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/commandlineflags.cc.o.d +795 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.internal +15519 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.make +17500 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.ts +2 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/complexity.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/complexity.cc.o.d +793 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/console_reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/console_reporter.cc.o.d +802 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/counter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/counter.cc.o.d +773 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/csv_reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/csv_reporter.cc.o.d +799 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/depend.make +2 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/flags.make +10 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/json_reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/json_reporter.cc.o.d +800 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/link.txt +2 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/perf_counters.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/perf_counters.cc.o.d +807 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/progress.make +21 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/reporter.cc.o.d +798 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/statistics.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/statistics.cc.o.d +800 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/string_util.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/string_util.cc.o.d +795 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/sysinfo.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/sysinfo.cc.o.d +933 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/timers.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/timers.cc.o.d +904 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/DependInfo.cmake +23 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/benchmark_main.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/benchmark_main.cc.o.d +772 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/build.make +114 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/cmake_clean.cmake +11 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/cmake_clean_target.cmake +3 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.internal +776 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.make +2317 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.ts +2 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/depend.make +2 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/flags.make +10 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/link.txt +2 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/progress.make +3 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/progress.marks +1 -0
- package/build/_deps/benchmark-build/src/Makefile +710 -0
- package/build/_deps/benchmark-build/src/cmake_install.cmake +45 -0
- package/build/_deps/benchmark-build/src/libbenchmark.a +0 -0
- package/build/_deps/benchmark-build/src/libbenchmark_main.a +0 -0
- package/build/_deps/benchmark-src/.clang-format +5 -0
- package/build/_deps/benchmark-src/.clang-tidy +7 -0
- package/build/_deps/benchmark-src/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
- package/build/_deps/benchmark-src/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/build/_deps/benchmark-src/.github/install_bazel.sh +13 -0
- package/build/_deps/benchmark-src/.github/libcxx-setup.sh +26 -0
- package/build/_deps/benchmark-src/.github/workflows/bazel.yml +35 -0
- package/build/_deps/benchmark-src/.github/workflows/build-and-test-min-cmake.yml +46 -0
- package/build/_deps/benchmark-src/.github/workflows/build-and-test-perfcounters.yml +51 -0
- package/build/_deps/benchmark-src/.github/workflows/build-and-test.yml +114 -0
- package/build/_deps/benchmark-src/.github/workflows/clang-format-lint.yml +17 -0
- package/build/_deps/benchmark-src/.github/workflows/clang-tidy.yml +38 -0
- package/build/_deps/benchmark-src/.github/workflows/doxygen.yml +28 -0
- package/build/_deps/benchmark-src/.github/workflows/pylint.yml +28 -0
- package/build/_deps/benchmark-src/.github/workflows/sanitizer.yml +96 -0
- package/build/_deps/benchmark-src/.github/workflows/test_bindings.yml +29 -0
- package/build/_deps/benchmark-src/.github/workflows/wheels.yml +79 -0
- package/build/_deps/benchmark-src/.travis.yml +208 -0
- package/build/_deps/benchmark-src/.ycm_extra_conf.py +115 -0
- package/build/_deps/benchmark-src/AUTHORS +71 -0
- package/build/_deps/benchmark-src/BUILD.bazel +87 -0
- package/build/_deps/benchmark-src/CMakeLists.txt +340 -0
- package/build/_deps/benchmark-src/CONTRIBUTING.md +58 -0
- package/build/_deps/benchmark-src/CONTRIBUTORS +95 -0
- package/build/_deps/benchmark-src/LICENSE +202 -0
- package/build/_deps/benchmark-src/MODULE.bazel +24 -0
- package/build/_deps/benchmark-src/README.md +223 -0
- package/build/_deps/benchmark-src/WORKSPACE +22 -0
- package/build/_deps/benchmark-src/WORKSPACE.bzlmod +2 -0
- package/build/_deps/benchmark-src/_config.yml +2 -0
- package/build/_deps/benchmark-src/appveyor.yml +50 -0
- package/build/_deps/benchmark-src/bazel/benchmark_deps.bzl +65 -0
- package/build/_deps/benchmark-src/bindings/python/BUILD +3 -0
- package/build/_deps/benchmark-src/bindings/python/build_defs.bzl +25 -0
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/BUILD +40 -0
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/__init__.py +162 -0
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/benchmark.cc +184 -0
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/example.py +136 -0
- package/build/_deps/benchmark-src/bindings/python/nanobind.BUILD +17 -0
- package/build/_deps/benchmark-src/bindings/python/python_headers.BUILD +6 -0
- package/build/_deps/benchmark-src/cmake/AddCXXCompilerFlag.cmake +78 -0
- package/build/_deps/benchmark-src/cmake/CXXFeatureCheck.cmake +82 -0
- package/build/_deps/benchmark-src/cmake/Config.cmake.in +7 -0
- package/build/_deps/benchmark-src/cmake/GetGitVersion.cmake +58 -0
- package/build/_deps/benchmark-src/cmake/GoogleTest.cmake +58 -0
- package/build/_deps/benchmark-src/cmake/GoogleTest.cmake.in +59 -0
- package/build/_deps/benchmark-src/cmake/benchmark.pc.in +12 -0
- package/build/_deps/benchmark-src/cmake/gnu_posix_regex.cpp +12 -0
- package/build/_deps/benchmark-src/cmake/llvm-toolchain.cmake +8 -0
- package/build/_deps/benchmark-src/cmake/posix_regex.cpp +14 -0
- package/build/_deps/benchmark-src/cmake/pthread_affinity.cpp +16 -0
- package/build/_deps/benchmark-src/cmake/split_list.cmake +3 -0
- package/build/_deps/benchmark-src/cmake/std_regex.cpp +10 -0
- package/build/_deps/benchmark-src/cmake/steady_clock.cpp +7 -0
- package/build/_deps/benchmark-src/cmake/thread_safety_attributes.cpp +4 -0
- package/build/_deps/benchmark-src/docs/AssemblyTests.md +149 -0
- package/build/_deps/benchmark-src/docs/_config.yml +3 -0
- package/build/_deps/benchmark-src/docs/assets/images/icon.png +0 -0
- package/build/_deps/benchmark-src/docs/assets/images/icon.xcf +0 -0
- package/build/_deps/benchmark-src/docs/assets/images/icon_black.png +0 -0
- package/build/_deps/benchmark-src/docs/assets/images/icon_black.xcf +0 -0
- package/build/_deps/benchmark-src/docs/dependencies.md +13 -0
- package/build/_deps/benchmark-src/docs/index.md +12 -0
- package/build/_deps/benchmark-src/docs/perf_counters.md +35 -0
- package/build/_deps/benchmark-src/docs/platform_specific_build_instructions.md +48 -0
- package/build/_deps/benchmark-src/docs/python_bindings.md +34 -0
- package/build/_deps/benchmark-src/docs/random_interleaving.md +13 -0
- package/build/_deps/benchmark-src/docs/reducing_variance.md +100 -0
- package/build/_deps/benchmark-src/docs/releasing.md +41 -0
- package/build/_deps/benchmark-src/docs/tools.md +343 -0
- package/build/_deps/benchmark-src/docs/user_guide.md +1266 -0
- package/build/_deps/benchmark-src/include/benchmark/benchmark.h +1991 -0
- package/build/_deps/benchmark-src/include/benchmark/export.h +47 -0
- package/build/_deps/benchmark-src/pyproject.toml +50 -0
- package/build/_deps/benchmark-src/setup.py +113 -0
- package/build/_deps/benchmark-src/src/CMakeLists.txt +170 -0
- package/build/_deps/benchmark-src/src/arraysize.h +33 -0
- package/build/_deps/benchmark-src/src/benchmark.cc +779 -0
- package/build/_deps/benchmark-src/src/benchmark_api_internal.cc +118 -0
- package/build/_deps/benchmark-src/src/benchmark_api_internal.h +87 -0
- package/build/_deps/benchmark-src/src/benchmark_main.cc +18 -0
- package/build/_deps/benchmark-src/src/benchmark_name.cc +59 -0
- package/build/_deps/benchmark-src/src/benchmark_register.cc +520 -0
- package/build/_deps/benchmark-src/src/benchmark_register.h +109 -0
- package/build/_deps/benchmark-src/src/benchmark_runner.cc +497 -0
- package/build/_deps/benchmark-src/src/benchmark_runner.h +131 -0
- package/build/_deps/benchmark-src/src/check.cc +11 -0
- package/build/_deps/benchmark-src/src/check.h +106 -0
- package/build/_deps/benchmark-src/src/colorprint.cc +200 -0
- package/build/_deps/benchmark-src/src/colorprint.h +33 -0
- package/build/_deps/benchmark-src/src/commandlineflags.cc +298 -0
- package/build/_deps/benchmark-src/src/commandlineflags.h +133 -0
- package/build/_deps/benchmark-src/src/complexity.cc +244 -0
- package/build/_deps/benchmark-src/src/complexity.h +55 -0
- package/build/_deps/benchmark-src/src/console_reporter.cc +206 -0
- package/build/_deps/benchmark-src/src/counter.cc +80 -0
- package/build/_deps/benchmark-src/src/counter.h +32 -0
- package/build/_deps/benchmark-src/src/csv_reporter.cc +161 -0
- package/build/_deps/benchmark-src/src/cycleclock.h +230 -0
- package/build/_deps/benchmark-src/src/internal_macros.h +115 -0
- package/build/_deps/benchmark-src/src/json_reporter.cc +320 -0
- package/build/_deps/benchmark-src/src/log.h +88 -0
- package/build/_deps/benchmark-src/src/mutex.h +155 -0
- package/build/_deps/benchmark-src/src/perf_counters.cc +282 -0
- package/build/_deps/benchmark-src/src/perf_counters.h +200 -0
- package/build/_deps/benchmark-src/src/re.h +158 -0
- package/build/_deps/benchmark-src/src/reporter.cc +118 -0
- package/build/_deps/benchmark-src/src/statistics.cc +209 -0
- package/build/_deps/benchmark-src/src/statistics.h +44 -0
- package/build/_deps/benchmark-src/src/string_util.cc +254 -0
- package/build/_deps/benchmark-src/src/string_util.h +70 -0
- package/build/_deps/benchmark-src/src/sysinfo.cc +855 -0
- package/build/_deps/benchmark-src/src/thread_manager.h +63 -0
- package/build/_deps/benchmark-src/src/thread_timer.h +86 -0
- package/build/_deps/benchmark-src/src/timers.cc +272 -0
- package/build/_deps/benchmark-src/src/timers.h +48 -0
- package/build/_deps/benchmark-src/test/AssemblyTests.cmake +67 -0
- package/build/_deps/benchmark-src/test/BUILD +127 -0
- package/build/_deps/benchmark-src/test/CMakeLists.txt +309 -0
- package/build/_deps/benchmark-src/test/args_product_test.cc +77 -0
- package/build/_deps/benchmark-src/test/basic_test.cc +180 -0
- package/build/_deps/benchmark-src/test/benchmark_gtest.cc +169 -0
- package/build/_deps/benchmark-src/test/benchmark_min_time_flag_iters_test.cc +66 -0
- package/build/_deps/benchmark-src/test/benchmark_min_time_flag_time_test.cc +90 -0
- package/build/_deps/benchmark-src/test/benchmark_name_gtest.cc +82 -0
- package/build/_deps/benchmark-src/test/benchmark_random_interleaving_gtest.cc +126 -0
- package/build/_deps/benchmark-src/test/benchmark_setup_teardown_test.cc +157 -0
- package/build/_deps/benchmark-src/test/benchmark_test.cc +274 -0
- package/build/_deps/benchmark-src/test/clobber_memory_assembly_test.cc +64 -0
- package/build/_deps/benchmark-src/test/commandlineflags_gtest.cc +228 -0
- package/build/_deps/benchmark-src/test/complexity_test.cc +228 -0
- package/build/_deps/benchmark-src/test/cxx03_test.cc +62 -0
- package/build/_deps/benchmark-src/test/diagnostics_test.cc +91 -0
- package/build/_deps/benchmark-src/test/display_aggregates_only_test.cc +45 -0
- package/build/_deps/benchmark-src/test/donotoptimize_assembly_test.cc +201 -0
- package/build/_deps/benchmark-src/test/donotoptimize_test.cc +69 -0
- package/build/_deps/benchmark-src/test/filter_test.cc +117 -0
- package/build/_deps/benchmark-src/test/fixture_test.cc +51 -0
- package/build/_deps/benchmark-src/test/internal_threading_test.cc +185 -0
- package/build/_deps/benchmark-src/test/link_main_test.cc +9 -0
- package/build/_deps/benchmark-src/test/map_test.cc +59 -0
- package/build/_deps/benchmark-src/test/memory_manager_test.cc +47 -0
- package/build/_deps/benchmark-src/test/min_time_parse_gtest.cc +30 -0
- package/build/_deps/benchmark-src/test/multiple_ranges_test.cc +96 -0
- package/build/_deps/benchmark-src/test/options_test.cc +77 -0
- package/build/_deps/benchmark-src/test/output_test.h +211 -0
- package/build/_deps/benchmark-src/test/output_test_helper.cc +519 -0
- package/build/_deps/benchmark-src/test/perf_counters_gtest.cc +307 -0
- package/build/_deps/benchmark-src/test/perf_counters_test.cc +92 -0
- package/build/_deps/benchmark-src/test/register_benchmark_test.cc +196 -0
- package/build/_deps/benchmark-src/test/repetitions_test.cc +214 -0
- package/build/_deps/benchmark-src/test/report_aggregates_only_test.cc +41 -0
- package/build/_deps/benchmark-src/test/reporter_output_test.cc +1130 -0
- package/build/_deps/benchmark-src/test/skip_with_error_test.cc +199 -0
- package/build/_deps/benchmark-src/test/spec_arg_test.cc +105 -0
- package/build/_deps/benchmark-src/test/spec_arg_verbosity_test.cc +43 -0
- package/build/_deps/benchmark-src/test/state_assembly_test.cc +68 -0
- package/build/_deps/benchmark-src/test/statistics_gtest.cc +35 -0
- package/build/_deps/benchmark-src/test/string_util_gtest.cc +199 -0
- package/build/_deps/benchmark-src/test/templated_fixture_test.cc +28 -0
- package/build/_deps/benchmark-src/test/time_unit_gtest.cc +37 -0
- package/build/_deps/benchmark-src/test/user_counters_tabular_test.cc +558 -0
- package/build/_deps/benchmark-src/test/user_counters_test.cc +561 -0
- package/build/_deps/benchmark-src/test/user_counters_thousands_test.cc +186 -0
- package/build/_deps/benchmark-src/tools/BUILD.bazel +19 -0
- package/build/_deps/benchmark-src/tools/compare.py +432 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test1_run1.json +127 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test1_run2.json +127 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test2_run.json +81 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test3_run0.json +65 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test3_run1.json +65 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run.json +96 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run0.json +21 -0
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run1.json +21 -0
- package/build/_deps/benchmark-src/tools/gbench/__init__.py +8 -0
- package/build/_deps/benchmark-src/tools/gbench/report.py +1201 -0
- package/build/_deps/benchmark-src/tools/gbench/util.py +203 -0
- package/build/_deps/benchmark-src/tools/libpfm.BUILD.bazel +22 -0
- package/build/_deps/benchmark-src/tools/requirements.txt +2 -0
- package/build/_deps/benchmark-src/tools/strip_asm.py +151 -0
- package/build/_deps/benchmark-subbuild/CMakeCache.txt +133 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/4.0.3/CMakeSystem.cmake +15 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeConfigureLog.yaml +11 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeRuleHashes.txt +11 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/InstallScripts.json +7 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/Makefile.cmake +52 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/Makefile2 +122 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/TargetDirectories.txt +3 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/DependInfo.cmake +22 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/Labels.json +46 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/Labels.txt +14 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/build.make +162 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/cmake_clean.cmake +17 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/compiler_depend.make +2 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/compiler_depend.ts +2 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/progress.make +10 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/cmake.check_cache +1 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/progress.marks +1 -0
- package/build/_deps/benchmark-subbuild/CMakeLists.txt +42 -0
- package/build/_deps/benchmark-subbuild/Makefile +162 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-gitclone-lastrun.txt +15 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-gitinfo.txt +15 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-patch-info.txt +6 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-update-info.txt +7 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-cfgcmd.txt +1 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-gitclone.cmake +87 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-gitupdate.cmake +317 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-mkdirs.cmake +27 -0
- package/build/_deps/benchmark-subbuild/cmake_install.cmake +56 -0
- package/build/bin/avl-rb-range-search-benchmark +0 -0
- package/build/bin/avl-tree-benchmark +0 -0
- package/build/bin/deque-benchmark +0 -0
- package/build/bin/doubly-linked-list-benchmark +0 -0
- package/build/bin/hash-map-benchmark +0 -0
- package/build/bin/heap-benchmark +0 -0
- package/build/bin/priority-queue-benchmark +0 -0
- package/build/bin/queue-benchmark +0 -0
- package/build/bin/red-black-tree-benchmark +0 -0
- package/build/bin/singly-linked-list-benchmark +0 -0
- package/build/bin/stack-benchmark +0 -0
- package/build/bin/tree-map-benchmark +0 -0
- package/build/bin/tree-multi-map-benchmark +0 -0
- package/build/bin/tree-multi-set-benchmark +0 -0
- package/build/bin/tree-set-benchmark +0 -0
- package/build/cmake_install.cmake +66 -0
- package/dist/cjs/index.cjs +1270 -1201
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs +1309 -1210
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs +1268 -1196
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs +1307 -1205
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +3 -3
- package/dist/types/data-structures/binary-tree/index.d.ts +3 -3
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +177 -0
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +230 -147
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +263 -0
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +170 -0
- package/dist/types/interfaces/binary-tree.d.ts +1 -1
- package/dist/types/types/data-structures/binary-tree/index.d.ts +3 -3
- package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +28 -0
- package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +11 -0
- package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +28 -0
- package/dist/umd/data-structure-typed.js +1303 -1194
- package/dist/umd/data-structure-typed.js.map +1 -1
- package/dist/umd/data-structure-typed.min.js +10 -3
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/eslint.config.mjs +5 -1
- package/package.json +4 -3
- package/src/data-structures/binary-tree/avl-tree.ts +1 -1
- package/src/data-structures/binary-tree/binary-tree.ts +40 -16
- package/src/data-structures/binary-tree/bst.ts +6 -6
- package/src/data-structures/binary-tree/index.ts +3 -3
- package/src/data-structures/binary-tree/red-black-tree.ts +34 -52
- package/src/data-structures/binary-tree/tree-map.ts +417 -0
- package/src/data-structures/binary-tree/tree-multi-map.ts +467 -325
- package/src/data-structures/binary-tree/tree-multi-set.ts +491 -0
- package/src/data-structures/binary-tree/tree-set.ts +394 -0
- package/src/interfaces/binary-tree.ts +1 -1
- package/src/types/data-structures/binary-tree/index.ts +3 -3
- package/src/types/data-structures/binary-tree/tree-map.ts +39 -0
- package/src/types/data-structures/binary-tree/tree-multi-set.ts +13 -0
- package/src/types/data-structures/binary-tree/tree-set.ts +33 -0
- package/test/config.ts +2 -2
- package/test/performance/benchmark-runner-enhanced.mjs +818 -0
- package/test/performance/cmake-benchmark-runner.mjs +234 -0
- package/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp +112 -0
- package/test/performance/data-structures/binary-tree/avl-rb-range-search.test.mjs +51 -0
- package/test/performance/data-structures/binary-tree/avl-tree.test.cpp +181 -0
- package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +138 -0
- package/test/performance/data-structures/binary-tree/binary-tree-overall.test.mjs +85 -0
- package/test/performance/data-structures/binary-tree/binary-tree.test.mjs +100 -0
- package/test/performance/data-structures/binary-tree/bst.test.mjs +61 -0
- package/test/performance/data-structures/binary-tree/red-black-tree-cjs.test.mjs +259 -0
- package/test/performance/data-structures/binary-tree/red-black-tree.test.cpp +213 -0
- package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +275 -0
- package/test/performance/data-structures/binary-tree/tree-map.test.cpp +129 -0
- package/test/performance/data-structures/binary-tree/tree-map.test.mjs +171 -0
- package/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp +205 -0
- package/test/performance/data-structures/binary-tree/tree-multi-map.test.mjs +106 -0
- package/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp +217 -0
- package/test/performance/data-structures/binary-tree/tree-multi-set.test.mjs +91 -0
- package/test/performance/data-structures/binary-tree/tree-set.test.cpp +127 -0
- package/test/performance/data-structures/binary-tree/tree-set.test.mjs +174 -0
- package/test/performance/data-structures/comparison/{comparison.test.ts → comparison.test.mjs} +17 -17
- package/test/performance/data-structures/graph/{directed-graph.test.ts → directed-graph.test.mjs} +4 -4
- package/test/performance/data-structures/hash/hash-map.test.cpp +183 -0
- package/test/performance/data-structures/hash/hash-map.test.mjs +187 -0
- package/test/performance/data-structures/heap/heap.test.cpp +61 -0
- package/test/performance/data-structures/heap/heap.test.mjs +31 -0
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp +84 -0
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.mjs +125 -0
- package/test/performance/data-structures/linked-list/singly-linked-list.test.cpp +77 -0
- package/test/performance/data-structures/linked-list/singly-linked-list.test.mjs +84 -0
- package/test/performance/data-structures/priority-queue/max-priority-queue.test.mjs +40 -0
- package/test/performance/data-structures/priority-queue/priority-queue.test.cpp +59 -0
- package/test/performance/data-structures/priority-queue/priority-queue.test.mjs +64 -0
- package/test/performance/data-structures/queue/deque.test.cpp +119 -0
- package/test/performance/data-structures/queue/deque.test.mjs +144 -0
- package/test/performance/data-structures/queue/queue.test.cpp +59 -0
- package/test/performance/data-structures/queue/queue.test.mjs +77 -0
- package/test/performance/data-structures/stack/stack.test.cpp +40 -0
- package/test/performance/data-structures/stack/stack.test.mjs +69 -0
- package/test/performance/data-structures/trie/trie.test.mjs +43 -0
- package/test/performance/reportor-enhanced.mjs +871 -0
- package/test/performance/runner-config.json +33 -21
- package/test/unit/data-structures/base/iterable-element-base.more-branches.coverage.test.ts +6 -6
- package/test/unit/data-structures/base/linear-base.array.coverage.test.ts +5 -5
- package/test/unit/data-structures/base/linear-base.concat-else.coverage.test.ts +10 -10
- package/test/unit/data-structures/base/linear-base.more-branches.coverage.test.ts +7 -10
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +5 -5
- package/test/unit/data-structures/binary-tree/binary-tree.remaining-branches.coverage.test.ts +7 -4
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +7 -7
- package/test/unit/data-structures/binary-tree/bst.more-branches-3.coverage.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/bst.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/overall.test.ts +18 -31
- package/test/unit/data-structures/binary-tree/red-black-tree.boundary-max-update.coverage.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/red-black-tree.cache-stale-insert.coverage.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-mapmode-defined.coverage.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-mapmode-undefined.coverage.test.ts +5 -5
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-more.coverage.test.ts +3 -3
- package/test/unit/data-structures/binary-tree/red-black-tree.remaining-branches.coverage.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/red-black-tree.set-inputs.coverage.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-parent-cache.coverage.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-remaining.coverage.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-uncovered.coverage.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/red-black-tree.update-branches.coverage.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/tree-map.test.ts +270 -0
- package/test/unit/data-structures/binary-tree/tree-multi-map.coverage.test.ts +144 -3
- package/test/unit/data-structures/binary-tree/{tree-multi-map.test.ts → tree-multi-map.legacy.test.ts.skip} +16 -16
- package/test/unit/data-structures/binary-tree/tree-multi-map.rfc.test.ts +99 -0
- package/test/unit/data-structures/binary-tree/tree-multi-map.simplified.test.ts +482 -0
- package/test/unit/data-structures/binary-tree/tree-multi-set.test.ts +545 -0
- package/test/unit/data-structures/binary-tree/tree-set.test.ts +187 -0
- package/test/unit/unrestricted-interconversion.test.ts +12 -10
- package/test/utils/patch.ts +3 -3
- package/test/utils/perf.mjs +34 -0
- package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +0 -236
- package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -197
- package/dist/types/data-structures/binary-tree/tree-counter.d.ts +0 -243
- package/dist/types/types/data-structures/binary-tree/avl-tree-counter.d.ts +0 -2
- package/dist/types/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -2
- package/dist/types/types/data-structures/binary-tree/tree-counter.d.ts +0 -2
- package/src/data-structures/binary-tree/avl-tree-counter.ts +0 -539
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +0 -438
- package/src/data-structures/binary-tree/tree-counter.ts +0 -587
- package/src/types/data-structures/binary-tree/avl-tree-counter.ts +0 -3
- package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +0 -3
- package/src/types/data-structures/binary-tree/tree-counter.ts +0 -3
- package/test/performance/benchmark-runner.ts +0 -531
- package/test/performance/data-structures/binary-tree/avl-tree.test.ts +0 -40
- package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +0 -37
- package/test/performance/data-structures/binary-tree/binary-tree.test.ts +0 -40
- package/test/performance/data-structures/binary-tree/bst.test.ts +0 -28
- package/test/performance/data-structures/binary-tree/red-black-tree.test.ts +0 -60
- package/test/performance/data-structures/hash/hash-map.test.ts +0 -99
- package/test/performance/data-structures/heap/heap.test.ts +0 -26
- package/test/performance/data-structures/heap/min-heap.test.ts +0 -0
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +0 -59
- package/test/performance/data-structures/linked-list/linked-list.test.ts +0 -0
- package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +0 -35
- package/test/performance/data-structures/linked-list/skip-linked-list.test.ts +0 -0
- package/test/performance/data-structures/linked-list/skip-list.test.ts +0 -0
- package/test/performance/data-structures/matrix/matrix.test.ts +0 -0
- package/test/performance/data-structures/matrix/navigator.test.ts +0 -0
- package/test/performance/data-structures/priority-queue/max-priority-queue.test.ts +0 -17
- package/test/performance/data-structures/priority-queue/min-priority-queue.test.ts +0 -0
- package/test/performance/data-structures/priority-queue/priority-queue.test.ts +0 -34
- package/test/performance/data-structures/queue/deque.test.ts +0 -59
- package/test/performance/data-structures/queue/queue.test.ts +0 -35
- package/test/performance/data-structures/stack/stack.test.ts +0 -37
- package/test/performance/data-structures/trie/trie.test.ts +0 -18
- package/test/performance/reportor.ts +0 -279
- package/test/performance/single-suite-runner.ts +0 -72
- package/test/performance/types/index.ts +0 -1
- package/test/performance/types/reportor.ts +0 -7
- package/test/unit/data-structures/binary-tree/avl-tree-counter.more-branches-3.coverage.test.ts +0 -146
- package/test/unit/data-structures/binary-tree/avl-tree-counter.more-branches.coverage.test.ts +0 -93
- package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +0 -878
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.coverage.test.ts +0 -108
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.more-branches-2.coverage.test.ts +0 -85
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +0 -740
- package/test/unit/data-structures/binary-tree/tree-counter.coverage.test.ts +0 -115
- package/test/unit/data-structures/binary-tree/tree-counter.more-branches.coverage.test.ts +0 -244
- package/test/unit/data-structures/binary-tree/tree-counter.test.ts +0 -979
- /package/{test/performance/data-structures/binary-tree/binary-index-tree.test.ts → build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate-complete} +0 -0
- /package/{test/performance/data-structures/binary-tree/segment-tree.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-build} +0 -0
- /package/{test/performance/data-structures/binary-tree/tree-multimap.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-configure} +0 -0
- /package/{test/performance/data-structures/graph/abstract-graph.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-done} +0 -0
- /package/{test/performance/data-structures/graph/map-graph.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-download} +0 -0
- /package/{test/performance/data-structures/graph/overall.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-install} +0 -0
- /package/{test/performance/data-structures/graph/undirected-graph.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-mkdir} +0 -0
- /package/{test/performance/data-structures/hash/hash-table.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-patch} +0 -0
- /package/{test/performance/data-structures/heap/max-heap.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-test} +0 -0
- /package/test/unit/data-structures/binary-tree/{tree-multi-map.more-branches-2.coverage.test.ts → tree-multi-map.more-branches-2.coverage.test.ts.skip} +0 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// Copyright 2015 Google Inc. All rights reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
#include <cstdlib>
|
|
16
|
+
#include <iostream>
|
|
17
|
+
#include <map>
|
|
18
|
+
#include <string>
|
|
19
|
+
#include <tuple>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include "benchmark/benchmark.h"
|
|
23
|
+
#include "check.h"
|
|
24
|
+
#include "string_util.h"
|
|
25
|
+
#include "timers.h"
|
|
26
|
+
|
|
27
|
+
namespace benchmark {
|
|
28
|
+
|
|
29
|
+
BenchmarkReporter::BenchmarkReporter()
|
|
30
|
+
: output_stream_(&std::cout), error_stream_(&std::cerr) {}
|
|
31
|
+
|
|
32
|
+
BenchmarkReporter::~BenchmarkReporter() {}
|
|
33
|
+
|
|
34
|
+
void BenchmarkReporter::PrintBasicContext(std::ostream *out,
|
|
35
|
+
Context const &context) {
|
|
36
|
+
BM_CHECK(out) << "cannot be null";
|
|
37
|
+
auto &Out = *out;
|
|
38
|
+
|
|
39
|
+
#ifndef BENCHMARK_OS_QURT
|
|
40
|
+
// Date/time information is not available on QuRT.
|
|
41
|
+
// Attempting to get it via this call cause the binary to crash.
|
|
42
|
+
Out << LocalDateTimeString() << "\n";
|
|
43
|
+
#endif
|
|
44
|
+
|
|
45
|
+
if (context.executable_name)
|
|
46
|
+
Out << "Running " << context.executable_name << "\n";
|
|
47
|
+
|
|
48
|
+
const CPUInfo &info = context.cpu_info;
|
|
49
|
+
Out << "Run on (" << info.num_cpus << " X "
|
|
50
|
+
<< (info.cycles_per_second / 1000000.0) << " MHz CPU "
|
|
51
|
+
<< ((info.num_cpus > 1) ? "s" : "") << ")\n";
|
|
52
|
+
if (info.caches.size() != 0) {
|
|
53
|
+
Out << "CPU Caches:\n";
|
|
54
|
+
for (auto &CInfo : info.caches) {
|
|
55
|
+
Out << " L" << CInfo.level << " " << CInfo.type << " "
|
|
56
|
+
<< (CInfo.size / 1024) << " KiB";
|
|
57
|
+
if (CInfo.num_sharing != 0)
|
|
58
|
+
Out << " (x" << (info.num_cpus / CInfo.num_sharing) << ")";
|
|
59
|
+
Out << "\n";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (!info.load_avg.empty()) {
|
|
63
|
+
Out << "Load Average: ";
|
|
64
|
+
for (auto It = info.load_avg.begin(); It != info.load_avg.end();) {
|
|
65
|
+
Out << StrFormat("%.2f", *It++);
|
|
66
|
+
if (It != info.load_avg.end()) Out << ", ";
|
|
67
|
+
}
|
|
68
|
+
Out << "\n";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
std::map<std::string, std::string> *global_context =
|
|
72
|
+
internal::GetGlobalContext();
|
|
73
|
+
|
|
74
|
+
if (global_context != nullptr) {
|
|
75
|
+
for (const auto &kv : *global_context) {
|
|
76
|
+
Out << kv.first << ": " << kv.second << "\n";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (CPUInfo::Scaling::ENABLED == info.scaling) {
|
|
81
|
+
Out << "***WARNING*** CPU scaling is enabled, the benchmark "
|
|
82
|
+
"real time measurements may be noisy and will incur extra "
|
|
83
|
+
"overhead.\n";
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
#ifndef NDEBUG
|
|
87
|
+
Out << "***WARNING*** Library was built as DEBUG. Timings may be "
|
|
88
|
+
"affected.\n";
|
|
89
|
+
#endif
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// No initializer because it's already initialized to NULL.
|
|
93
|
+
const char *BenchmarkReporter::Context::executable_name;
|
|
94
|
+
|
|
95
|
+
BenchmarkReporter::Context::Context()
|
|
96
|
+
: cpu_info(CPUInfo::Get()), sys_info(SystemInfo::Get()) {}
|
|
97
|
+
|
|
98
|
+
std::string BenchmarkReporter::Run::benchmark_name() const {
|
|
99
|
+
std::string name = run_name.str();
|
|
100
|
+
if (run_type == RT_Aggregate) {
|
|
101
|
+
name += "_" + aggregate_name;
|
|
102
|
+
}
|
|
103
|
+
return name;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
double BenchmarkReporter::Run::GetAdjustedRealTime() const {
|
|
107
|
+
double new_time = real_accumulated_time * GetTimeUnitMultiplier(time_unit);
|
|
108
|
+
if (iterations != 0) new_time /= static_cast<double>(iterations);
|
|
109
|
+
return new_time;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
double BenchmarkReporter::Run::GetAdjustedCPUTime() const {
|
|
113
|
+
double new_time = cpu_accumulated_time * GetTimeUnitMultiplier(time_unit);
|
|
114
|
+
if (iterations != 0) new_time /= static_cast<double>(iterations);
|
|
115
|
+
return new_time;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
} // end namespace benchmark
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
// Copyright 2016 Ismael Jimenez Martinez. All rights reserved.
|
|
2
|
+
// Copyright 2017 Roman Lebedev. All rights reserved.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
|
|
16
|
+
#include "statistics.h"
|
|
17
|
+
|
|
18
|
+
#include <algorithm>
|
|
19
|
+
#include <cmath>
|
|
20
|
+
#include <numeric>
|
|
21
|
+
#include <string>
|
|
22
|
+
#include <vector>
|
|
23
|
+
|
|
24
|
+
#include "benchmark/benchmark.h"
|
|
25
|
+
#include "check.h"
|
|
26
|
+
|
|
27
|
+
namespace benchmark {
|
|
28
|
+
|
|
29
|
+
auto StatisticsSum = [](const std::vector<double>& v) {
|
|
30
|
+
return std::accumulate(v.begin(), v.end(), 0.0);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
double StatisticsMean(const std::vector<double>& v) {
|
|
34
|
+
if (v.empty()) return 0.0;
|
|
35
|
+
return StatisticsSum(v) * (1.0 / v.size());
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
double StatisticsMedian(const std::vector<double>& v) {
|
|
39
|
+
if (v.size() < 3) return StatisticsMean(v);
|
|
40
|
+
std::vector<double> copy(v);
|
|
41
|
+
|
|
42
|
+
auto center = copy.begin() + v.size() / 2;
|
|
43
|
+
std::nth_element(copy.begin(), center, copy.end());
|
|
44
|
+
|
|
45
|
+
// Did we have an odd number of samples? If yes, then center is the median.
|
|
46
|
+
// If not, then we are looking for the average between center and the value
|
|
47
|
+
// before. Instead of resorting, we just look for the max value before it,
|
|
48
|
+
// which is not necessarily the element immediately preceding `center` Since
|
|
49
|
+
// `copy` is only partially sorted by `nth_element`.
|
|
50
|
+
if (v.size() % 2 == 1) return *center;
|
|
51
|
+
auto center2 = std::max_element(copy.begin(), center);
|
|
52
|
+
return (*center + *center2) / 2.0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Return the sum of the squares of this sample set
|
|
56
|
+
auto SumSquares = [](const std::vector<double>& v) {
|
|
57
|
+
return std::inner_product(v.begin(), v.end(), v.begin(), 0.0);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
auto Sqr = [](const double dat) { return dat * dat; };
|
|
61
|
+
auto Sqrt = [](const double dat) {
|
|
62
|
+
// Avoid NaN due to imprecision in the calculations
|
|
63
|
+
if (dat < 0.0) return 0.0;
|
|
64
|
+
return std::sqrt(dat);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
double StatisticsStdDev(const std::vector<double>& v) {
|
|
68
|
+
const auto mean = StatisticsMean(v);
|
|
69
|
+
if (v.empty()) return mean;
|
|
70
|
+
|
|
71
|
+
// Sample standard deviation is undefined for n = 1
|
|
72
|
+
if (v.size() == 1) return 0.0;
|
|
73
|
+
|
|
74
|
+
const double avg_squares = SumSquares(v) * (1.0 / v.size());
|
|
75
|
+
return Sqrt(v.size() / (v.size() - 1.0) * (avg_squares - Sqr(mean)));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
double StatisticsCV(const std::vector<double>& v) {
|
|
79
|
+
if (v.size() < 2) return 0.0;
|
|
80
|
+
|
|
81
|
+
const auto stddev = StatisticsStdDev(v);
|
|
82
|
+
const auto mean = StatisticsMean(v);
|
|
83
|
+
|
|
84
|
+
return stddev / mean;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
std::vector<BenchmarkReporter::Run> ComputeStats(
|
|
88
|
+
const std::vector<BenchmarkReporter::Run>& reports) {
|
|
89
|
+
typedef BenchmarkReporter::Run Run;
|
|
90
|
+
std::vector<Run> results;
|
|
91
|
+
|
|
92
|
+
auto error_count = std::count_if(reports.begin(), reports.end(),
|
|
93
|
+
[](Run const& run) { return run.skipped; });
|
|
94
|
+
|
|
95
|
+
if (reports.size() - error_count < 2) {
|
|
96
|
+
// We don't report aggregated data if there was a single run.
|
|
97
|
+
return results;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Accumulators.
|
|
101
|
+
std::vector<double> real_accumulated_time_stat;
|
|
102
|
+
std::vector<double> cpu_accumulated_time_stat;
|
|
103
|
+
|
|
104
|
+
real_accumulated_time_stat.reserve(reports.size());
|
|
105
|
+
cpu_accumulated_time_stat.reserve(reports.size());
|
|
106
|
+
|
|
107
|
+
// All repetitions should be run with the same number of iterations so we
|
|
108
|
+
// can take this information from the first benchmark.
|
|
109
|
+
const IterationCount run_iterations = reports.front().iterations;
|
|
110
|
+
// create stats for user counters
|
|
111
|
+
struct CounterStat {
|
|
112
|
+
Counter c;
|
|
113
|
+
std::vector<double> s;
|
|
114
|
+
};
|
|
115
|
+
std::map<std::string, CounterStat> counter_stats;
|
|
116
|
+
for (Run const& r : reports) {
|
|
117
|
+
for (auto const& cnt : r.counters) {
|
|
118
|
+
auto it = counter_stats.find(cnt.first);
|
|
119
|
+
if (it == counter_stats.end()) {
|
|
120
|
+
it = counter_stats
|
|
121
|
+
.emplace(cnt.first,
|
|
122
|
+
CounterStat{cnt.second, std::vector<double>{}})
|
|
123
|
+
.first;
|
|
124
|
+
it->second.s.reserve(reports.size());
|
|
125
|
+
} else {
|
|
126
|
+
BM_CHECK_EQ(it->second.c.flags, cnt.second.flags);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Populate the accumulators.
|
|
132
|
+
for (Run const& run : reports) {
|
|
133
|
+
BM_CHECK_EQ(reports[0].benchmark_name(), run.benchmark_name());
|
|
134
|
+
BM_CHECK_EQ(run_iterations, run.iterations);
|
|
135
|
+
if (run.skipped) continue;
|
|
136
|
+
real_accumulated_time_stat.emplace_back(run.real_accumulated_time);
|
|
137
|
+
cpu_accumulated_time_stat.emplace_back(run.cpu_accumulated_time);
|
|
138
|
+
// user counters
|
|
139
|
+
for (auto const& cnt : run.counters) {
|
|
140
|
+
auto it = counter_stats.find(cnt.first);
|
|
141
|
+
BM_CHECK_NE(it, counter_stats.end());
|
|
142
|
+
it->second.s.emplace_back(cnt.second);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Only add label if it is same for all runs
|
|
147
|
+
std::string report_label = reports[0].report_label;
|
|
148
|
+
for (std::size_t i = 1; i < reports.size(); i++) {
|
|
149
|
+
if (reports[i].report_label != report_label) {
|
|
150
|
+
report_label = "";
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const double iteration_rescale_factor =
|
|
156
|
+
double(reports.size()) / double(run_iterations);
|
|
157
|
+
|
|
158
|
+
for (const auto& Stat : *reports[0].statistics) {
|
|
159
|
+
// Get the data from the accumulator to BenchmarkReporter::Run's.
|
|
160
|
+
Run data;
|
|
161
|
+
data.run_name = reports[0].run_name;
|
|
162
|
+
data.family_index = reports[0].family_index;
|
|
163
|
+
data.per_family_instance_index = reports[0].per_family_instance_index;
|
|
164
|
+
data.run_type = BenchmarkReporter::Run::RT_Aggregate;
|
|
165
|
+
data.threads = reports[0].threads;
|
|
166
|
+
data.repetitions = reports[0].repetitions;
|
|
167
|
+
data.repetition_index = Run::no_repetition_index;
|
|
168
|
+
data.aggregate_name = Stat.name_;
|
|
169
|
+
data.aggregate_unit = Stat.unit_;
|
|
170
|
+
data.report_label = report_label;
|
|
171
|
+
|
|
172
|
+
// It is incorrect to say that an aggregate is computed over
|
|
173
|
+
// run's iterations, because those iterations already got averaged.
|
|
174
|
+
// Similarly, if there are N repetitions with 1 iterations each,
|
|
175
|
+
// an aggregate will be computed over N measurements, not 1.
|
|
176
|
+
// Thus it is best to simply use the count of separate reports.
|
|
177
|
+
data.iterations = reports.size();
|
|
178
|
+
|
|
179
|
+
data.real_accumulated_time = Stat.compute_(real_accumulated_time_stat);
|
|
180
|
+
data.cpu_accumulated_time = Stat.compute_(cpu_accumulated_time_stat);
|
|
181
|
+
|
|
182
|
+
if (data.aggregate_unit == StatisticUnit::kTime) {
|
|
183
|
+
// We will divide these times by data.iterations when reporting, but the
|
|
184
|
+
// data.iterations is not necessarily the scale of these measurements,
|
|
185
|
+
// because in each repetition, these timers are sum over all the iters.
|
|
186
|
+
// And if we want to say that the stats are over N repetitions and not
|
|
187
|
+
// M iterations, we need to multiply these by (N/M).
|
|
188
|
+
data.real_accumulated_time *= iteration_rescale_factor;
|
|
189
|
+
data.cpu_accumulated_time *= iteration_rescale_factor;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
data.time_unit = reports[0].time_unit;
|
|
193
|
+
|
|
194
|
+
// user counters
|
|
195
|
+
for (auto const& kv : counter_stats) {
|
|
196
|
+
// Do *NOT* rescale the custom counters. They are already properly scaled.
|
|
197
|
+
const auto uc_stat = Stat.compute_(kv.second.s);
|
|
198
|
+
auto c = Counter(uc_stat, counter_stats[kv.first].c.flags,
|
|
199
|
+
counter_stats[kv.first].c.oneK);
|
|
200
|
+
data.counters[kv.first] = c;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
results.push_back(data);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return results;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
} // end namespace benchmark
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Copyright 2016 Ismael Jimenez Martinez. All rights reserved.
|
|
2
|
+
// Copyright 2017 Roman Lebedev. All rights reserved.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
|
|
16
|
+
#ifndef STATISTICS_H_
|
|
17
|
+
#define STATISTICS_H_
|
|
18
|
+
|
|
19
|
+
#include <vector>
|
|
20
|
+
|
|
21
|
+
#include "benchmark/benchmark.h"
|
|
22
|
+
|
|
23
|
+
namespace benchmark {
|
|
24
|
+
|
|
25
|
+
// Return a vector containing the mean, median and standard deviation
|
|
26
|
+
// information (and any user-specified info) for the specified list of reports.
|
|
27
|
+
// If 'reports' contains less than two non-errored runs an empty vector is
|
|
28
|
+
// returned
|
|
29
|
+
BENCHMARK_EXPORT
|
|
30
|
+
std::vector<BenchmarkReporter::Run> ComputeStats(
|
|
31
|
+
const std::vector<BenchmarkReporter::Run>& reports);
|
|
32
|
+
|
|
33
|
+
BENCHMARK_EXPORT
|
|
34
|
+
double StatisticsMean(const std::vector<double>& v);
|
|
35
|
+
BENCHMARK_EXPORT
|
|
36
|
+
double StatisticsMedian(const std::vector<double>& v);
|
|
37
|
+
BENCHMARK_EXPORT
|
|
38
|
+
double StatisticsStdDev(const std::vector<double>& v);
|
|
39
|
+
BENCHMARK_EXPORT
|
|
40
|
+
double StatisticsCV(const std::vector<double>& v);
|
|
41
|
+
|
|
42
|
+
} // end namespace benchmark
|
|
43
|
+
|
|
44
|
+
#endif // STATISTICS_H_
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
#include "string_util.h"
|
|
2
|
+
|
|
3
|
+
#include <array>
|
|
4
|
+
#ifdef BENCHMARK_STL_ANDROID_GNUSTL
|
|
5
|
+
#include <cerrno>
|
|
6
|
+
#endif
|
|
7
|
+
#include <cmath>
|
|
8
|
+
#include <cstdarg>
|
|
9
|
+
#include <cstdio>
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <sstream>
|
|
12
|
+
|
|
13
|
+
#include "arraysize.h"
|
|
14
|
+
#include "benchmark/benchmark.h"
|
|
15
|
+
|
|
16
|
+
namespace benchmark {
|
|
17
|
+
namespace {
|
|
18
|
+
// kilo, Mega, Giga, Tera, Peta, Exa, Zetta, Yotta.
|
|
19
|
+
const char* const kBigSIUnits[] = {"k", "M", "G", "T", "P", "E", "Z", "Y"};
|
|
20
|
+
// Kibi, Mebi, Gibi, Tebi, Pebi, Exbi, Zebi, Yobi.
|
|
21
|
+
const char* const kBigIECUnits[] = {"Ki", "Mi", "Gi", "Ti",
|
|
22
|
+
"Pi", "Ei", "Zi", "Yi"};
|
|
23
|
+
// milli, micro, nano, pico, femto, atto, zepto, yocto.
|
|
24
|
+
const char* const kSmallSIUnits[] = {"m", "u", "n", "p", "f", "a", "z", "y"};
|
|
25
|
+
|
|
26
|
+
// We require that all three arrays have the same size.
|
|
27
|
+
static_assert(arraysize(kBigSIUnits) == arraysize(kBigIECUnits),
|
|
28
|
+
"SI and IEC unit arrays must be the same size");
|
|
29
|
+
static_assert(arraysize(kSmallSIUnits) == arraysize(kBigSIUnits),
|
|
30
|
+
"Small SI and Big SI unit arrays must be the same size");
|
|
31
|
+
|
|
32
|
+
static const int64_t kUnitsSize = arraysize(kBigSIUnits);
|
|
33
|
+
|
|
34
|
+
void ToExponentAndMantissa(double val, int precision, double one_k,
|
|
35
|
+
std::string* mantissa, int64_t* exponent) {
|
|
36
|
+
std::stringstream mantissa_stream;
|
|
37
|
+
|
|
38
|
+
if (val < 0) {
|
|
39
|
+
mantissa_stream << "-";
|
|
40
|
+
val = -val;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Adjust threshold so that it never excludes things which can't be rendered
|
|
44
|
+
// in 'precision' digits.
|
|
45
|
+
const double adjusted_threshold =
|
|
46
|
+
std::max(1.0, 1.0 / std::pow(10.0, precision));
|
|
47
|
+
const double big_threshold = (adjusted_threshold * one_k) - 1;
|
|
48
|
+
const double small_threshold = adjusted_threshold;
|
|
49
|
+
// Values in ]simple_threshold,small_threshold[ will be printed as-is
|
|
50
|
+
const double simple_threshold = 0.01;
|
|
51
|
+
|
|
52
|
+
if (val > big_threshold) {
|
|
53
|
+
// Positive powers
|
|
54
|
+
double scaled = val;
|
|
55
|
+
for (size_t i = 0; i < arraysize(kBigSIUnits); ++i) {
|
|
56
|
+
scaled /= one_k;
|
|
57
|
+
if (scaled <= big_threshold) {
|
|
58
|
+
mantissa_stream << scaled;
|
|
59
|
+
*exponent = i + 1;
|
|
60
|
+
*mantissa = mantissa_stream.str();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
mantissa_stream << val;
|
|
65
|
+
*exponent = 0;
|
|
66
|
+
} else if (val < small_threshold) {
|
|
67
|
+
// Negative powers
|
|
68
|
+
if (val < simple_threshold) {
|
|
69
|
+
double scaled = val;
|
|
70
|
+
for (size_t i = 0; i < arraysize(kSmallSIUnits); ++i) {
|
|
71
|
+
scaled *= one_k;
|
|
72
|
+
if (scaled >= small_threshold) {
|
|
73
|
+
mantissa_stream << scaled;
|
|
74
|
+
*exponent = -static_cast<int64_t>(i + 1);
|
|
75
|
+
*mantissa = mantissa_stream.str();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
mantissa_stream << val;
|
|
81
|
+
*exponent = 0;
|
|
82
|
+
} else {
|
|
83
|
+
mantissa_stream << val;
|
|
84
|
+
*exponent = 0;
|
|
85
|
+
}
|
|
86
|
+
*mantissa = mantissa_stream.str();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
std::string ExponentToPrefix(int64_t exponent, bool iec) {
|
|
90
|
+
if (exponent == 0) return "";
|
|
91
|
+
|
|
92
|
+
const int64_t index = (exponent > 0 ? exponent - 1 : -exponent - 1);
|
|
93
|
+
if (index >= kUnitsSize) return "";
|
|
94
|
+
|
|
95
|
+
const char* const* array =
|
|
96
|
+
(exponent > 0 ? (iec ? kBigIECUnits : kBigSIUnits) : kSmallSIUnits);
|
|
97
|
+
|
|
98
|
+
return std::string(array[index]);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
std::string ToBinaryStringFullySpecified(double value, int precision,
|
|
102
|
+
Counter::OneK one_k) {
|
|
103
|
+
std::string mantissa;
|
|
104
|
+
int64_t exponent;
|
|
105
|
+
ToExponentAndMantissa(value, precision,
|
|
106
|
+
one_k == Counter::kIs1024 ? 1024.0 : 1000.0, &mantissa,
|
|
107
|
+
&exponent);
|
|
108
|
+
return mantissa + ExponentToPrefix(exponent, one_k == Counter::kIs1024);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
std::string StrFormatImp(const char* msg, va_list args) {
|
|
112
|
+
// we might need a second shot at this, so pre-emptivly make a copy
|
|
113
|
+
va_list args_cp;
|
|
114
|
+
va_copy(args_cp, args);
|
|
115
|
+
|
|
116
|
+
// TODO(ericwf): use std::array for first attempt to avoid one memory
|
|
117
|
+
// allocation guess what the size might be
|
|
118
|
+
std::array<char, 256> local_buff;
|
|
119
|
+
|
|
120
|
+
// 2015-10-08: vsnprintf is used instead of snd::vsnprintf due to a limitation
|
|
121
|
+
// in the android-ndk
|
|
122
|
+
auto ret = vsnprintf(local_buff.data(), local_buff.size(), msg, args_cp);
|
|
123
|
+
|
|
124
|
+
va_end(args_cp);
|
|
125
|
+
|
|
126
|
+
// handle empty expansion
|
|
127
|
+
if (ret == 0) return std::string{};
|
|
128
|
+
if (static_cast<std::size_t>(ret) < local_buff.size())
|
|
129
|
+
return std::string(local_buff.data());
|
|
130
|
+
|
|
131
|
+
// we did not provide a long enough buffer on our first attempt.
|
|
132
|
+
// add 1 to size to account for null-byte in size cast to prevent overflow
|
|
133
|
+
std::size_t size = static_cast<std::size_t>(ret) + 1;
|
|
134
|
+
auto buff_ptr = std::unique_ptr<char[]>(new char[size]);
|
|
135
|
+
// 2015-10-08: vsnprintf is used instead of snd::vsnprintf due to a limitation
|
|
136
|
+
// in the android-ndk
|
|
137
|
+
vsnprintf(buff_ptr.get(), size, msg, args);
|
|
138
|
+
return std::string(buff_ptr.get());
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
} // end namespace
|
|
142
|
+
|
|
143
|
+
std::string HumanReadableNumber(double n, Counter::OneK one_k) {
|
|
144
|
+
return ToBinaryStringFullySpecified(n, 1, one_k);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
std::string StrFormat(const char* format, ...) {
|
|
148
|
+
va_list args;
|
|
149
|
+
va_start(args, format);
|
|
150
|
+
std::string tmp = StrFormatImp(format, args);
|
|
151
|
+
va_end(args);
|
|
152
|
+
return tmp;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
std::vector<std::string> StrSplit(const std::string& str, char delim) {
|
|
156
|
+
if (str.empty()) return {};
|
|
157
|
+
std::vector<std::string> ret;
|
|
158
|
+
size_t first = 0;
|
|
159
|
+
size_t next = str.find(delim);
|
|
160
|
+
for (; next != std::string::npos;
|
|
161
|
+
first = next + 1, next = str.find(delim, first)) {
|
|
162
|
+
ret.push_back(str.substr(first, next - first));
|
|
163
|
+
}
|
|
164
|
+
ret.push_back(str.substr(first));
|
|
165
|
+
return ret;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
#ifdef BENCHMARK_STL_ANDROID_GNUSTL
|
|
169
|
+
/*
|
|
170
|
+
* GNU STL in Android NDK lacks support for some C++11 functions, including
|
|
171
|
+
* stoul, stoi, stod. We reimplement them here using C functions strtoul,
|
|
172
|
+
* strtol, strtod. Note that reimplemented functions are in benchmark::
|
|
173
|
+
* namespace, not std:: namespace.
|
|
174
|
+
*/
|
|
175
|
+
unsigned long stoul(const std::string& str, size_t* pos, int base) {
|
|
176
|
+
/* Record previous errno */
|
|
177
|
+
const int oldErrno = errno;
|
|
178
|
+
errno = 0;
|
|
179
|
+
|
|
180
|
+
const char* strStart = str.c_str();
|
|
181
|
+
char* strEnd = const_cast<char*>(strStart);
|
|
182
|
+
const unsigned long result = strtoul(strStart, &strEnd, base);
|
|
183
|
+
|
|
184
|
+
const int strtoulErrno = errno;
|
|
185
|
+
/* Restore previous errno */
|
|
186
|
+
errno = oldErrno;
|
|
187
|
+
|
|
188
|
+
/* Check for errors and return */
|
|
189
|
+
if (strtoulErrno == ERANGE) {
|
|
190
|
+
throw std::out_of_range("stoul failed: " + str +
|
|
191
|
+
" is outside of range of unsigned long");
|
|
192
|
+
} else if (strEnd == strStart || strtoulErrno != 0) {
|
|
193
|
+
throw std::invalid_argument("stoul failed: " + str + " is not an integer");
|
|
194
|
+
}
|
|
195
|
+
if (pos != nullptr) {
|
|
196
|
+
*pos = static_cast<size_t>(strEnd - strStart);
|
|
197
|
+
}
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
int stoi(const std::string& str, size_t* pos, int base) {
|
|
202
|
+
/* Record previous errno */
|
|
203
|
+
const int oldErrno = errno;
|
|
204
|
+
errno = 0;
|
|
205
|
+
|
|
206
|
+
const char* strStart = str.c_str();
|
|
207
|
+
char* strEnd = const_cast<char*>(strStart);
|
|
208
|
+
const long result = strtol(strStart, &strEnd, base);
|
|
209
|
+
|
|
210
|
+
const int strtolErrno = errno;
|
|
211
|
+
/* Restore previous errno */
|
|
212
|
+
errno = oldErrno;
|
|
213
|
+
|
|
214
|
+
/* Check for errors and return */
|
|
215
|
+
if (strtolErrno == ERANGE || long(int(result)) != result) {
|
|
216
|
+
throw std::out_of_range("stoul failed: " + str +
|
|
217
|
+
" is outside of range of int");
|
|
218
|
+
} else if (strEnd == strStart || strtolErrno != 0) {
|
|
219
|
+
throw std::invalid_argument("stoul failed: " + str + " is not an integer");
|
|
220
|
+
}
|
|
221
|
+
if (pos != nullptr) {
|
|
222
|
+
*pos = static_cast<size_t>(strEnd - strStart);
|
|
223
|
+
}
|
|
224
|
+
return int(result);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
double stod(const std::string& str, size_t* pos) {
|
|
228
|
+
/* Record previous errno */
|
|
229
|
+
const int oldErrno = errno;
|
|
230
|
+
errno = 0;
|
|
231
|
+
|
|
232
|
+
const char* strStart = str.c_str();
|
|
233
|
+
char* strEnd = const_cast<char*>(strStart);
|
|
234
|
+
const double result = strtod(strStart, &strEnd);
|
|
235
|
+
|
|
236
|
+
/* Restore previous errno */
|
|
237
|
+
const int strtodErrno = errno;
|
|
238
|
+
errno = oldErrno;
|
|
239
|
+
|
|
240
|
+
/* Check for errors and return */
|
|
241
|
+
if (strtodErrno == ERANGE) {
|
|
242
|
+
throw std::out_of_range("stoul failed: " + str +
|
|
243
|
+
" is outside of range of int");
|
|
244
|
+
} else if (strEnd == strStart || strtodErrno != 0) {
|
|
245
|
+
throw std::invalid_argument("stoul failed: " + str + " is not an integer");
|
|
246
|
+
}
|
|
247
|
+
if (pos != nullptr) {
|
|
248
|
+
*pos = static_cast<size_t>(strEnd - strStart);
|
|
249
|
+
}
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
252
|
+
#endif
|
|
253
|
+
|
|
254
|
+
} // end namespace benchmark
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#ifndef BENCHMARK_STRING_UTIL_H_
|
|
2
|
+
#define BENCHMARK_STRING_UTIL_H_
|
|
3
|
+
|
|
4
|
+
#include <sstream>
|
|
5
|
+
#include <string>
|
|
6
|
+
#include <utility>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
#include "benchmark/benchmark.h"
|
|
10
|
+
#include "benchmark/export.h"
|
|
11
|
+
#include "check.h"
|
|
12
|
+
#include "internal_macros.h"
|
|
13
|
+
|
|
14
|
+
namespace benchmark {
|
|
15
|
+
|
|
16
|
+
BENCHMARK_EXPORT
|
|
17
|
+
std::string HumanReadableNumber(double n, Counter::OneK one_k);
|
|
18
|
+
|
|
19
|
+
BENCHMARK_EXPORT
|
|
20
|
+
#if defined(__MINGW32__)
|
|
21
|
+
__attribute__((format(__MINGW_PRINTF_FORMAT, 1, 2)))
|
|
22
|
+
#elif defined(__GNUC__)
|
|
23
|
+
__attribute__((format(printf, 1, 2)))
|
|
24
|
+
#endif
|
|
25
|
+
std::string
|
|
26
|
+
StrFormat(const char* format, ...);
|
|
27
|
+
|
|
28
|
+
inline std::ostream& StrCatImp(std::ostream& out) BENCHMARK_NOEXCEPT {
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
template <class First, class... Rest>
|
|
33
|
+
inline std::ostream& StrCatImp(std::ostream& out, First&& f, Rest&&... rest) {
|
|
34
|
+
out << std::forward<First>(f);
|
|
35
|
+
return StrCatImp(out, std::forward<Rest>(rest)...);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
template <class... Args>
|
|
39
|
+
inline std::string StrCat(Args&&... args) {
|
|
40
|
+
std::ostringstream ss;
|
|
41
|
+
StrCatImp(ss, std::forward<Args>(args)...);
|
|
42
|
+
return ss.str();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
BENCHMARK_EXPORT
|
|
46
|
+
std::vector<std::string> StrSplit(const std::string& str, char delim);
|
|
47
|
+
|
|
48
|
+
// Disable lint checking for this block since it re-implements C functions.
|
|
49
|
+
// NOLINTBEGIN
|
|
50
|
+
#ifdef BENCHMARK_STL_ANDROID_GNUSTL
|
|
51
|
+
/*
|
|
52
|
+
* GNU STL in Android NDK lacks support for some C++11 functions, including
|
|
53
|
+
* stoul, stoi, stod. We reimplement them here using C functions strtoul,
|
|
54
|
+
* strtol, strtod. Note that reimplemented functions are in benchmark::
|
|
55
|
+
* namespace, not std:: namespace.
|
|
56
|
+
*/
|
|
57
|
+
unsigned long stoul(const std::string& str, size_t* pos = nullptr,
|
|
58
|
+
int base = 10);
|
|
59
|
+
int stoi(const std::string& str, size_t* pos = nullptr, int base = 10);
|
|
60
|
+
double stod(const std::string& str, size_t* pos = nullptr);
|
|
61
|
+
#else
|
|
62
|
+
using std::stod; // NOLINT(misc-unused-using-decls)
|
|
63
|
+
using std::stoi; // NOLINT(misc-unused-using-decls)
|
|
64
|
+
using std::stoul; // NOLINT(misc-unused-using-decls)
|
|
65
|
+
#endif
|
|
66
|
+
// NOLINTEND
|
|
67
|
+
|
|
68
|
+
} // end namespace benchmark
|
|
69
|
+
|
|
70
|
+
#endif // BENCHMARK_STRING_UTIL_H_
|