[turf]: choose fuzzed API randomly (#10836)

This commit is contained in:
434b 2023-08-14 21:22:13 +02:00 committed by GitHub
parent ffa56fc970
commit d78275b4e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 118 additions and 116 deletions

View File

@ -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"];