Skip to content

Commit e2fcdfb

Browse files
authored
Add OMC-like pathological compilation micro-benchmark test (#532)
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent f24a250 commit e2fcdfb

1 file changed

Lines changed: 121 additions & 0 deletions

File tree

benchmark/micro/draft4.cc

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,126 @@ static void Micro_Draft4_Type_Object(benchmark::State &state) {
994994
}
995995
}
996996

997+
// Pathological Case: OMC-like Pattern
998+
static void Micro_Draft4_Ref_Single_100(benchmark::State &state) {
999+
const sourcemeta::core::JSON schema{sourcemeta::core::parse_json(R"JSON({
1000+
"$schema": "http://json-schema.org/draft-04/schema#",
1001+
"definitions": {
1002+
"common": { "type": "string", "minLength": 1 }
1003+
},
1004+
"properties": {
1005+
"prop0": { "$ref": "#/definitions/common" },
1006+
"prop1": { "$ref": "#/definitions/common" },
1007+
"prop2": { "$ref": "#/definitions/common" },
1008+
"prop3": { "$ref": "#/definitions/common" },
1009+
"prop4": { "$ref": "#/definitions/common" },
1010+
"prop5": { "$ref": "#/definitions/common" },
1011+
"prop6": { "$ref": "#/definitions/common" },
1012+
"prop7": { "$ref": "#/definitions/common" },
1013+
"prop8": { "$ref": "#/definitions/common" },
1014+
"prop9": { "$ref": "#/definitions/common" },
1015+
"prop10": { "$ref": "#/definitions/common" },
1016+
"prop11": { "$ref": "#/definitions/common" },
1017+
"prop12": { "$ref": "#/definitions/common" },
1018+
"prop13": { "$ref": "#/definitions/common" },
1019+
"prop14": { "$ref": "#/definitions/common" },
1020+
"prop15": { "$ref": "#/definitions/common" },
1021+
"prop16": { "$ref": "#/definitions/common" },
1022+
"prop17": { "$ref": "#/definitions/common" },
1023+
"prop18": { "$ref": "#/definitions/common" },
1024+
"prop19": { "$ref": "#/definitions/common" },
1025+
"prop20": { "$ref": "#/definitions/common" },
1026+
"prop21": { "$ref": "#/definitions/common" },
1027+
"prop22": { "$ref": "#/definitions/common" },
1028+
"prop23": { "$ref": "#/definitions/common" },
1029+
"prop24": { "$ref": "#/definitions/common" },
1030+
"prop25": { "$ref": "#/definitions/common" },
1031+
"prop26": { "$ref": "#/definitions/common" },
1032+
"prop27": { "$ref": "#/definitions/common" },
1033+
"prop28": { "$ref": "#/definitions/common" },
1034+
"prop29": { "$ref": "#/definitions/common" },
1035+
"prop30": { "$ref": "#/definitions/common" },
1036+
"prop31": { "$ref": "#/definitions/common" },
1037+
"prop32": { "$ref": "#/definitions/common" },
1038+
"prop33": { "$ref": "#/definitions/common" },
1039+
"prop34": { "$ref": "#/definitions/common" },
1040+
"prop35": { "$ref": "#/definitions/common" },
1041+
"prop36": { "$ref": "#/definitions/common" },
1042+
"prop37": { "$ref": "#/definitions/common" },
1043+
"prop38": { "$ref": "#/definitions/common" },
1044+
"prop39": { "$ref": "#/definitions/common" },
1045+
"prop40": { "$ref": "#/definitions/common" },
1046+
"prop41": { "$ref": "#/definitions/common" },
1047+
"prop42": { "$ref": "#/definitions/common" },
1048+
"prop43": { "$ref": "#/definitions/common" },
1049+
"prop44": { "$ref": "#/definitions/common" },
1050+
"prop45": { "$ref": "#/definitions/common" },
1051+
"prop46": { "$ref": "#/definitions/common" },
1052+
"prop47": { "$ref": "#/definitions/common" },
1053+
"prop48": { "$ref": "#/definitions/common" },
1054+
"prop49": { "$ref": "#/definitions/common" },
1055+
"prop50": { "$ref": "#/definitions/common" },
1056+
"prop51": { "$ref": "#/definitions/common" },
1057+
"prop52": { "$ref": "#/definitions/common" },
1058+
"prop53": { "$ref": "#/definitions/common" },
1059+
"prop54": { "$ref": "#/definitions/common" },
1060+
"prop55": { "$ref": "#/definitions/common" },
1061+
"prop56": { "$ref": "#/definitions/common" },
1062+
"prop57": { "$ref": "#/definitions/common" },
1063+
"prop58": { "$ref": "#/definitions/common" },
1064+
"prop59": { "$ref": "#/definitions/common" },
1065+
"prop60": { "$ref": "#/definitions/common" },
1066+
"prop61": { "$ref": "#/definitions/common" },
1067+
"prop62": { "$ref": "#/definitions/common" },
1068+
"prop63": { "$ref": "#/definitions/common" },
1069+
"prop64": { "$ref": "#/definitions/common" },
1070+
"prop65": { "$ref": "#/definitions/common" },
1071+
"prop66": { "$ref": "#/definitions/common" },
1072+
"prop67": { "$ref": "#/definitions/common" },
1073+
"prop68": { "$ref": "#/definitions/common" },
1074+
"prop69": { "$ref": "#/definitions/common" },
1075+
"prop70": { "$ref": "#/definitions/common" },
1076+
"prop71": { "$ref": "#/definitions/common" },
1077+
"prop72": { "$ref": "#/definitions/common" },
1078+
"prop73": { "$ref": "#/definitions/common" },
1079+
"prop74": { "$ref": "#/definitions/common" },
1080+
"prop75": { "$ref": "#/definitions/common" },
1081+
"prop76": { "$ref": "#/definitions/common" },
1082+
"prop77": { "$ref": "#/definitions/common" },
1083+
"prop78": { "$ref": "#/definitions/common" },
1084+
"prop79": { "$ref": "#/definitions/common" },
1085+
"prop80": { "$ref": "#/definitions/common" },
1086+
"prop81": { "$ref": "#/definitions/common" },
1087+
"prop82": { "$ref": "#/definitions/common" },
1088+
"prop83": { "$ref": "#/definitions/common" },
1089+
"prop84": { "$ref": "#/definitions/common" },
1090+
"prop85": { "$ref": "#/definitions/common" },
1091+
"prop86": { "$ref": "#/definitions/common" },
1092+
"prop87": { "$ref": "#/definitions/common" },
1093+
"prop88": { "$ref": "#/definitions/common" },
1094+
"prop89": { "$ref": "#/definitions/common" },
1095+
"prop90": { "$ref": "#/definitions/common" },
1096+
"prop91": { "$ref": "#/definitions/common" },
1097+
"prop92": { "$ref": "#/definitions/common" },
1098+
"prop93": { "$ref": "#/definitions/common" },
1099+
"prop94": { "$ref": "#/definitions/common" },
1100+
"prop95": { "$ref": "#/definitions/common" },
1101+
"prop96": { "$ref": "#/definitions/common" },
1102+
"prop97": { "$ref": "#/definitions/common" },
1103+
"prop98": { "$ref": "#/definitions/common" },
1104+
"prop99": { "$ref": "#/definitions/common" }
1105+
}
1106+
})JSON")};
1107+
1108+
for (auto _ : state) {
1109+
auto result{sourcemeta::blaze::compile(
1110+
schema, sourcemeta::core::schema_official_walker,
1111+
sourcemeta::core::schema_official_resolver,
1112+
sourcemeta::blaze::default_schema_compiler)};
1113+
benchmark::DoNotOptimize(result.instructions);
1114+
}
1115+
}
1116+
9971117
BENCHMARK(Micro_Draft4_Meta_1_No_Callback);
9981118
BENCHMARK(Micro_Draft4_Required_Properties);
9991119
BENCHMARK(Micro_Draft4_Many_Optional_Properties_Minimal_Match);
@@ -1013,3 +1133,4 @@ BENCHMARK(Micro_Draft4_Short_Enum);
10131133
BENCHMARK(Micro_Draft4_Long_Enum);
10141134
BENCHMARK(Micro_Draft4_Long_Enum_Short_Strings);
10151135
BENCHMARK(Micro_Draft4_Type_Object);
1136+
BENCHMARK(Micro_Draft4_Ref_Single_100);

0 commit comments

Comments
 (0)