Leaflet parseFloat in LatLng

Benchmark created by Mourner on


Preparation HTML

<script>
function LatLng(lat, lng, alt) {
        lat = parseFloat(lat);
        lng = parseFloat(lng);

        if (isNaN(lat) || isNaN(lng)) {
                throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
        }

        this.lat = lat;
        this.lng = lng;

        if (alt !== undefined) {
                this.alt = parseFloat(alt);
        }
};

function LatLng2(lat, lng, alt) {
        lat = +lat;
        lng = +lng;

        if (isNaN(lat) || isNaN(lng)) {
                throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
        }

        this.lat = lat;
        this.lng = lng;

        if (alt !== undefined) {
                this.alt = alt;
        }
};

function latLng(a, b) { 
        if (a instanceof LatLng) {
                return a;
        }
        if (Array.isArray(a)) {
                if (typeof a[0] === 'number' || typeof a[0] === 'string') {
                        return new LatLng(a[0], a[1], a[2]);
                } else {
                        return null;
                }
        }
        if (a === undefined || a === null) {
                return a;
        }
        if (typeof a === 'object' && 'lat' in a) {
                return new LatLng(a.lat, 'lng' in a ? a.lng : a.lon);
        }
        if (b === undefined) {
                return null;
        }
        return new LatLng(a, b);
};

function latLng2(a, b) {        
        if (a instanceof LatLng2) {
                return a;
        }
        if (Array.isArray(a) && typeof a[0] !== 'object') {
                if (a.length === 3) {
                        return new LatLng2(a[0], a[1], a[2]);
                } else {
                        return new LatLng2(a[0], a[1]);
                }
        }
        if (a === undefined || a === null) {
                return a;
        }
        if (typeof a === 'object' && 'lat' in a) {
                return new LatLng2(a.lat, 'lng' in a ? a.lng : a.lon);
        }
        if (b === undefined) {
                return null;
        }
        return new LatLng2(a, b);
};

function latLng3(a, b) {        
        if (a instanceof LatLng2) {
                return a;
        }
        if (a && a.length && typeof a[0] !== 'object') {
                return new LatLng2(a[0], a[1]);
        }
        if (a === undefined || a === null) {
                return a;
        }
        if (typeof a === 'object' && 'lat' in a) {
                return new LatLng2(a.lat, 'lng' in a ? a.lng : a.lon);
        }
        if (b === undefined) {
                return null;
        }
        return new LatLng2(a, b);
};

</script>

Test runner

Ready to run.

Testing in
TestOps/sec
with parseFloat
new LatLng(50.0, 30.0);
ready
without parseFloat
new LatLng2(50.0, 30.0);
ready
with parseFloat using factory
latLng([50.0, 30.0]);
ready
without parseFloat using simpler factory
latLng2([50.0, 30.0]);
ready
no parseFloat, factory, no isArray
latLng3([50.0, 30.0]);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Mourner on
  • Revision 2: published by Mourner on
  • Revision 3: published by danzel on
  • Revision 4: published by Mourner on