rj_schema 0.0.1
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.
- checksums.yaml +7 -0
- data/Rakefile +18 -0
- data/ext/rj_schema/extconf.rb +7 -0
- data/ext/rj_schema/rapidjson/CHANGELOG.md +158 -0
- data/ext/rj_schema/rapidjson/CMakeLists.txt +221 -0
- data/ext/rj_schema/rapidjson/CMakeModules/FindGTestSrc.cmake +30 -0
- data/ext/rj_schema/rapidjson/RapidJSON.pc.in +7 -0
- data/ext/rj_schema/rapidjson/RapidJSONConfig.cmake.in +15 -0
- data/ext/rj_schema/rapidjson/RapidJSONConfigVersion.cmake.in +10 -0
- data/ext/rj_schema/rapidjson/appveyor.yml +41 -0
- data/ext/rj_schema/rapidjson/bin/data/glossary.json +22 -0
- data/ext/rj_schema/rapidjson/bin/data/menu.json +27 -0
- data/ext/rj_schema/rapidjson/bin/data/readme.txt +1 -0
- data/ext/rj_schema/rapidjson/bin/data/sample.json +3315 -0
- data/ext/rj_schema/rapidjson/bin/data/webapp.json +88 -0
- data/ext/rj_schema/rapidjson/bin/data/widget.json +26 -0
- data/ext/rj_schema/rapidjson/bin/draft-04/schema +150 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16be.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16bebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16le.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16lebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32be.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32bebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32le.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32lebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf8.json +7 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf8bom.json +7 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail1.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail10.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail11.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail12.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail13.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail14.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail15.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail16.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail17.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail18.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail19.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail2.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail20.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail21.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail22.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail23.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail24.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail25.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail26.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail27.json +2 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail28.json +2 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail29.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail3.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail30.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail31.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail32.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail33.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail4.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail5.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail6.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail7.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail8.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail9.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass1.json +58 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass2.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass3.json +6 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/readme.txt +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/LICENSE +19 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/README.md +148 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/bin/jsonschema_suite +283 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/integer.json +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/subSchemas.json +8 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json +82 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json +88 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/default.json +49 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/dependencies.json +108 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/disallow.json +80 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json +60 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/enum.json +71 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/extends.json +94 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/items.json +46 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maximum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minimum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json +107 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/format.json +222 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json +18 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json +15 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/pattern.json +34 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json +110 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/properties.json +92 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/ref.json +159 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/refRemote.json +74 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/required.json +53 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/type.json +474 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json +79 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json +82 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json +88 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/allOf.json +112 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/anyOf.json +68 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/default.json +49 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/definitions.json +32 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/dependencies.json +113 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/enum.json +72 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/items.json +46 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maximum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minProperties.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minimum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json +60 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/not.json +96 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/oneOf.json +68 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json +107 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/format.json +148 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json +15 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/pattern.json +34 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json +110 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/properties.json +92 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/ref.json +159 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/refRemote.json +74 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/required.json +39 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/type.json +330 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json +79 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tox.ini +8 -0
- data/ext/rj_schema/rapidjson/bin/types/booleans.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/floats.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/guids.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/integers.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/mixed.json +592 -0
- data/ext/rj_schema/rapidjson/bin/types/nulls.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/paragraphs.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/readme.txt +1 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/LICENSE +45 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/README.md +7 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/rapidjson.natvis +38 -0
- data/ext/rj_schema/rapidjson/doc/CMakeLists.txt +27 -0
- data/ext/rj_schema/rapidjson/doc/Doxyfile.in +2369 -0
- data/ext/rj_schema/rapidjson/doc/Doxyfile.zh-cn.in +2369 -0
- data/ext/rj_schema/rapidjson/doc/diagram/architecture.dot +50 -0
- data/ext/rj_schema/rapidjson/doc/diagram/architecture.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.dot +65 -0
- data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.dot +62 -0
- data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/makefile +8 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move1.dot +47 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move1.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move2.dot +62 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move2.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move3.dot +60 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move3.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.dot +56 -0
- data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/simpledom.dot +54 -0
- data/ext/rj_schema/rapidjson/doc/diagram/simpledom.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/tutorial.dot +58 -0
- data/ext/rj_schema/rapidjson/doc/diagram/tutorial.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.dot +73 -0
- data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.png +0 -0
- data/ext/rj_schema/rapidjson/doc/dom.md +280 -0
- data/ext/rj_schema/rapidjson/doc/dom.zh-cn.md +284 -0
- data/ext/rj_schema/rapidjson/doc/encoding.md +146 -0
- data/ext/rj_schema/rapidjson/doc/encoding.zh-cn.md +152 -0
- data/ext/rj_schema/rapidjson/doc/faq.md +289 -0
- data/ext/rj_schema/rapidjson/doc/faq.zh-cn.md +290 -0
- data/ext/rj_schema/rapidjson/doc/features.md +104 -0
- data/ext/rj_schema/rapidjson/doc/features.zh-cn.md +103 -0
- data/ext/rj_schema/rapidjson/doc/internals.md +368 -0
- data/ext/rj_schema/rapidjson/doc/internals.zh-cn.md +363 -0
- data/ext/rj_schema/rapidjson/doc/logo/rapidjson.png +0 -0
- data/ext/rj_schema/rapidjson/doc/logo/rapidjson.svg +119 -0
- data/ext/rj_schema/rapidjson/doc/misc/DoxygenLayout.xml +194 -0
- data/ext/rj_schema/rapidjson/doc/misc/doxygenextra.css +274 -0
- data/ext/rj_schema/rapidjson/doc/misc/footer.html +11 -0
- data/ext/rj_schema/rapidjson/doc/misc/header.html +24 -0
- data/ext/rj_schema/rapidjson/doc/npm.md +31 -0
- data/ext/rj_schema/rapidjson/doc/performance.md +26 -0
- data/ext/rj_schema/rapidjson/doc/performance.zh-cn.md +26 -0
- data/ext/rj_schema/rapidjson/doc/pointer.md +234 -0
- data/ext/rj_schema/rapidjson/doc/pointer.zh-cn.md +234 -0
- data/ext/rj_schema/rapidjson/doc/sax.md +509 -0
- data/ext/rj_schema/rapidjson/doc/sax.zh-cn.md +487 -0
- data/ext/rj_schema/rapidjson/doc/schema.md +505 -0
- data/ext/rj_schema/rapidjson/doc/schema.zh-cn.md +237 -0
- data/ext/rj_schema/rapidjson/doc/stream.md +426 -0
- data/ext/rj_schema/rapidjson/doc/stream.zh-cn.md +426 -0
- data/ext/rj_schema/rapidjson/doc/tutorial.md +536 -0
- data/ext/rj_schema/rapidjson/doc/tutorial.zh-cn.md +534 -0
- data/ext/rj_schema/rapidjson/docker/debian/Dockerfile +8 -0
- data/ext/rj_schema/rapidjson/example/CMakeLists.txt +45 -0
- data/ext/rj_schema/rapidjson/example/archiver/archiver.cpp +292 -0
- data/ext/rj_schema/rapidjson/example/archiver/archiver.h +145 -0
- data/ext/rj_schema/rapidjson/example/archiver/archivertest.cpp +287 -0
- data/ext/rj_schema/rapidjson/example/capitalize/capitalize.cpp +67 -0
- data/ext/rj_schema/rapidjson/example/condense/condense.cpp +32 -0
- data/ext/rj_schema/rapidjson/example/filterkey/filterkey.cpp +135 -0
- data/ext/rj_schema/rapidjson/example/filterkeydom/filterkeydom.cpp +170 -0
- data/ext/rj_schema/rapidjson/example/jsonx/jsonx.cpp +207 -0
- data/ext/rj_schema/rapidjson/example/lookaheadparser/lookaheadparser.cpp +350 -0
- data/ext/rj_schema/rapidjson/example/messagereader/messagereader.cpp +105 -0
- data/ext/rj_schema/rapidjson/example/parsebyparts/parsebyparts.cpp +176 -0
- data/ext/rj_schema/rapidjson/example/pretty/pretty.cpp +30 -0
- data/ext/rj_schema/rapidjson/example/prettyauto/prettyauto.cpp +56 -0
- data/ext/rj_schema/rapidjson/example/schemavalidator/schemavalidator.cpp +78 -0
- data/ext/rj_schema/rapidjson/example/serialize/serialize.cpp +173 -0
- data/ext/rj_schema/rapidjson/example/simpledom/simpledom.cpp +29 -0
- data/ext/rj_schema/rapidjson/example/simplepullreader/simplepullreader.cpp +53 -0
- data/ext/rj_schema/rapidjson/example/simplereader/simplereader.cpp +42 -0
- data/ext/rj_schema/rapidjson/example/simplewriter/simplewriter.cpp +36 -0
- data/ext/rj_schema/rapidjson/example/tutorial/tutorial.cpp +151 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/allocators.h +271 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/cursorstreamwrapper.h +78 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/document.h +2630 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/encodedstream.h +299 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/encodings.h +716 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/error/en.h +74 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/error/error.h +161 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/filereadstream.h +99 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/filewritestream.h +104 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/fwd.h +151 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/biginteger.h +290 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/diyfp.h +258 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/dtoa.h +245 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/ieee754.h +78 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/itoa.h +304 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/meta.h +181 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/pow10.h +55 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/regex.h +734 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/stack.h +231 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strfunc.h +69 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strtod.h +269 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/swap.h +46 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/istreamwrapper.h +115 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/memorybuffer.h +70 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/memorystream.h +71 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/inttypes.h +316 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/stdint.h +300 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/ostreamwrapper.h +81 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/pointer.h +1363 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/prettywriter.h +277 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/rapidjson.h +628 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/reader.h +2222 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/schema.h +2479 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/stream.h +223 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/stringbuffer.h +121 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/writer.h +716 -0
- data/ext/rj_schema/rapidjson/include_dirs.js +2 -0
- data/ext/rj_schema/rapidjson/library.json +15 -0
- data/ext/rj_schema/rapidjson/license.txt +57 -0
- data/ext/rj_schema/rapidjson/package.json +24 -0
- data/ext/rj_schema/rapidjson/rapidjson.autopkg +77 -0
- data/ext/rj_schema/rapidjson/readme.md +160 -0
- data/ext/rj_schema/rapidjson/readme.zh-cn.md +152 -0
- data/ext/rj_schema/rapidjson/test/CMakeLists.txt +20 -0
- data/ext/rj_schema/rapidjson/test/perftest/CMakeLists.txt +28 -0
- data/ext/rj_schema/rapidjson/test/perftest/misctest.cpp +974 -0
- data/ext/rj_schema/rapidjson/test/perftest/perftest.cpp +24 -0
- data/ext/rj_schema/rapidjson/test/perftest/perftest.h +185 -0
- data/ext/rj_schema/rapidjson/test/perftest/platformtest.cpp +166 -0
- data/ext/rj_schema/rapidjson/test/perftest/rapidjsontest.cpp +472 -0
- data/ext/rj_schema/rapidjson/test/perftest/schematest.cpp +216 -0
- data/ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt +92 -0
- data/ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp +102 -0
- data/ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp +133 -0
- data/ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp +115 -0
- data/ext/rj_schema/rapidjson/test/unittest/documenttest.cpp +672 -0
- data/ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp +98 -0
- data/ext/rj_schema/rapidjson/test/unittest/encodedstreamtest.cpp +313 -0
- data/ext/rj_schema/rapidjson/test/unittest/encodingstest.cpp +451 -0
- data/ext/rj_schema/rapidjson/test/unittest/filestreamtest.cpp +112 -0
- data/ext/rj_schema/rapidjson/test/unittest/fwdtest.cpp +230 -0
- data/ext/rj_schema/rapidjson/test/unittest/istreamwrappertest.cpp +181 -0
- data/ext/rj_schema/rapidjson/test/unittest/itoatest.cpp +160 -0
- data/ext/rj_schema/rapidjson/test/unittest/jsoncheckertest.cpp +143 -0
- data/ext/rj_schema/rapidjson/test/unittest/namespacetest.cpp +70 -0
- data/ext/rj_schema/rapidjson/test/unittest/ostreamwrappertest.cpp +92 -0
- data/ext/rj_schema/rapidjson/test/unittest/pointertest.cpp +1529 -0
- data/ext/rj_schema/rapidjson/test/unittest/prettywritertest.cpp +344 -0
- data/ext/rj_schema/rapidjson/test/unittest/readertest.cpp +1895 -0
- data/ext/rj_schema/rapidjson/test/unittest/regextest.cpp +638 -0
- data/ext/rj_schema/rapidjson/test/unittest/schematest.cpp +2009 -0
- data/ext/rj_schema/rapidjson/test/unittest/simdtest.cpp +219 -0
- data/ext/rj_schema/rapidjson/test/unittest/strfunctest.cpp +30 -0
- data/ext/rj_schema/rapidjson/test/unittest/stringbuffertest.cpp +192 -0
- data/ext/rj_schema/rapidjson/test/unittest/strtodtest.cpp +132 -0
- data/ext/rj_schema/rapidjson/test/unittest/unittest.cpp +51 -0
- data/ext/rj_schema/rapidjson/test/unittest/unittest.h +140 -0
- data/ext/rj_schema/rapidjson/test/unittest/valuetest.cpp +1829 -0
- data/ext/rj_schema/rapidjson/test/unittest/writertest.cpp +598 -0
- data/ext/rj_schema/rapidjson/test/valgrind.supp +17 -0
- data/ext/rj_schema/rapidjson/travis-doxygen.sh +121 -0
- data/ext/rj_schema/rj_schema.cpp +136 -0
- data/lib/rj_schema.rb +7 -0
- metadata +371 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Tencent is pleased to support the open source community by making RapidJSON available.
|
|
2
|
+
//
|
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License"); you may not use this file except
|
|
6
|
+
// in compliance with the License. You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://opensource.org/licenses/MIT
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software distributed
|
|
11
|
+
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
12
|
+
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
13
|
+
// specific language governing permissions and limitations under the License.
|
|
14
|
+
|
|
15
|
+
#include "perftest.h"
|
|
16
|
+
|
|
17
|
+
int main(int argc, char **argv) {
|
|
18
|
+
#if _MSC_VER
|
|
19
|
+
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
|
|
20
|
+
//void *testWhetherMemoryLeakDetectionWorks = malloc(1);
|
|
21
|
+
#endif
|
|
22
|
+
::testing::InitGoogleTest(&argc, argv);
|
|
23
|
+
return RUN_ALL_TESTS();
|
|
24
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// Tencent is pleased to support the open source community by making RapidJSON available.
|
|
2
|
+
//
|
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License"); you may not use this file except
|
|
6
|
+
// in compliance with the License. You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://opensource.org/licenses/MIT
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software distributed
|
|
11
|
+
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
12
|
+
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
13
|
+
// specific language governing permissions and limitations under the License.
|
|
14
|
+
|
|
15
|
+
#ifndef PERFTEST_H_
|
|
16
|
+
#define PERFTEST_H_
|
|
17
|
+
|
|
18
|
+
#define TEST_RAPIDJSON 1
|
|
19
|
+
#define TEST_PLATFORM 0
|
|
20
|
+
#define TEST_MISC 0
|
|
21
|
+
|
|
22
|
+
#define TEST_VERSION_CODE(x,y,z) \
|
|
23
|
+
(((x)*100000) + ((y)*100) + (z))
|
|
24
|
+
|
|
25
|
+
// __SSE2__ and __SSE4_2__ are recognized by gcc, clang, and the Intel compiler.
|
|
26
|
+
// We use -march=native with gmake to enable -msse2 and -msse4.2, if supported.
|
|
27
|
+
// Likewise, __ARM_NEON is used to detect Neon.
|
|
28
|
+
#if defined(__SSE4_2__)
|
|
29
|
+
# define RAPIDJSON_SSE42
|
|
30
|
+
#elif defined(__SSE2__)
|
|
31
|
+
# define RAPIDJSON_SSE2
|
|
32
|
+
#elif defined(__ARM_NEON)
|
|
33
|
+
# define RAPIDJSON_NEON
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#define RAPIDJSON_HAS_STDSTRING 1
|
|
37
|
+
|
|
38
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
39
|
+
// Google Test
|
|
40
|
+
|
|
41
|
+
#ifdef __cplusplus
|
|
42
|
+
|
|
43
|
+
// gtest indirectly included inttypes.h, without __STDC_CONSTANT_MACROS.
|
|
44
|
+
#ifndef __STDC_CONSTANT_MACROS
|
|
45
|
+
# define __STDC_CONSTANT_MACROS 1 // required by C++ standard
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
#if defined(__clang__) || defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
|
|
49
|
+
#if defined(__clang__) || (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
|
|
50
|
+
#pragma GCC diagnostic push
|
|
51
|
+
#endif
|
|
52
|
+
#pragma GCC diagnostic ignored "-Weffc++"
|
|
53
|
+
#endif
|
|
54
|
+
|
|
55
|
+
#include "gtest/gtest.h"
|
|
56
|
+
|
|
57
|
+
#if defined(__clang__) || defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
|
|
58
|
+
#pragma GCC diagnostic pop
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
#ifdef _MSC_VER
|
|
62
|
+
#define _CRTDBG_MAP_ALLOC
|
|
63
|
+
#include <crtdbg.h>
|
|
64
|
+
#pragma warning(disable : 4996) // 'function': was declared deprecated
|
|
65
|
+
#endif
|
|
66
|
+
|
|
67
|
+
//! Base class for all performance tests
|
|
68
|
+
class PerfTest : public ::testing::Test {
|
|
69
|
+
public:
|
|
70
|
+
PerfTest() : filename_(), json_(), length_(), whitespace_(), whitespace_length_() {}
|
|
71
|
+
|
|
72
|
+
virtual void SetUp() {
|
|
73
|
+
{
|
|
74
|
+
const char *paths[] = {
|
|
75
|
+
"data/sample.json",
|
|
76
|
+
"bin/data/sample.json",
|
|
77
|
+
"../bin/data/sample.json",
|
|
78
|
+
"../../bin/data/sample.json",
|
|
79
|
+
"../../../bin/data/sample.json"
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
FILE *fp = 0;
|
|
83
|
+
for (size_t i = 0; i < sizeof(paths) / sizeof(paths[0]); i++) {
|
|
84
|
+
fp = fopen(filename_ = paths[i], "rb");
|
|
85
|
+
if (fp)
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
ASSERT_TRUE(fp != 0);
|
|
89
|
+
|
|
90
|
+
fseek(fp, 0, SEEK_END);
|
|
91
|
+
length_ = (size_t)ftell(fp);
|
|
92
|
+
fseek(fp, 0, SEEK_SET);
|
|
93
|
+
json_ = (char*)malloc(length_ + 1);
|
|
94
|
+
ASSERT_EQ(length_, fread(json_, 1, length_, fp));
|
|
95
|
+
json_[length_] = '\0';
|
|
96
|
+
fclose(fp);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// whitespace test
|
|
100
|
+
{
|
|
101
|
+
whitespace_length_ = 1024 * 1024;
|
|
102
|
+
whitespace_ = (char *)malloc(whitespace_length_ + 4);
|
|
103
|
+
char *p = whitespace_;
|
|
104
|
+
for (size_t i = 0; i < whitespace_length_; i += 4) {
|
|
105
|
+
*p++ = ' ';
|
|
106
|
+
*p++ = '\n';
|
|
107
|
+
*p++ = '\r';
|
|
108
|
+
*p++ = '\t';
|
|
109
|
+
}
|
|
110
|
+
*p++ = '[';
|
|
111
|
+
*p++ = '0';
|
|
112
|
+
*p++ = ']';
|
|
113
|
+
*p++ = '\0';
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// types test
|
|
117
|
+
{
|
|
118
|
+
const char *typespaths[] = {
|
|
119
|
+
"data/types",
|
|
120
|
+
"bin/types",
|
|
121
|
+
"../bin/types",
|
|
122
|
+
"../../bin/types/",
|
|
123
|
+
"../../../bin/types"
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const char* typesfilenames[] = {
|
|
127
|
+
"booleans.json",
|
|
128
|
+
"floats.json",
|
|
129
|
+
"guids.json",
|
|
130
|
+
"integers.json",
|
|
131
|
+
"mixed.json",
|
|
132
|
+
"nulls.json",
|
|
133
|
+
"paragraphs.json"
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
for (size_t j = 0; j < sizeof(typesfilenames) / sizeof(typesfilenames[0]); j++) {
|
|
137
|
+
types_[j] = 0;
|
|
138
|
+
for (size_t i = 0; i < sizeof(typespaths) / sizeof(typespaths[0]); i++) {
|
|
139
|
+
char filename[256];
|
|
140
|
+
sprintf(filename, "%s/%s", typespaths[i], typesfilenames[j]);
|
|
141
|
+
if (FILE* fp = fopen(filename, "rb")) {
|
|
142
|
+
fseek(fp, 0, SEEK_END);
|
|
143
|
+
typesLength_[j] = (size_t)ftell(fp);
|
|
144
|
+
fseek(fp, 0, SEEK_SET);
|
|
145
|
+
types_[j] = (char*)malloc(typesLength_[j] + 1);
|
|
146
|
+
ASSERT_EQ(typesLength_[j], fread(types_[j], 1, typesLength_[j], fp));
|
|
147
|
+
types_[j][typesLength_[j]] = '\0';
|
|
148
|
+
fclose(fp);
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
virtual void TearDown() {
|
|
157
|
+
free(json_);
|
|
158
|
+
free(whitespace_);
|
|
159
|
+
json_ = 0;
|
|
160
|
+
whitespace_ = 0;
|
|
161
|
+
for (size_t i = 0; i < 7; i++) {
|
|
162
|
+
free(types_[i]);
|
|
163
|
+
types_[i] = 0;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private:
|
|
168
|
+
PerfTest(const PerfTest&);
|
|
169
|
+
PerfTest& operator=(const PerfTest&);
|
|
170
|
+
|
|
171
|
+
protected:
|
|
172
|
+
const char* filename_;
|
|
173
|
+
char *json_;
|
|
174
|
+
size_t length_;
|
|
175
|
+
char *whitespace_;
|
|
176
|
+
size_t whitespace_length_;
|
|
177
|
+
char *types_[7];
|
|
178
|
+
size_t typesLength_[7];
|
|
179
|
+
|
|
180
|
+
static const size_t kTrialCount = 1000;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
#endif // __cplusplus
|
|
184
|
+
|
|
185
|
+
#endif // PERFTEST_H_
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// Tencent is pleased to support the open source community by making RapidJSON available.
|
|
2
|
+
//
|
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License"); you may not use this file except
|
|
6
|
+
// in compliance with the License. You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://opensource.org/licenses/MIT
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software distributed
|
|
11
|
+
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
12
|
+
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
13
|
+
// specific language governing permissions and limitations under the License.
|
|
14
|
+
|
|
15
|
+
#include "perftest.h"
|
|
16
|
+
|
|
17
|
+
// This file is for giving the performance characteristics of the platform (compiler/OS/CPU).
|
|
18
|
+
|
|
19
|
+
#if TEST_PLATFORM
|
|
20
|
+
|
|
21
|
+
#include <cmath>
|
|
22
|
+
#include <fcntl.h>
|
|
23
|
+
|
|
24
|
+
// Windows
|
|
25
|
+
#ifdef _WIN32
|
|
26
|
+
#include <windows.h>
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
// UNIX
|
|
30
|
+
#if defined(unix) || defined(__unix__) || defined(__unix)
|
|
31
|
+
#include <unistd.h>
|
|
32
|
+
#ifdef _POSIX_MAPPED_FILES
|
|
33
|
+
#include <sys/mman.h>
|
|
34
|
+
#endif
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
class Platform : public PerfTest {
|
|
38
|
+
public:
|
|
39
|
+
virtual void SetUp() {
|
|
40
|
+
PerfTest::SetUp();
|
|
41
|
+
|
|
42
|
+
// temp buffer for testing
|
|
43
|
+
temp_ = (char *)malloc(length_ + 1);
|
|
44
|
+
memcpy(temp_, json_, length_);
|
|
45
|
+
checkSum_ = CheckSum();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
char CheckSum() {
|
|
49
|
+
char c = 0;
|
|
50
|
+
for (size_t i = 0; i < length_; ++i)
|
|
51
|
+
c += temp_[i];
|
|
52
|
+
return c;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
virtual void TearDown() {
|
|
56
|
+
PerfTest::TearDown();
|
|
57
|
+
free(temp_);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
protected:
|
|
61
|
+
char *temp_;
|
|
62
|
+
char checkSum_;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
TEST_F(Platform, CheckSum) {
|
|
66
|
+
for (int i = 0; i < kTrialCount; i++)
|
|
67
|
+
EXPECT_EQ(checkSum_, CheckSum());
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
TEST_F(Platform, strlen) {
|
|
71
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
72
|
+
size_t l = strlen(json_);
|
|
73
|
+
EXPECT_EQ(length_, l);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
TEST_F(Platform, memcmp) {
|
|
78
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
79
|
+
EXPECT_EQ(0, memcmp(temp_, json_, length_));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
TEST_F(Platform, pow) {
|
|
84
|
+
double sum = 0;
|
|
85
|
+
for (int i = 0; i < kTrialCount * kTrialCount; i++)
|
|
86
|
+
sum += pow(10.0, i & 255);
|
|
87
|
+
EXPECT_GT(sum, 0.0);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
TEST_F(Platform, Whitespace_strlen) {
|
|
91
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
92
|
+
size_t l = strlen(whitespace_);
|
|
93
|
+
EXPECT_GT(l, whitespace_length_);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
TEST_F(Platform, Whitespace_strspn) {
|
|
98
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
99
|
+
size_t l = strspn(whitespace_, " \n\r\t");
|
|
100
|
+
EXPECT_EQ(whitespace_length_, l);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
TEST_F(Platform, fread) {
|
|
105
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
106
|
+
FILE *fp = fopen(filename_, "rb");
|
|
107
|
+
ASSERT_EQ(length_, fread(temp_, 1, length_, fp));
|
|
108
|
+
EXPECT_EQ(checkSum_, CheckSum());
|
|
109
|
+
fclose(fp);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
#ifdef _MSC_VER
|
|
114
|
+
TEST_F(Platform, read) {
|
|
115
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
116
|
+
int fd = _open(filename_, _O_BINARY | _O_RDONLY);
|
|
117
|
+
ASSERT_NE(-1, fd);
|
|
118
|
+
ASSERT_EQ(length_, _read(fd, temp_, length_));
|
|
119
|
+
EXPECT_EQ(checkSum_, CheckSum());
|
|
120
|
+
_close(fd);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
#else
|
|
124
|
+
TEST_F(Platform, read) {
|
|
125
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
126
|
+
int fd = open(filename_, O_RDONLY);
|
|
127
|
+
ASSERT_NE(-1, fd);
|
|
128
|
+
ASSERT_EQ(length_, read(fd, temp_, length_));
|
|
129
|
+
EXPECT_EQ(checkSum_, CheckSum());
|
|
130
|
+
close(fd);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
#endif
|
|
134
|
+
|
|
135
|
+
#ifdef _WIN32
|
|
136
|
+
TEST_F(Platform, MapViewOfFile) {
|
|
137
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
138
|
+
HANDLE file = CreateFile(filename_, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
139
|
+
ASSERT_NE(INVALID_HANDLE_VALUE, file);
|
|
140
|
+
HANDLE mapObject = CreateFileMapping(file, NULL, PAGE_READONLY, 0, length_, NULL);
|
|
141
|
+
ASSERT_NE(INVALID_HANDLE_VALUE, mapObject);
|
|
142
|
+
void *p = MapViewOfFile(mapObject, FILE_MAP_READ, 0, 0, length_);
|
|
143
|
+
ASSERT_TRUE(p != NULL);
|
|
144
|
+
EXPECT_EQ(checkSum_, CheckSum());
|
|
145
|
+
ASSERT_TRUE(UnmapViewOfFile(p) == TRUE);
|
|
146
|
+
ASSERT_TRUE(CloseHandle(mapObject) == TRUE);
|
|
147
|
+
ASSERT_TRUE(CloseHandle(file) == TRUE);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
#endif
|
|
151
|
+
|
|
152
|
+
#ifdef _POSIX_MAPPED_FILES
|
|
153
|
+
TEST_F(Platform, mmap) {
|
|
154
|
+
for (int i = 0; i < kTrialCount; i++) {
|
|
155
|
+
int fd = open(filename_, O_RDONLY);
|
|
156
|
+
ASSERT_NE(-1, fd);
|
|
157
|
+
void *p = mmap(NULL, length_, PROT_READ, MAP_PRIVATE, fd, 0);
|
|
158
|
+
ASSERT_TRUE(p != NULL);
|
|
159
|
+
EXPECT_EQ(checkSum_, CheckSum());
|
|
160
|
+
munmap(p, length_);
|
|
161
|
+
close(fd);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
#endif
|
|
165
|
+
|
|
166
|
+
#endif // TEST_PLATFORM
|
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
// Tencent is pleased to support the open source community by making RapidJSON available.
|
|
2
|
+
//
|
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the MIT License (the "License"); you may not use this file except
|
|
6
|
+
// in compliance with the License. You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://opensource.org/licenses/MIT
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software distributed
|
|
11
|
+
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
12
|
+
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
13
|
+
// specific language governing permissions and limitations under the License.
|
|
14
|
+
|
|
15
|
+
#include "perftest.h"
|
|
16
|
+
|
|
17
|
+
#if TEST_RAPIDJSON
|
|
18
|
+
|
|
19
|
+
#include "rapidjson/rapidjson.h"
|
|
20
|
+
#include "rapidjson/document.h"
|
|
21
|
+
#include "rapidjson/prettywriter.h"
|
|
22
|
+
#include "rapidjson/stringbuffer.h"
|
|
23
|
+
#include "rapidjson/filereadstream.h"
|
|
24
|
+
#include "rapidjson/encodedstream.h"
|
|
25
|
+
#include "rapidjson/memorystream.h"
|
|
26
|
+
|
|
27
|
+
#ifdef RAPIDJSON_SSE2
|
|
28
|
+
#define SIMD_SUFFIX(name) name##_SSE2
|
|
29
|
+
#elif defined(RAPIDJSON_SSE42)
|
|
30
|
+
#define SIMD_SUFFIX(name) name##_SSE42
|
|
31
|
+
#elif defined(RAPIDJSON_NEON)
|
|
32
|
+
#define SIMD_SUFFIX(name) name##_NEON
|
|
33
|
+
#else
|
|
34
|
+
#define SIMD_SUFFIX(name) name
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
using namespace rapidjson;
|
|
38
|
+
|
|
39
|
+
class RapidJson : public PerfTest {
|
|
40
|
+
public:
|
|
41
|
+
RapidJson() : temp_(), doc_() {}
|
|
42
|
+
|
|
43
|
+
virtual void SetUp() {
|
|
44
|
+
PerfTest::SetUp();
|
|
45
|
+
|
|
46
|
+
// temp buffer for insitu parsing.
|
|
47
|
+
temp_ = (char *)malloc(length_ + 1);
|
|
48
|
+
|
|
49
|
+
// Parse as a document
|
|
50
|
+
EXPECT_FALSE(doc_.Parse(json_).HasParseError());
|
|
51
|
+
|
|
52
|
+
for (size_t i = 0; i < 7; i++)
|
|
53
|
+
EXPECT_FALSE(typesDoc_[i].Parse(types_[i]).HasParseError());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
virtual void TearDown() {
|
|
57
|
+
PerfTest::TearDown();
|
|
58
|
+
free(temp_);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private:
|
|
62
|
+
RapidJson(const RapidJson&);
|
|
63
|
+
RapidJson& operator=(const RapidJson&);
|
|
64
|
+
|
|
65
|
+
protected:
|
|
66
|
+
char *temp_;
|
|
67
|
+
Document doc_;
|
|
68
|
+
Document typesDoc_[7];
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseInsitu_DummyHandler)) {
|
|
72
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
73
|
+
memcpy(temp_, json_, length_ + 1);
|
|
74
|
+
InsituStringStream s(temp_);
|
|
75
|
+
BaseReaderHandler<> h;
|
|
76
|
+
Reader reader;
|
|
77
|
+
EXPECT_TRUE(reader.Parse<kParseInsituFlag>(s, h));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseInsitu_DummyHandler_ValidateEncoding)) {
|
|
82
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
83
|
+
memcpy(temp_, json_, length_ + 1);
|
|
84
|
+
InsituStringStream s(temp_);
|
|
85
|
+
BaseReaderHandler<> h;
|
|
86
|
+
Reader reader;
|
|
87
|
+
EXPECT_TRUE(reader.Parse<kParseInsituFlag | kParseValidateEncodingFlag>(s, h));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler)) {
|
|
92
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
93
|
+
StringStream s(json_);
|
|
94
|
+
BaseReaderHandler<> h;
|
|
95
|
+
Reader reader;
|
|
96
|
+
EXPECT_TRUE(reader.Parse(s, h));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
#define TEST_TYPED(index, Name)\
|
|
101
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_##Name)) {\
|
|
102
|
+
for (size_t i = 0; i < kTrialCount * 10; i++) {\
|
|
103
|
+
StringStream s(types_[index]);\
|
|
104
|
+
BaseReaderHandler<> h;\
|
|
105
|
+
Reader reader;\
|
|
106
|
+
EXPECT_TRUE(reader.Parse(s, h));\
|
|
107
|
+
}\
|
|
108
|
+
}\
|
|
109
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseInsitu_DummyHandler_##Name)) {\
|
|
110
|
+
for (size_t i = 0; i < kTrialCount * 10; i++) {\
|
|
111
|
+
memcpy(temp_, types_[index], typesLength_[index] + 1);\
|
|
112
|
+
InsituStringStream s(temp_);\
|
|
113
|
+
BaseReaderHandler<> h;\
|
|
114
|
+
Reader reader;\
|
|
115
|
+
EXPECT_TRUE(reader.Parse<kParseInsituFlag>(s, h));\
|
|
116
|
+
}\
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
TEST_TYPED(0, Booleans)
|
|
120
|
+
TEST_TYPED(1, Floats)
|
|
121
|
+
TEST_TYPED(2, Guids)
|
|
122
|
+
TEST_TYPED(3, Integers)
|
|
123
|
+
TEST_TYPED(4, Mixed)
|
|
124
|
+
TEST_TYPED(5, Nulls)
|
|
125
|
+
TEST_TYPED(6, Paragraphs)
|
|
126
|
+
|
|
127
|
+
#undef TEST_TYPED
|
|
128
|
+
|
|
129
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_FullPrecision)) {
|
|
130
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
131
|
+
StringStream s(json_);
|
|
132
|
+
BaseReaderHandler<> h;
|
|
133
|
+
Reader reader;
|
|
134
|
+
EXPECT_TRUE(reader.Parse<kParseFullPrecisionFlag>(s, h));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseIterative_DummyHandler)) {
|
|
139
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
140
|
+
StringStream s(json_);
|
|
141
|
+
BaseReaderHandler<> h;
|
|
142
|
+
Reader reader;
|
|
143
|
+
EXPECT_TRUE(reader.Parse<kParseIterativeFlag>(s, h));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseIterativeInsitu_DummyHandler)) {
|
|
148
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
149
|
+
memcpy(temp_, json_, length_ + 1);
|
|
150
|
+
InsituStringStream s(temp_);
|
|
151
|
+
BaseReaderHandler<> h;
|
|
152
|
+
Reader reader;
|
|
153
|
+
EXPECT_TRUE(reader.Parse<kParseIterativeFlag|kParseInsituFlag>(s, h));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseIterativePull_DummyHandler)) {
|
|
158
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
159
|
+
StringStream s(json_);
|
|
160
|
+
BaseReaderHandler<> h;
|
|
161
|
+
Reader reader;
|
|
162
|
+
reader.IterativeParseInit();
|
|
163
|
+
while (!reader.IterativeParseComplete()) {
|
|
164
|
+
if (!reader.IterativeParseNext<kParseDefaultFlags>(s, h))
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
EXPECT_FALSE(reader.HasParseError());
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseIterativePullInsitu_DummyHandler)) {
|
|
172
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
173
|
+
memcpy(temp_, json_, length_ + 1);
|
|
174
|
+
InsituStringStream s(temp_);
|
|
175
|
+
BaseReaderHandler<> h;
|
|
176
|
+
Reader reader;
|
|
177
|
+
reader.IterativeParseInit();
|
|
178
|
+
while (!reader.IterativeParseComplete()) {
|
|
179
|
+
if (!reader.IterativeParseNext<kParseDefaultFlags|kParseInsituFlag>(s, h))
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
EXPECT_FALSE(reader.HasParseError());
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_ValidateEncoding)) {
|
|
187
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
188
|
+
StringStream s(json_);
|
|
189
|
+
BaseReaderHandler<> h;
|
|
190
|
+
Reader reader;
|
|
191
|
+
EXPECT_TRUE(reader.Parse<kParseValidateEncodingFlag>(s, h));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseInsitu_MemoryPoolAllocator)) {
|
|
196
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
197
|
+
memcpy(temp_, json_, length_ + 1);
|
|
198
|
+
Document doc;
|
|
199
|
+
doc.ParseInsitu(temp_);
|
|
200
|
+
ASSERT_TRUE(doc.IsObject());
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseIterativeInsitu_MemoryPoolAllocator)) {
|
|
205
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
206
|
+
memcpy(temp_, json_, length_ + 1);
|
|
207
|
+
Document doc;
|
|
208
|
+
doc.ParseInsitu<kParseIterativeFlag>(temp_);
|
|
209
|
+
ASSERT_TRUE(doc.IsObject());
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParse_MemoryPoolAllocator)) {
|
|
214
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
215
|
+
Document doc;
|
|
216
|
+
doc.Parse(json_);
|
|
217
|
+
ASSERT_TRUE(doc.IsObject());
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseLength_MemoryPoolAllocator)) {
|
|
222
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
223
|
+
Document doc;
|
|
224
|
+
doc.Parse(json_, length_);
|
|
225
|
+
ASSERT_TRUE(doc.IsObject());
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
#if RAPIDJSON_HAS_STDSTRING
|
|
230
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseStdString_MemoryPoolAllocator)) {
|
|
231
|
+
const std::string s(json_, length_);
|
|
232
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
233
|
+
Document doc;
|
|
234
|
+
doc.Parse(s);
|
|
235
|
+
ASSERT_TRUE(doc.IsObject());
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
#endif
|
|
239
|
+
|
|
240
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseIterative_MemoryPoolAllocator)) {
|
|
241
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
242
|
+
Document doc;
|
|
243
|
+
doc.Parse<kParseIterativeFlag>(json_);
|
|
244
|
+
ASSERT_TRUE(doc.IsObject());
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParse_CrtAllocator)) {
|
|
249
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
250
|
+
memcpy(temp_, json_, length_ + 1);
|
|
251
|
+
GenericDocument<UTF8<>, CrtAllocator> doc;
|
|
252
|
+
doc.Parse(temp_);
|
|
253
|
+
ASSERT_TRUE(doc.IsObject());
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseEncodedInputStream_MemoryStream)) {
|
|
258
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
259
|
+
MemoryStream ms(json_, length_);
|
|
260
|
+
EncodedInputStream<UTF8<>, MemoryStream> is(ms);
|
|
261
|
+
Document doc;
|
|
262
|
+
doc.ParseStream<0, UTF8<> >(is);
|
|
263
|
+
ASSERT_TRUE(doc.IsObject());
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseAutoUTFInputStream_MemoryStream)) {
|
|
268
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
269
|
+
MemoryStream ms(json_, length_);
|
|
270
|
+
AutoUTFInputStream<unsigned, MemoryStream> is(ms);
|
|
271
|
+
Document doc;
|
|
272
|
+
doc.ParseStream<0, AutoUTF<unsigned> >(is);
|
|
273
|
+
ASSERT_TRUE(doc.IsObject());
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
template<typename T>
|
|
278
|
+
size_t Traverse(const T& value) {
|
|
279
|
+
size_t count = 1;
|
|
280
|
+
switch(value.GetType()) {
|
|
281
|
+
case kObjectType:
|
|
282
|
+
for (typename T::ConstMemberIterator itr = value.MemberBegin(); itr != value.MemberEnd(); ++itr) {
|
|
283
|
+
count++; // name
|
|
284
|
+
count += Traverse(itr->value);
|
|
285
|
+
}
|
|
286
|
+
break;
|
|
287
|
+
|
|
288
|
+
case kArrayType:
|
|
289
|
+
for (typename T::ConstValueIterator itr = value.Begin(); itr != value.End(); ++itr)
|
|
290
|
+
count += Traverse(*itr);
|
|
291
|
+
break;
|
|
292
|
+
|
|
293
|
+
default:
|
|
294
|
+
// Do nothing.
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
return count;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
TEST_F(RapidJson, DocumentTraverse) {
|
|
301
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
302
|
+
size_t count = Traverse(doc_);
|
|
303
|
+
EXPECT_EQ(4339u, count);
|
|
304
|
+
//if (i == 0)
|
|
305
|
+
// std::cout << count << std::endl;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
#ifdef __GNUC__
|
|
310
|
+
RAPIDJSON_DIAG_PUSH
|
|
311
|
+
RAPIDJSON_DIAG_OFF(effc++)
|
|
312
|
+
#endif
|
|
313
|
+
|
|
314
|
+
struct ValueCounter : public BaseReaderHandler<> {
|
|
315
|
+
ValueCounter() : count_(1) {} // root
|
|
316
|
+
|
|
317
|
+
bool EndObject(SizeType memberCount) { count_ += memberCount * 2; return true; }
|
|
318
|
+
bool EndArray(SizeType elementCount) { count_ += elementCount; return true; }
|
|
319
|
+
|
|
320
|
+
SizeType count_;
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
#ifdef __GNUC__
|
|
324
|
+
RAPIDJSON_DIAG_POP
|
|
325
|
+
#endif
|
|
326
|
+
|
|
327
|
+
TEST_F(RapidJson, DocumentAccept) {
|
|
328
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
329
|
+
ValueCounter counter;
|
|
330
|
+
doc_.Accept(counter);
|
|
331
|
+
EXPECT_EQ(4339u, counter.count_);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
struct NullStream {
|
|
336
|
+
typedef char Ch;
|
|
337
|
+
|
|
338
|
+
NullStream() /*: length_(0)*/ {}
|
|
339
|
+
void Put(Ch) { /*++length_;*/ }
|
|
340
|
+
void Flush() {}
|
|
341
|
+
//size_t length_;
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
TEST_F(RapidJson, Writer_NullStream) {
|
|
345
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
346
|
+
NullStream s;
|
|
347
|
+
Writer<NullStream> writer(s);
|
|
348
|
+
doc_.Accept(writer);
|
|
349
|
+
//if (i == 0)
|
|
350
|
+
// std::cout << s.length_ << std::endl;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
TEST_F(RapidJson, SIMD_SUFFIX(Writer_StringBuffer)) {
|
|
355
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
356
|
+
StringBuffer s(0, 1024 * 1024);
|
|
357
|
+
Writer<StringBuffer> writer(s);
|
|
358
|
+
doc_.Accept(writer);
|
|
359
|
+
const char* str = s.GetString();
|
|
360
|
+
(void)str;
|
|
361
|
+
//if (i == 0)
|
|
362
|
+
// std::cout << strlen(str) << std::endl;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
#define TEST_TYPED(index, Name)\
|
|
367
|
+
TEST_F(RapidJson, SIMD_SUFFIX(Writer_StringBuffer_##Name)) {\
|
|
368
|
+
for (size_t i = 0; i < kTrialCount * 10; i++) {\
|
|
369
|
+
StringBuffer s(0, 1024 * 1024);\
|
|
370
|
+
Writer<StringBuffer> writer(s);\
|
|
371
|
+
typesDoc_[index].Accept(writer);\
|
|
372
|
+
const char* str = s.GetString();\
|
|
373
|
+
(void)str;\
|
|
374
|
+
}\
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
TEST_TYPED(0, Booleans)
|
|
378
|
+
TEST_TYPED(1, Floats)
|
|
379
|
+
TEST_TYPED(2, Guids)
|
|
380
|
+
TEST_TYPED(3, Integers)
|
|
381
|
+
TEST_TYPED(4, Mixed)
|
|
382
|
+
TEST_TYPED(5, Nulls)
|
|
383
|
+
TEST_TYPED(6, Paragraphs)
|
|
384
|
+
|
|
385
|
+
#undef TEST_TYPED
|
|
386
|
+
|
|
387
|
+
TEST_F(RapidJson, SIMD_SUFFIX(PrettyWriter_StringBuffer)) {
|
|
388
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
389
|
+
StringBuffer s(0, 2048 * 1024);
|
|
390
|
+
PrettyWriter<StringBuffer> writer(s);
|
|
391
|
+
writer.SetIndent(' ', 1);
|
|
392
|
+
doc_.Accept(writer);
|
|
393
|
+
const char* str = s.GetString();
|
|
394
|
+
(void)str;
|
|
395
|
+
//if (i == 0)
|
|
396
|
+
// std::cout << strlen(str) << std::endl;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
TEST_F(RapidJson, internal_Pow10) {
|
|
401
|
+
double sum = 0;
|
|
402
|
+
for (size_t i = 0; i < kTrialCount * kTrialCount; i++)
|
|
403
|
+
sum += internal::Pow10(int(i & 255));
|
|
404
|
+
EXPECT_GT(sum, 0.0);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
TEST_F(RapidJson, SkipWhitespace_Basic) {
|
|
408
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
409
|
+
rapidjson::StringStream s(whitespace_);
|
|
410
|
+
while (s.Peek() == ' ' || s.Peek() == '\n' || s.Peek() == '\r' || s.Peek() == '\t')
|
|
411
|
+
s.Take();
|
|
412
|
+
ASSERT_EQ('[', s.Peek());
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
TEST_F(RapidJson, SIMD_SUFFIX(SkipWhitespace)) {
|
|
417
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
418
|
+
rapidjson::StringStream s(whitespace_);
|
|
419
|
+
rapidjson::SkipWhitespace(s);
|
|
420
|
+
ASSERT_EQ('[', s.Peek());
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
TEST_F(RapidJson, SkipWhitespace_strspn) {
|
|
425
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
426
|
+
const char* s = whitespace_ + std::strspn(whitespace_, " \t\r\n");
|
|
427
|
+
ASSERT_EQ('[', *s);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
TEST_F(RapidJson, UTF8_Validate) {
|
|
432
|
+
NullStream os;
|
|
433
|
+
|
|
434
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
435
|
+
StringStream is(json_);
|
|
436
|
+
bool result = true;
|
|
437
|
+
while (is.Peek() != '\0')
|
|
438
|
+
result &= UTF8<>::Validate(is, os);
|
|
439
|
+
EXPECT_TRUE(result);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
TEST_F(RapidJson, FileReadStream) {
|
|
444
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
445
|
+
FILE *fp = fopen(filename_, "rb");
|
|
446
|
+
char buffer[65536];
|
|
447
|
+
FileReadStream s(fp, buffer, sizeof(buffer));
|
|
448
|
+
while (s.Take() != '\0')
|
|
449
|
+
;
|
|
450
|
+
fclose(fp);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_FileReadStream)) {
|
|
455
|
+
for (size_t i = 0; i < kTrialCount; i++) {
|
|
456
|
+
FILE *fp = fopen(filename_, "rb");
|
|
457
|
+
char buffer[65536];
|
|
458
|
+
FileReadStream s(fp, buffer, sizeof(buffer));
|
|
459
|
+
BaseReaderHandler<> h;
|
|
460
|
+
Reader reader;
|
|
461
|
+
reader.Parse(s, h);
|
|
462
|
+
fclose(fp);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
TEST_F(RapidJson, StringBuffer) {
|
|
467
|
+
StringBuffer sb;
|
|
468
|
+
for (int i = 0; i < 32 * 1024 * 1024; i++)
|
|
469
|
+
sb.Put(i & 0x7f);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
#endif // TEST_RAPIDJSON
|