update benchmarks
diff --git a/README.md b/README.md
index dca650a..67b6a49 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,6 @@
 ## Features
 
 * Probably the fastest C++ open source 2D Delaunay implementation
-* Roughly 6 times faster then JS version `delaunator@v2.0.3` ([needs confirmation](https://github.com/delfrrr/delaunator-cpp/pull/8))
 * Example showing triangulation of GeoJson points
 
 ## Usage
@@ -44,3 +43,21 @@
 ```
 
 [See more examples here](./examples)
+
+## Benchmarks
+
+```
+Run on (4 X 2300 MHz CPU s)
+2018-09-19 09:40:29
+------------------------------------------------------------
+Benchmark                     Time           CPU Iterations
+------------------------------------------------------------
+BM_45K_geojson_nodes         23 ms         23 ms         32
+BM_2K_uniform                 1 ms          1 ms        970
+BM_100K_uniform              63 ms         63 ms         10
+BM_200K_uniform             142 ms        141 ms          4
+BM_500K_uniform             415 ms        412 ms          2
+BM_1M_uniform              1016 ms       1010 ms          1
+```
+
+Library is ~10% faster then JS version for 1M uniform points ([details](https://github.com/delfrrr/delaunator-cpp/pull/8#issuecomment-422690056))
diff --git a/bench/run.cpp b/bench/run.cpp
index ccd5ad4..adc911b 100644
--- a/bench/run.cpp
+++ b/bench/run.cpp
@@ -5,19 +5,19 @@
 #include <string>
 #include <vector>
 
+namespace {
 std::vector<double> generate_uniform(size_t n) {
     std::vector<double> coords;
     std::srand(350);
-
+    double norm = static_cast<double>(RAND_MAX) / 1e3;
     for (size_t i = 0; i < n; i++) {
-        coords.push_back(double(std::rand()) / RAND_MAX);
-        coords.push_back(double(std::rand()) / RAND_MAX);
+        coords.push_back(static_cast<double>(std::rand()) / norm);
+        coords.push_back(static_cast<double>(std::rand()) / norm);
     }
 
     return coords;
 }
 
-namespace {
 void BM_45K_geojson_nodes(benchmark::State& state) {
     std::string points_str = utils::read_file("./test/test-files/osm-nodes-45331-epsg-3857.geojson");
     std::vector<double> coords = utils::get_geo_json_points(points_str);
@@ -27,6 +27,13 @@
     }
 }
 
+void BM_2K_uniform(benchmark::State& state) {
+    std::vector<double> coords = generate_uniform(2000);
+    while (state.KeepRunning()) {
+        delaunator::Delaunator delaunator(coords);
+    }
+}
+
 void BM_100K_uniform(benchmark::State& state) {
     std::vector<double> coords = generate_uniform(100000);
     while (state.KeepRunning()) {
@@ -34,6 +41,20 @@
     }
 }
 
+void BM_200K_uniform(benchmark::State& state) {
+    std::vector<double> coords = generate_uniform(200000);
+    while (state.KeepRunning()) {
+        delaunator::Delaunator delaunator(coords);
+    }
+}
+
+void BM_500K_uniform(benchmark::State& state) {
+    std::vector<double> coords = generate_uniform(500000);
+    while (state.KeepRunning()) {
+        delaunator::Delaunator delaunator(coords);
+    }
+}
+
 void BM_1M_uniform(benchmark::State& state) {
     std::vector<double> coords = generate_uniform(1000000);
     while (state.KeepRunning()) {
@@ -43,7 +64,10 @@
 } // namespace
 
 BENCHMARK(BM_45K_geojson_nodes)->Unit(benchmark::kMillisecond);
+BENCHMARK(BM_2K_uniform)->Unit(benchmark::kMillisecond);
 BENCHMARK(BM_100K_uniform)->Unit(benchmark::kMillisecond);
+BENCHMARK(BM_200K_uniform)->Unit(benchmark::kMillisecond);
+BENCHMARK(BM_500K_uniform)->Unit(benchmark::kMillisecond);
 BENCHMARK(BM_1M_uniform)->Unit(benchmark::kMillisecond);
 
 BENCHMARK_MAIN()