Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(location)!: latitude/longitude returns number #1064

Merged
merged 11 commits into from
Oct 16, 2022
40 changes: 19 additions & 21 deletions src/modules/address/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,19 +260,18 @@ export class AddressModule {
* @param precision The number of decimal points of precision for the latitude. Defaults to `4`.
*
* @example
* faker.address.latitude() // '-30.9501'
* faker.address.latitude(10, -10, 5) // '2.68452'
* faker.address.latitude() // -30.9501
* faker.address.latitude(10, -10, 5) // 2.68452
*
* @since 2.0.1
*/
latitude(max: number = 90, min: number = -90, precision: number = 4): string {
return this.faker.datatype
.number({
min,
max,
precision: parseFloat(`${(0.0).toPrecision(precision)}1`),
})
.toFixed(precision);
// TODO @xDivisionByZerox 2022-06-12 this signature should probably be an object for easier maintainability
Shinigami92 marked this conversation as resolved.
Show resolved Hide resolved
latitude(max: number = 90, min: number = -90, precision: number = 4): number {
return this.faker.datatype.number({
min,
max,
precision: parseFloat(`${(0.0).toPrecision(precision)}1`),
xDivisionByZerox marked this conversation as resolved.
Show resolved Hide resolved
});
}

/**
Expand All @@ -283,23 +282,22 @@ export class AddressModule {
* @param precision The number of decimal points of precision for the longitude. Defaults to `4`.
*
* @example
* faker.address.longitude() // '-154.0226'
* faker.address.longitude(10, -10, 5) // '-4.03620'
* faker.address.longitude() // -154.0226
* faker.address.longitude(10, -10, 5) // -4.03620
*
* @since 2.0.1
*/
// TODO @xDivisionByZerox 2022-06-12 this signature should probably be an object for easier maintainability
longitude(
max: number = 180,
min: number = -180,
precision: number = 4
): string {
return this.faker.datatype
.number({
max: max,
min: min,
precision: parseFloat(`${(0.0).toPrecision(precision)}1`),
})
.toFixed(precision);
): number {
return this.faker.datatype.number({
max: max,
min: min,
precision: parseFloat(`${(0.0).toPrecision(precision)}1`),
});
}

/**
Expand Down Expand Up @@ -396,7 +394,7 @@ export class AddressModule {
): [latitude: number, longitude: number] {
// If there is no coordinate, the best we can do is return a random GPS coordinate.
if (coordinate === undefined) {
return [parseFloat(this.latitude()), parseFloat(this.longitude())];
return [this.latitude(), this.longitude()];
}

const angleRadians = this.faker.datatype.float({
Expand Down
12 changes: 6 additions & 6 deletions test/__snapshots__/address.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ exports[`address > 42 > direction > with abbr = false 1`] = `"South"`;

exports[`address > 42 > direction > with abbr = true 1`] = `"S"`;

exports[`address > 42 > latitude > noArgs 1`] = `"-22.5828"`;
exports[`address > 42 > latitude > noArgs 1`] = `-22.5828`;

exports[`address > 42 > longitude > noArgs 1`] = `"-45.1656"`;
exports[`address > 42 > longitude > noArgs 1`] = `-45.1656`;

exports[`address > 42 > nearbyGPSCoordinate > near origin 1`] = `
[
Expand Down Expand Up @@ -106,9 +106,9 @@ exports[`address > 1211 > direction > with abbr = false 1`] = `"Southwest"`;

exports[`address > 1211 > direction > with abbr = true 1`] = `"SW"`;

exports[`address > 1211 > latitude > noArgs 1`] = `"77.1337"`;
exports[`address > 1211 > latitude > noArgs 1`] = `77.1337`;

exports[`address > 1211 > longitude > noArgs 1`] = `"154.2673"`;
exports[`address > 1211 > longitude > noArgs 1`] = `154.2673`;

exports[`address > 1211 > nearbyGPSCoordinate > near origin 1`] = `
[
Expand Down Expand Up @@ -184,9 +184,9 @@ exports[`address > 1337 > direction > with abbr = false 1`] = `"South"`;

exports[`address > 1337 > direction > with abbr = true 1`] = `"S"`;

exports[`address > 1337 > latitude > noArgs 1`] = `"-42.8356"`;
exports[`address > 1337 > latitude > noArgs 1`] = `-42.8356`;

exports[`address > 1337 > longitude > noArgs 1`] = `"-85.6711"`;
exports[`address > 1337 > longitude > noArgs 1`] = `-85.6711`;

exports[`address > 1337 > nearbyGPSCoordinate > near origin 1`] = `
[
Expand Down
108 changes: 44 additions & 64 deletions test/address.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,100 +153,80 @@ describe('address', () => {
});

describe('latitude()', () => {
it('returns random latitude', () => {
for (let i = 0; i < 100; i++) {
const latitude = faker.address.latitude();
it('returns a number', () => {
const latitude = faker.address.latitude();

expect(latitude).toBeTypeOf('string');
expect(latitude).toBeTypeOf('number');
});

const latitude_float = parseFloat(latitude);
it('returns random latitude', () => {
const latitude = faker.address.latitude();

expect(latitude_float).toBeGreaterThanOrEqual(-90.0);
expect(latitude_float).toBeLessThanOrEqual(90.0);
}
expect(latitude).toBeGreaterThanOrEqual(-90.0);
expect(latitude).toBeLessThanOrEqual(90.0);
});

it('returns latitude with min and max and default precision', () => {
for (let i = 0; i < 100; i++) {
const latitude = faker.address.latitude(5, -5);

expect(latitude).toBeTypeOf('string');
expect(
latitude.split('.')[1].length,
'The precision of latitude should be 4 digits'
).toBe(4);
const latitude = faker.address.latitude(5, -5);

const latitude_float = parseFloat(latitude);
expect(
latitude.toString().split('.')[1].length,
'The precision of latitude should be 4 digits'
).lessThanOrEqual(4);

expect(latitude_float).toBeGreaterThanOrEqual(-5);
expect(latitude_float).toBeLessThanOrEqual(5);
}
expect(latitude).toBeGreaterThanOrEqual(-5);
expect(latitude).toBeLessThanOrEqual(5);
});

it('returns random latitude with custom precision', () => {
for (let i = 0; i < 100; i++) {
const latitude = faker.address.latitude(undefined, undefined, 7);

expect(latitude).toBeTypeOf('string');
expect(
latitude.split('.')[1].length,
'The precision of latitude should be 7 digits'
).toBe(7);
const latitude = faker.address.latitude(undefined, undefined, 7);

const latitude_float = parseFloat(latitude);
expect(
latitude.toString().split('.')[1].length,
'The precision of latitude should be 7 digits'
).lessThanOrEqual(7);

expect(latitude_float).toBeGreaterThanOrEqual(-180);
expect(latitude_float).toBeLessThanOrEqual(180);
}
expect(latitude).toBeGreaterThanOrEqual(-180);
expect(latitude).toBeLessThanOrEqual(180);
});
});

describe('longitude()', () => {
it('returns random longitude', () => {
for (let i = 0; i < 100; i++) {
const longitude = faker.address.longitude();
it('returns a number', () => {
const longitude = faker.address.longitude();

expect(longitude).toBeTypeOf('string');
expect(longitude).toBeTypeOf('number');
});

const longitude_float = parseFloat(longitude);
it('returns random longitude', () => {
const longitude = faker.address.longitude();

expect(longitude_float).toBeGreaterThanOrEqual(-180);
expect(longitude_float).toBeLessThanOrEqual(180);
}
expect(longitude).toBeGreaterThanOrEqual(-180);
expect(longitude).toBeLessThanOrEqual(180);
});

it('returns random longitude with min and max and default precision', () => {
for (let i = 0; i < 100; i++) {
const longitude = faker.address.longitude(100, -30);

expect(longitude).toBeTypeOf('string');
expect(
longitude.split('.')[1].length,
'The precision of longitude should be 4 digits'
).toBe(4);
const longitude = faker.address.longitude(100, -30);

const longitude_float = parseFloat(longitude);
expect(
longitude.toString().split('.')[1].length,
'The precision of longitude should be 4 digits'
).lessThanOrEqual(4);

expect(longitude_float).toBeGreaterThanOrEqual(-30);
expect(longitude_float).toBeLessThanOrEqual(100);
}
expect(longitude).toBeGreaterThanOrEqual(-30);
expect(longitude).toBeLessThanOrEqual(100);
});

it('returns random longitude with custom precision', () => {
for (let i = 0; i < 100; i++) {
const longitude = faker.address.longitude(undefined, undefined, 7);

expect(longitude).toBeTypeOf('string');
expect(
longitude.split('.')[1].length,
'The precision of longitude should be 7 digits'
).toBe(7);
const longitude = faker.address.longitude(undefined, undefined, 7);

const longitude_float = parseFloat(longitude);
expect(
longitude.toString().split('.')[1].length,
'The precision of longitude should be 7 digits'
).lessThanOrEqual(7);

expect(longitude_float).toBeGreaterThanOrEqual(-180);
expect(longitude_float).toBeLessThanOrEqual(180);
}
expect(longitude).toBeGreaterThanOrEqual(-180);
expect(longitude).toBeLessThanOrEqual(180);
});
});

Expand Down