@@ -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+
9971117BENCHMARK (Micro_Draft4_Meta_1_No_Callback);
9981118BENCHMARK (Micro_Draft4_Required_Properties);
9991119BENCHMARK (Micro_Draft4_Many_Optional_Properties_Minimal_Match);
@@ -1013,3 +1133,4 @@ BENCHMARK(Micro_Draft4_Short_Enum);
10131133BENCHMARK (Micro_Draft4_Long_Enum);
10141134BENCHMARK (Micro_Draft4_Long_Enum_Short_Strings);
10151135BENCHMARK (Micro_Draft4_Type_Object);
1136+ BENCHMARK (Micro_Draft4_Ref_Single_100);
0 commit comments