summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/rapidjson/test/perftest/rapidjsontest.cpp')
-rw-r--r--3rdparty/rapidjson/test/perftest/rapidjsontest.cpp129
1 files changed, 126 insertions, 3 deletions
diff --git a/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp b/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp
index 675db3182a5..ce41c109ab4 100644
--- a/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp
+++ b/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp
@@ -1,6 +1,6 @@
// Tencent is pleased to support the open source community by making RapidJSON available.
//
-// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
+// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
//
// Licensed under the MIT License (the "License"); you may not use this file except
// in compliance with the License. You may obtain a copy of the License at
@@ -21,13 +21,19 @@
#include "rapidjson/prettywriter.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/filereadstream.h"
+#include "rapidjson/istreamwrapper.h"
#include "rapidjson/encodedstream.h"
#include "rapidjson/memorystream.h"
+#include <fstream>
+#include <vector>
+
#ifdef RAPIDJSON_SSE2
#define SIMD_SUFFIX(name) name##_SSE2
#elif defined(RAPIDJSON_SSE42)
#define SIMD_SUFFIX(name) name##_SSE42
+#elif defined(RAPIDJSON_NEON)
+#define SIMD_SUFFIX(name) name##_NEON
#else
#define SIMD_SUFFIX(name) name
#endif
@@ -47,7 +53,7 @@ public:
// Parse as a document
EXPECT_FALSE(doc_.Parse(json_).HasParseError());
- for (size_t i = 0; i < 7; i++)
+ for (size_t i = 0; i < 8; i++)
EXPECT_FALSE(typesDoc_[i].Parse(types_[i]).HasParseError());
}
@@ -63,7 +69,7 @@ private:
protected:
char *temp_;
Document doc_;
- Document typesDoc_[7];
+ Document typesDoc_[8];
};
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseInsitu_DummyHandler)) {
@@ -152,6 +158,35 @@ TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseIterativeInsitu_DummyHandler)) {
}
}
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseIterativePull_DummyHandler)) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ StringStream s(json_);
+ BaseReaderHandler<> h;
+ Reader reader;
+ reader.IterativeParseInit();
+ while (!reader.IterativeParseComplete()) {
+ if (!reader.IterativeParseNext<kParseDefaultFlags>(s, h))
+ break;
+ }
+ EXPECT_FALSE(reader.HasParseError());
+ }
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseIterativePullInsitu_DummyHandler)) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ memcpy(temp_, json_, length_ + 1);
+ InsituStringStream s(temp_);
+ BaseReaderHandler<> h;
+ Reader reader;
+ reader.IterativeParseInit();
+ while (!reader.IterativeParseComplete()) {
+ if (!reader.IterativeParseNext<kParseDefaultFlags|kParseInsituFlag>(s, h))
+ break;
+ }
+ EXPECT_FALSE(reader.HasParseError());
+ }
+}
+
TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_ValidateEncoding)) {
for (size_t i = 0; i < kTrialCount; i++) {
StringStream s(json_);
@@ -301,6 +336,23 @@ TEST_F(RapidJson, DocumentAccept) {
}
}
+TEST_F(RapidJson, DocumentFind) {
+ typedef Document::ValueType ValueType;
+ typedef ValueType::ConstMemberIterator ConstMemberIterator;
+ const Document &doc = typesDoc_[7]; // alotofkeys.json
+ if (doc.IsObject()) {
+ std::vector<const ValueType*> keys;
+ for (ConstMemberIterator it = doc.MemberBegin(); it != doc.MemberEnd(); ++it) {
+ keys.push_back(&it->name);
+ }
+ for (size_t i = 0; i < kTrialCount; i++) {
+ for (size_t j = 0; j < keys.size(); j++) {
+ EXPECT_TRUE(doc.FindMember(*keys[j]) != doc.MemberEnd());
+ }
+ }
+ }
+}
+
struct NullStream {
typedef char Ch;
@@ -432,6 +484,77 @@ TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_FileReadStream)) {
}
}
+TEST_F(RapidJson, IStreamWrapper) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ std::ifstream is(filename_, std::ios::in | std::ios::binary);
+ char buffer[65536];
+ IStreamWrapper isw(is, buffer, sizeof(buffer));
+ while (isw.Take() != '\0')
+ ;
+ is.close();
+ }
+}
+
+TEST_F(RapidJson, IStreamWrapper_Unbuffered) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ std::ifstream is(filename_, std::ios::in | std::ios::binary);
+ IStreamWrapper isw(is);
+ while (isw.Take() != '\0')
+ ;
+ is.close();
+ }
+}
+
+TEST_F(RapidJson, IStreamWrapper_Setbuffered) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ std::ifstream is;
+ char buffer[65536];
+ is.rdbuf()->pubsetbuf(buffer, sizeof(buffer));
+ is.open(filename_, std::ios::in | std::ios::binary);
+ IStreamWrapper isw(is);
+ while (isw.Take() != '\0')
+ ;
+ is.close();
+ }
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_IStreamWrapper)) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ std::ifstream is(filename_, std::ios::in | std::ios::binary);
+ char buffer[65536];
+ IStreamWrapper isw(is, buffer, sizeof(buffer));
+ BaseReaderHandler<> h;
+ Reader reader;
+ reader.Parse(isw, h);
+ is.close();
+ }
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_IStreamWrapper_Unbuffered)) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ std::ifstream is(filename_, std::ios::in | std::ios::binary);
+ IStreamWrapper isw(is);
+ BaseReaderHandler<> h;
+ Reader reader;
+ reader.Parse(isw, h);
+ is.close();
+ }
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_IStreamWrapper_Setbuffered)) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ std::ifstream is;
+ char buffer[65536];
+ is.rdbuf()->pubsetbuf(buffer, sizeof(buffer));
+ is.open(filename_, std::ios::in | std::ios::binary);
+ IStreamWrapper isw(is);
+ BaseReaderHandler<> h;
+ Reader reader;
+ reader.Parse(isw, h);
+ is.close();
+ }
+}
+
TEST_F(RapidJson, StringBuffer) {
StringBuffer sb;
for (int i = 0; i < 32 * 1024 * 1024; i++)