JsonParserByLeo/Test/Ben/ToyJson3.mq5
Nique_372 Nique_372 d637ffabf8
2026-08-28 12:02:03 -05:00
176 lines
5.8 KiB
MQL5
//+------------------------------------------------------------------+
//| ToyJson3.mq5 |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com/"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define JSONBENCH_RUN_PARSE
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "..\\Other\\toyjson3.mqh"
#include "Def.mqh"
#define LIBNAME "ToyJson3"
// Intente probarlo pero creo que es complejo dado que como usa punteros hacer 1000 iteraciones
// Conllavea un monton de news y ademas necesitora elimianr todoss los objetos que crea en cada
// iteracion lo cual no creo qeu sea justo
// asi qeu probare noma "tokenize" qeu es una funcion previa a parse value..
// por lo visto demora mucho.. asi qeu con eso creo qeu ya con seguridad
// no creo que valha el esfuerzo estar reformando el parser para que no retorne punteros o aalgo asi..
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
#ifdef JSONBENCH_RUN_PARSE
JsParser parser;
parser.copy = g_json_data;
ulong a = GetMicrosecondCount();
for(int i = 0; i < 1000; i++)
{
parser.tokenize();
}
ulong b = GetMicrosecondCount();
Print("@", b - a);
#else // JSONBENCH_RUN_PARSE
//--- Parseo unico (como con JAson, punteros no son problema para medir acceso)
JsParser parser;
parser.copy = g_json_test_access;
JsValue *root = parser.parse(g_json_test_access);
if(parser.error || root == NULL)
{
if(root != NULL)
delete root;
Print("Error parseando test.json con ToyJson3");
return;
}
JsValue *wide = root["wide_object"];
string keys[];
wide.getProperties(keys);
const int n = ArraySize(keys);
//-- Random
Xoshiro256 xo;
xo.Seed(JSONBENCH_ACCESO_XHOR_SEED);
// init
double sump = 0.0, profit = 0.0;
long tin = 0;
//--
ulong a = GetMicrosecondCount();
for(int i = 0; i < JSONBENCH_TOTAL_ITER_ACCESO; i++)
{
const string key = keys[xo.RandomInteger(0, n)];
root["wide_object"][key];
}
ulong b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_WIDE)
a = GetMicrosecondCount();
for(int i = 0; i < JSONBENCH_TOTAL_ITER_ACCESO; i++)
{
string dummy = root["deep_object"]["l1"]["l2"]["l3"]["l4"]["l5"]["l6"]["l7"]["l8"]["l9"]["l10"]["target"].s;
}
b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_DEEP)
a = GetMicrosecondCount();
for(int i = 0; i < JSONBENCH_TOTAL_ITER_ACCESO; i++)
{
const int index = xo.RandomInteger(0, 10000);
tin += (long)root["large_array"][index].get<long>();
}
b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_LARGE_ARR)
a = GetMicrosecondCount();
for(int k = 0; k < 500; k++)
{
sump += root["array_of_objects"][k]["price"].get<double>();
profit += root["array_of_objects"][k]["profit"].get<double>();
tin += root["array_of_objects"][k]["tags"].size();
}
b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_MIX)
//----
PrintFormat("sump=%.2f profit=%.2f tin=%d ", sump, profit, tin);
//--- liberar el arbol creado por parse() (usa new internamente)
delete root;
//---
JSONBENCH_FINISH
#endif // JSONBENCH_RUN_PARSE
}
//+------------------------------------------------------------------+
/*
2026.08.28 12:01:02.893 ToyJson3 (EURUSD,H1) @4486362
2026.08.28 12:01:10.131 ToyJson3 (EURUSD,H1) @4418494
2026.08.28 12:01:16.573 ToyJson3 (EURUSD,H1) @4422841
2026.08.28 12:01:25.067 ToyJson3 (EURUSD,H1) @4470388
2026.08.28 11:41:17.417 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 333
2026.08.28 11:41:17.528 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 179
2026.08.28 11:41:17.638 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 394
2026.08.28 11:41:17.749 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 766
2026.08.28 11:41:17.749 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
2026.08.28 11:41:21.678 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 328
2026.08.28 11:41:21.791 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 382
2026.08.28 11:41:21.903 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 382
2026.08.28 11:41:22.015 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 781
2026.08.28 11:41:22.015 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
2026.08.28 11:41:26.861 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 329
2026.08.28 11:41:26.969 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 116
2026.08.28 11:41:27.080 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 380
2026.08.28 11:41:27.190 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 776
2026.08.28 11:41:27.190 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
2026.08.28 11:41:30.869 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 330
2026.08.28 11:41:30.978 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 192
2026.08.28 11:41:31.090 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 382
2026.08.28 11:41:31.200 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 822
2026.08.28 11:41:31.200 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
*/