108 lines
4.1 KiB
JavaScript
108 lines
4.1 KiB
JavaScript
var test = require('tape');
|
|
var points = require('../');
|
|
|
|
var ptsstr = 'm 340.0802,61.38651 c -40.2898,8.22791 -62.56591,65.81112'
|
|
+ ' -49.74004,128.6158 12.82587,62.80467 55.90207,107.07364'
|
|
+ ' 96.19186,98.84572 40.2898,-8.22791 62.55966,-65.84175'
|
|
+ ' 49.73379,-128.64642 C 423.43994,97.39694 380.36999,53.15859'
|
|
+ ' 340.0802,61.38651 z m 12.91104,8.55846 c 22.51488,-4.59795'
|
|
+ ' 48.14062,27.6983 57.21553,72.13556 9.0749,44.43726 -1.83609,84.19498'
|
|
+ ' -24.35097,88.79294 -22.51489,4.59795 -48.11001,-27.70455'
|
|
+ ' -57.18492,-72.14182 -9.0749,-44.43726 1.80548,-84.18872'
|
|
+ ' 24.32036,-88.78668 z'
|
|
+ ' M 363.38912,100.18734 l 7.78212,25.23786 l 15.68721,-12.87912 L 363.38912,100.18734 z'
|
|
+ ' v 25 h 75'
|
|
;
|
|
var expected = [
|
|
[340.0802001953125,61.38650894165039],
|
|
[321.815673828125,69.2024917602539],
|
|
[307.4776611328125,83.02471160888672],
|
|
[297.3731994628906,100.23271942138672],
|
|
[290.91046142578125,119.13249969482422],
|
|
[287.50921630859375,138.82366943359375],
|
|
[286.7622985839844,158.796630859375],
|
|
[288.4009704589844,178.71836853027344],
|
|
[292.24517822265625,198.3352813720703],
|
|
[298.23358154296875,217.4064178466797],
|
|
[306.42340087890625,235.6387939453125],
|
|
[316.9225769042969,252.64205932617188],
|
|
[329.898193359375,267.8299560546875],
|
|
[345.53973388671875,280.2279052734375],
|
|
[363.81201171875,288.1681823730469],
|
|
[383.6486511230469,289.34698486328125],
|
|
[402.33636474609375,282.61614990234375],
|
|
[417.3070983886719,269.49383544921875],
|
|
[427.9978332519531,252.6488800048828],
|
|
[434.951904296875,233.9263458251953],
|
|
[438.77215576171875,214.3130340576172],
|
|
[439.88922119140625,194.35777282714844],
|
|
[438.58905029296875,174.41134643554688],
|
|
[435.06219482421875,154.7349853515625],
|
|
[429.3924865722656,135.56646728515625],
|
|
[421.5318908691406,117.1893310546875],
|
|
[411.380126953125,99.9755630493164],
|
|
[398.7788391113281,84.4737777709961],
|
|
[383.5347900390625,71.5850830078125],
|
|
[365.6168518066406,62.85874557495117],
|
|
[345.8718566894531,60.56281280517578],
|
|
[366.848388671875,71.46869659423828],
|
|
[382.8503723144531,83.20372009277344],
|
|
[394.5501708984375,99.37262725830078],
|
|
[403.0749206542969,117.44243621826172],
|
|
[408.9747009277344,136.5377655029297],
|
|
[412.4517517089844,156.22030639648438],
|
|
[413.3585205078125,176.18382263183594],
|
|
[411.1668701171875,196.03689575195312],
|
|
[404.6397705078125,214.86961364746094],
|
|
[391.05059814453125,229.1015625],
|
|
[371.67529296875,229.21475219726562],
|
|
[355.7654113769531,217.34808349609375],
|
|
[344.1375732421875,201.12646484375],
|
|
[335.6697692871094,183.0297088623047],
|
|
[329.81781005859375,163.91954040527344],
|
|
[326.3842468261719,144.229248046875],
|
|
[325.5235900878906,124.26376342773438],
|
|
[327.773193359375,104.41747283935547],
|
|
[334.3932800292969,85.61891174316406],
|
|
[348.1394958496094,71.55331420898438],
|
|
[367.772705078125,114.40347290039062],
|
|
[377.7147216796875,120.05304718017578],
|
|
[379.63006591796875,108.73966217041016],
|
|
[363.3891296386719,100.18733978271484],
|
|
[363.3891296386719,121.84354470328532],
|
|
[380.0453247032853,125.18733978271484],
|
|
[400.0453247032853,125.18733978271484],
|
|
[420.0453247032853,125.18733978271484],
|
|
[438.3891296386719,125.18733978271484]
|
|
];
|
|
|
|
test('at', function (t) {
|
|
t.plan(expected.length * 2);
|
|
var pt = points(ptsstr);
|
|
var accuracy = [];
|
|
|
|
for (var i = 0; i < expected.length; i++) {
|
|
var ref = expected[i];
|
|
var p = pt.at(i * 20);
|
|
var x = p[0], y = p[1];
|
|
var rx = ref[0], ry = ref[1];
|
|
accuracy.push(x / rx, y / ry);
|
|
t.ok(cmp(x, rx, 0.1), x + ' ~~ ' + rx + ' ±10%');
|
|
t.ok(cmp(y, ry, 0.1), y + ' ~~ ' + ry + ' ±10%');
|
|
}
|
|
|
|
var sum = 0;
|
|
for (var i = 0; i < accuracy.length; i++) {
|
|
sum += accuracy[i];
|
|
}
|
|
console.log('mean accuracy:',
|
|
Math.floor(sum / accuracy.length * 100 * 100) / 100, '%'
|
|
);
|
|
});
|
|
|
|
function cmp (found, wanted, tolerance) {
|
|
return found <= wanted + wanted * tolerance
|
|
&& found >= wanted - wanted * tolerance
|
|
;
|
|
}
|