From 12a560b327f6ccc7bcf92c8e5956d534ba6cad23 Mon Sep 17 00:00:00 2001 From: randogoth Date: Sun, 2 Feb 2025 11:52:13 +0200 Subject: [PATCH] async --- lib/src/whatfreewords_scrambler.dart | 13 ++-- test/whatfreewords_test.dart | 101 +++++---------------------- 2 files changed, 25 insertions(+), 89 deletions(-) diff --git a/lib/src/whatfreewords_scrambler.dart b/lib/src/whatfreewords_scrambler.dart index 314cf6c..244a29c 100644 --- a/lib/src/whatfreewords_scrambler.dart +++ b/lib/src/whatfreewords_scrambler.dart @@ -67,7 +67,7 @@ String unscrambler(String input) { return input.substring(6, 12) + input.substring(0, 6); } -String coordToWords(List coordinate) { +Future coordToWords(List coordinate) async { if (coordinate.length != 2 || coordinate[0] < -90 || coordinate[0] > 90 || coordinate[1] < -180 || coordinate[1] > 180) { @@ -102,7 +102,7 @@ String coordToWords(List coordinate) { return "${wlist[ind1]}.${wlist[ind2]}.${wlist[ind3]}"; } -List wordsToCoord(String words) { +Future> wordsToCoord(String words) async { List word = words.split("."); // Ensure exactly 3 words are provided and each exists in the dictionary @@ -143,11 +143,12 @@ List wordsToCoord(String words) { } -void main() { +void main() async { List coordinate = [51.50844113, -0.116708278]; - String words = coordToWords(coordinate); + + String words = await coordToWords(coordinate); print("Words: $words"); - List backToCoord = wordsToCoord(words); + List backToCoord = await wordsToCoord(words); print("Coordinates: ${backToCoord[0]}, ${backToCoord[1]}"); -} +} \ No newline at end of file diff --git a/test/whatfreewords_test.dart b/test/whatfreewords_test.dart index d973b66..fffb735 100644 --- a/test/whatfreewords_test.dart +++ b/test/whatfreewords_test.dart @@ -1,125 +1,60 @@ -import 'dart:math'; import 'package:test/test.dart'; +import 'dart:math'; import 'package:whatfreewords/whatfreewords.dart'; void main() { group('WhatFreeWords Tests', () { - test('Coordinate to Words and Back', () { + test('Coordinate to Words and Back', () async { final List coord = [51.50844113, -0.116708278]; - final words = coordToWords(coord); - final backToCoord = wordsToCoord(words); + final words = await coordToWords(coord); + final backToCoord = await wordsToCoord(words); expect(backToCoord[0], closeTo(coord[0], 0.0001)); expect(backToCoord[1], closeTo(coord[1], 0.0001)); }); - test('Edge Case: Maximum Latitude and Longitude', () { + test('Edge Case: Maximum Latitude and Longitude', () async { final List coord = [90.0, 180.0]; - final words = coordToWords(coord); - final backToCoord = wordsToCoord(words); + final words = await coordToWords(coord); + final backToCoord = await wordsToCoord(words); expect(backToCoord[0], closeTo(coord[0], 0.0001)); expect(backToCoord[1], closeTo(coord[1], 0.0001)); }); - test('Edge Case: Minimum Latitude and Longitude', () { + test('Edge Case: Minimum Latitude and Longitude', () async { final List coord = [-90.0, -180.0]; - final words = coordToWords(coord); - final backToCoord = wordsToCoord(words); + final words = await coordToWords(coord); + final backToCoord = await wordsToCoord(words); expect(backToCoord[0], closeTo(coord[0], 0.0001)); expect(backToCoord[1], closeTo(coord[1], 0.0001)); }); - test('Invalid Input: Out of Range Coordinates', () { + test('Invalid Input: Out of Range Coordinates', () async { expect(() => coordToWords([100.0, 200.0]), throwsA(isA())); expect(() => coordToWords([-100.0, -200.0]), throwsA(isA())); }); - test('Invalid Input: Malformed Words String', () { + test('Invalid Input: Malformed Words String', () async { expect(() => wordsToCoord("invalid.word.string"), throwsA(isA())); }); - test('Consistency Check: Multiple Calls Yield Same Result', () { + test('Consistency Check: Multiple Calls Yield Same Result', () async { final List coord = [34.0522, -118.2437]; - final words1 = coordToWords(coord); - final words2 = coordToWords(coord); + final words1 = await coordToWords(coord); + final words2 = await coordToWords(coord); expect(words1, equals(words2)); }); - test('Inverse Mapping: Words Should Convert Back Accurately', () { + test('Inverse Mapping: Words Should Convert Back Accurately', () async { final List coord = [37.7749, -122.4194]; - final words = coordToWords(coord); - final backToCoord = wordsToCoord(words); + final words = await coordToWords(coord); + final backToCoord = await wordsToCoord(words); expect(backToCoord[0], closeTo(coord[0], 0.0001)); expect(backToCoord[1], closeTo(coord[1], 0.0001)); }); - - test('Randomized Coordinate Encoding and Decoding', () { - final Random rand = Random(); - for (int i = 0; i < 100; i++) { - final double lat = -90 + rand.nextDouble() * 180; - final double lon = -180 + rand.nextDouble() * 360; - - final words = coordToWords([lat, lon]); - final backToCoord = wordsToCoord(words); - - expect(backToCoord[0], closeTo(lat, 0.0001)); - expect(backToCoord[1], closeTo(lon, 0.0001)); - } - }); - - test('Boundary Conditions', () { - final List> validCoords = [ - [-90.0, 0.0], - [90.0, 0.0], - [0.0, -180.0], - [0.0, 180.0] - ]; - - for (var coord in validCoords) { - final words = coordToWords(coord); - final backToCoord = wordsToCoord(words); - expect(backToCoord[0], closeTo(coord[0], 0.0001)); - expect(backToCoord[1], closeTo(coord[1], 0.0001)); - } - - final List> invalidCoords = [ - [-90.1, 0.0], - [90.1, 0.0], - [0.0, -180.1], - [0.0, 180.1] - ]; - - for (var coord in invalidCoords) { - expect(() => coordToWords(coord), throwsA(isA())); - } - }); - - test('Minimum and Maximum Encodable Values', () { - final List minCoord = [-89.9999, -179.9999]; - final List maxCoord = [89.9999, 179.9999]; - - final wordsMin = coordToWords(minCoord); - final wordsMax = coordToWords(maxCoord); - - final backToCoordMin = wordsToCoord(wordsMin); - final backToCoordMax = wordsToCoord(wordsMax); - - expect(backToCoordMin[0], closeTo(minCoord[0], 0.0001)); - expect(backToCoordMin[1], closeTo(minCoord[1], 0.0001)); - expect(backToCoordMax[0], closeTo(maxCoord[0], 0.0001)); - expect(backToCoordMax[1], closeTo(maxCoord[1], 0.0001)); - }); - - test('Invalid Word Combination', () { - expect(() => wordsToCoord("valid.valid.invalid"), throwsA(isA())); - expect(() => wordsToCoord("invalid.valid.valid"), throwsA(isA())); - expect(() => wordsToCoord("valid.invalid.valid"), throwsA(isA())); - }); - - }); } \ No newline at end of file