{"ScriptPreparationCode":"var xpath = \u0027/config/interface/gpon/onu[name = //multicast/profile/gpon[id = \u00225\u0022]/onu[name = \u0022onuName\u0022]/brigde[id = //multicast/profile/gpon[id = \u00225\u0022]/onu[name = \u0022onuName\u0022]/../../brigde]/onu]/gem/gem-id/status/interface/gpon/onu[name = //multicast/profile/gpon[id = \u00225\u0022]/onu[name = \u0022onuName\u0022]/gem[id = //multicast/profile/gpon[id = \u00225\u0022]/onu[name = \u0022onuName\u0022]/../../gem]/onu]/router/gem-id\u0027\r\n\r\nvar getPredicatesIndexRange = function(xpath) {\r\n return [[{\u0022start\u0022:58,\u0022end\u0022:68},{\u0022start\u0022:72,\u0022end\u0022:90},{\u0022start\u0022:127,\u0022end\u0022:137},{\u0022start\u0022:141,\u0022end\u0022:159},{\u0022start\u0022:97,\u0022end\u0022:173},{\u0022start\u0022:26,\u0022end\u0022:178}],[{\u0022start\u0022:247,\u0022end\u0022:257},{\u0022start\u0022:261,\u0022end\u0022:279},{\u0022start\u0022:313,\u0022end\u0022:323},{\u0022start\u0022:327,\u0022end\u0022:345},{\u0022start\u0022:283,\u0022end\u0022:356},{\u0022start\u0022:215,\u0022end\u0022:361}]];\r\n}\r\n\r\nvar getPredicatesInfoOld = function(xpath) {\r\n var predicates = [];\r\n var predicatesIndexRange = getPredicatesIndexRange(xpath);\r\n var index = 0;\r\n\r\n if (predicatesIndexRange !== 0) {\r\n _.each(predicatesIndexRange, function(predicateIndexes) {\r\n var predicateInfo = [];\r\n _.each(predicateIndexes, function(range) {\r\n var predicate = xpath.substring(range.start, range.end);\r\n var processedPredicate = predicate;\r\n\r\n _.each(predicateInfo, function(previousPredicate) {\r\n processedPredicate = processedPredicate.replace(previousPredicate.predicate, previousPredicate.key);\r\n });\r\n\r\n predicateInfo.push({\r\n key: \u0022[predicate\u0022 \u002B index \u002B \u0022]\u0022,\r\n predicate: predicate,\r\n processedPredicate: processedPredicate\r\n });\r\n index\u002B\u002B;\r\n });\r\n\r\n predicates.push(predicateInfo);\r\n });\r\n }\r\n\r\n return predicates;\r\n};\r\n\r\nvar getPredicatesInfo = function(xpath) {\r\n var predicatesIndexRange = getPredicatesIndexRange(xpath);\r\n \r\n return _.map(predicatesIndexRange, function(predicateIndexes) {\r\n var predicatesInfo = _.reduce(predicateIndexes, function(predicates, range, index) {\r\n var predicate = xpath.substring(range.start, range.end);\r\n var processedPredicate = predicate;\r\n\r\n _.each(predicates, function(previousPredicate) {\r\n processedPredicate = processedPredicate.replace(previousPredicate.predicate, previousPredicate.key);\r\n });\r\n\r\n predicates.push({\r\n key: \u0022[predicate\u0022 \u002B index \u002B \u0022]\u0022,\r\n predicate: predicate,\r\n processedPredicate: processedPredicate\r\n });\r\n\r\n return predicates;\r\n\r\n }, []);\r\n\r\n return predicatesInfo;\r\n });\r\n};\r\n","TestCases":[{"Name":"reduce","Code":"getPredicatesInfo(xpath)","IsDeferred":false},{"Name":"old","Code":"getPredicatesInfoOld(xpath)","IsDeferred":false}]}