diff --git a/projects/turf/fuzz.js b/projects/turf/fuzz.js index 639e32df5..0403dd280 100644 --- a/projects/turf/fuzz.js +++ b/projects/turf/fuzz.js @@ -19,126 +19,129 @@ const turf = require("@turf/turf"); module.exports.fuzz = function(data) { const provider = new FuzzedDataProvider(data); + const randomSwitch = provider.consumeIntegralInRange(0, 4); try { - // Consume inputs for turf.buffer - const point = turf.point([ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ]); - const radius = provider.consumeNumber(); - const options = { - steps: provider.consumeIntegralInRange(1, 1000), - units: provider.consumeString(10), - }; + switch (randomSwitch) { + case 0: + const point = turf.point([ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ]); + const radius = provider.consumeNumber(); + const options = { + steps: provider.consumeIntegralInRange(1, 1000), + units: provider.consumeString(10), + }; - turf.buffer(point, radius, options); + turf.buffer(point, radius, options); + break; + case 1: + const line1 = turf.lineString([ + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + ]); + const line2 = turf.lineString([ + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + ]); - // Consume inputs for turf.lineIntersect - const line1 = turf.lineString([ - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - ]); - const line2 = turf.lineString([ - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - ]); + turf.lineIntersect(line1, line2); + break; + case 2: + const origin = turf.point([ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ]); + const distance = provider.consumeNumberInRange(0, 100); + const bearing = provider.consumeNumberInRange(0, 360); - turf.lineIntersect(line1, line2); + turf.destination(origin, distance, bearing); + break; + case 3: + const polygon1 = turf.polygon([ + [ + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + ], + ]); + const polygon2 = turf.polygon([ + [ + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + [ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ], + ], + ]); - // Consume inputs for turf.destination - const origin = turf.point([ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ]); - const distance = provider.consumeNumberInRange(0, 100); - const bearing = provider.consumeNumberInRange(0, 360); + turf.booleanContains(polygon1, polygon2); + break; + case 4: + const point1 = turf.point([ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ]); + const point2 = turf.point([ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ]); + const point3 = turf.point([ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ]); + const point4 = turf.point([ + provider.consumeNumberInRange(-180, 180), + provider.consumeNumberInRange(-90, 90), + ]); - turf.destination(origin, distance, bearing); - - // Consume inputs for turf.booleanContains - const polygon1 = turf.polygon([ - [ - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - ], - ]); - const polygon2 = turf.polygon([ - [ - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - [ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ], - ], - ]); - - turf.booleanContains(polygon1, polygon2); - - // Consume inputs for turf.bbox - const point1 = turf.point([ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ]); - const point2 = turf.point([ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ]); - const point3 = turf.point([ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ]); - const point4 = turf.point([ - provider.consumeNumberInRange(-180, 180), - provider.consumeNumberInRange(-90, 90), - ]); - - // Call turf.bbox with fuzzed inputs - turf.bbox(turf.featureCollection([point1, point2, point3, point4])); + turf.bbox(turf.featureCollection([point1, point2, point3, point4])); + break; + } } catch (error) { // Ignore errors if (!ignoredError(error)) throw error; @@ -149,5 +152,4 @@ function ignoredError(error) { return !!ignored.find((message) => error.message.indexOf(message) !== -1); } -const ignored = ["units is invalid"]; - +const ignored = ["units is invalid", "First and last"];