text: import fs from 'fs';
  import test from 'tape';
  import path from 'path';
  import load from 'load-json-file';
  import write from 'write-json-file';
  import truncate from '@turf/truncate';
  import { polygon, multiPolygon } from '@turf/helpers';
  import simplify from '.';
  
  const directories = {
      in: path.join(__dirname, 'test', 'in') + path.sep,
      out: path.join(__dirname, 'test', 'out') + path.sep
  };
  
  let fixtures = fs.readdirSync(directories.in).map(filename => {
      return {
          filename,
          name: path.parse(filename).name,
          geojson: load.sync(directories.in + filename)
      };
  });
  // fixtures = fixtures.filter(({name}) => name.includes('#555'));
  
  test('simplify', t => {
      for (const {filename, name, geojson} of fixtures) {
          let {tolerance, highQuality} = geojson.properties || {};
          tolerance = tolerance || 0.01;
          highQuality = highQuality || false;
  
          const simplified = truncate(simplify(geojson, {
              tolerance: tolerance,
              highQuality: highQuality
          }));
  
          if (process.env.REGEN) write.sync(directories.out + filename, simplified);
          t.deepEqual(simplified, load.sync(directories.out + filename), name);
      }
  
      t.end();
  });
  
  
  test('simplify -- throw', t => {
      const poly = polygon([[[0, 0], [2, 2], [2, 0], [0, 0]]]);
      t.throws(() => simplify(null), /geojson is required/, 'missing geojson');
      t.throws(() => simplify(poly, {tolerance: -1}), /invalid tolerance/, 'negative tolerance');
      t.end();
  });
  
  
  test('simplify -- removes ID & BBox from properties', t => {
      const properties = {foo: 'bar'};
      const id = 12345;
      const bbox = [0, 0, 2, 2];
      const poly = polygon([[[0, 0], [2, 2], [2, 0], [0, 0]]], properties, bbox, id);
      const simple = simplify(poly, {tolerance: 0.1});
  
      t.equal(simple.id, id);
      t.deepEqual(simple.bbox, bbox);
      t.deepEqual(simple.properties, properties);
      t.end();
  });
  
  
  test('simplify -- issue #555', t => {
      // polygons from issue #555
      const poly1 = polygon([[[-75.693254, 45.431144], [-75.693335, 45.431109], [-75.693335, 45.431109], [-75.693254, 45.431144]]]);
      const poly2 = polygon([[[-75.627178, 45.438106], [-75.627179, 45.438106], [-75.62718, 45.438106], [-75.627178, 45.438106]]]);
      const poly3 = polygon([[[-75.684722, 45.410083], [-75.684641, 45.409989], [-75.684641, 45.409989], [-75.684722, 45.410083], [-75.684722, 45.410083]]]);
      const poly4 = polygon([[[-75.885634, 45.272762], [-75.885482, 45.272641], [-75.885554, 45.272596], [-75.885534, 45.272581], [-75.885581, 45.272551], [-75.885703, 45.272647], [-75.885706, 45.272645], [-75.885709, 45.272647], [-75.885767, 45.272693], [-75.885759, 45.272698], [-75.885716, 45.272728], [-75.885716, 45.272728], [-75.885712, 45.272731], [-75.885712, 45.272731], [-75.885708, 45.272734], [-75.885684, 45.272749], [-75.885671, 45.272739], [-75.885634, 45.272762]], [[-75.885708, 45.27273], [-75.885708, 45.272729], [-75.885708, 45.272729], [-75.885708, 45.27273]]]);
      const options = {tolerance: 0.000001, highQuality: true};
  
      t.throws(() => simplify(poly1, options), /invalid polygon/);
      t.throws(() => simplify(poly2, options), /invalid polygon/);
      t.throws(() => simplify(poly3, options), /invalid polygon/);
      t.throws(() => simplify(poly4, options), /invalid polygon/);
      t.end();
  });
  
  test('simplify -- issue #918', t => {
      // simplify hangs on this input #918
      t.throws(() => simplify(multiPolygon([[[[0, 90], [0, 90], [0, 90], [0, 90], [0, 90], [0, 90], [0, 90], [0, 90], [0, 90], [0, 90], [0, 90]]]])), /invalid polygon/, 'invalid polygon');
      t.throws(() => simplify(multiPolygon([[[[0, 1], [0, 2], [0, 3], [0, 2.5], [0, 1]]]])), /invalid polygon/, 'invalid polygon');
      t.throws(() => simplify(multiPolygon([[[[0, 1], [0, 1], [1, 2], [0, 1]]]])), /invalid polygon/, 'invalid polygon');
      t.end();
  });
  