Skip to content

Commit fc6133b

Browse files
authored
Fixes issue 388 (simdjson#394)
1 parent 2bd65fa commit fc6133b

3 files changed

Lines changed: 39 additions & 4 deletions

File tree

amalgamation.sh

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ cat <<< '
136136
#include "simdjson.h"
137137
#include "simdjson.cpp"
138138
int main(int argc, char *argv[]) {
139-
if(argc < 3) {
140-
std::cerr << "Please specify filenames " << std::endl;
139+
if(argc < 2) {
140+
std::cerr << "Please specify at least one file name. " << std::endl;
141141
}
142142
const char * filename = argv[1];
143143
simdjson::padded_string p = simdjson::get_corpus(filename);
@@ -147,6 +147,9 @@ int main(int argc, char *argv[]) {
147147
} else {
148148
std::cout << "build_parsed_json valid" << std::endl;
149149
}
150+
if(argc == 2) {
151+
return EXIT_SUCCESS;
152+
}
150153
151154
//JsonStream
152155
const char * filename2 = argv[2];
@@ -157,7 +160,7 @@ int main(int argc, char *argv[]) {
157160
158161
while (parse_res == simdjson::SUCCESS_AND_HAS_MORE) {
159162
parse_res = js.json_parse(pj2);
160-
}
163+
}
161164
162165
if( ! pj2.is_valid()) {
163166
std::cout << "JsonStream not valid" << std::endl;

src/parsedjson.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ bool ParsedJson::print_json(std::ostream &os) const {
198198
memcpy(&string_length, string_buf + payload, sizeof(uint32_t));
199199
print_with_escapes(
200200
(const unsigned char *)(string_buf + payload + sizeof(uint32_t)),
201-
string_length);
201+
os, string_length);
202202
os << '"';
203203
break;
204204
case 'l': // we have a long int

tests/basictests.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,36 @@ bool bad_example() {
168168
}
169169
return true;
170170
}
171+
// returns true if successful
172+
bool stable_test() {
173+
std::string json = "{"
174+
"\"Image\":{"
175+
"\"Width\":800,"
176+
"\"Height\":600,"
177+
"\"Title\":\"View from 15th Floor\","
178+
"\"Thumbnail\":{"
179+
"\"Url\":\"http://www.example.com/image/481989943\","
180+
"\"Height\":125,"
181+
"\"Width\":100"
182+
"},"
183+
"\"Animated\":false,"
184+
"\"IDs\":[116,943.3,234,38793]"
185+
"}"
186+
"}";
187+
simdjson::ParsedJson pj = simdjson::build_parsed_json(json);
188+
std::ostringstream myStream;
189+
if( ! pj.print_json(myStream) ) {
190+
std::cout << "cannot print it out? " << std::endl;
191+
return false;
192+
}
193+
std::string newjson = myStream.str();
194+
if(json != newjson) {
195+
std::cout << "serialized json differs!" << std::endl;
196+
std::cout << json << std::endl;
197+
std::cout << newjson << std::endl;
198+
}
199+
return newjson == json;
200+
}
171201

172202
// returns true if successful
173203
bool navigate_test() {
@@ -295,6 +325,8 @@ bool skyprophet_test() {
295325

296326
int main() {
297327
std::cout << "Running basic tests." << std::endl;
328+
if(!stable_test())
329+
return EXIT_FAILURE;
298330
if(!bad_example())
299331
return EXIT_FAILURE;
300332
if(!number_test_powers_of_two())

0 commit comments

Comments
 (0)