From fc03f90bf7fdfd7165856d63594382011d18b7b9 Mon Sep 17 00:00:00 2001 From: Ryotaro Onoue <73390859+YumNumm@users.noreply.github.com> Date: Thu, 30 May 2024 02:58:44 +0900 Subject: [PATCH] =?UTF-8?q?[BUG]=20=E8=B5=B0=E6=99=82=E8=A1=A8=E3=81=AE?= =?UTF-8?q?=E8=A8=88=E7=AE=97=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3=20(#691)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix --- .../provider/travel_time_provider.dart | 18 ++--- .../provider/travel_time_provider_test.dart | 65 +++++++++++++++++++ 2 files changed, 72 insertions(+), 11 deletions(-) create mode 100644 app/test/core/provider/travel_time/provider/travel_time_provider_test.dart diff --git a/app/lib/core/provider/travel_time/provider/travel_time_provider.dart b/app/lib/core/provider/travel_time/provider/travel_time_provider.dart index ad4204a3b..f681522bd 100644 --- a/app/lib/core/provider/travel_time/provider/travel_time_provider.dart +++ b/app/lib/core/provider/travel_time/provider/travel_time_provider.dart @@ -15,13 +15,9 @@ Future travelTime(TravelTimeRef ref) async { @Riverpod(keepAlive: true) Future travelTimeDepthMap( TravelTimeDepthMapRef ref, -) { - final state = ref.watch(travelTimeProvider); - final value = state.value; - if (value == null) { - return Future.value({}); - } - return Future.value(value.table.groupListsBy((e) => e.depth)); +) async { + final state = await ref.watch(travelTimeProvider.future); + return state.table.groupListsBy((e) => e.depth); } typedef TravelTimeDepthMap = Map>; @@ -36,8 +32,8 @@ extension TravelTimeDepthMapCalc on TravelTimeDepthMap { return TravelTimeResult(null, null); } final p = () { - final p1 = lists.firstWhereOrNull((e) => e.p <= duration); - final p2 = lists.lastWhereOrNull((e) => e.p >= duration); + final p1 = lists.lastWhereOrNull((e) => e.p <= duration); + final p2 = lists.firstWhereOrNull((e) => e.p >= duration); if (p1 == null || p2 == null) { return null; } @@ -47,8 +43,8 @@ extension TravelTimeDepthMapCalc on TravelTimeDepthMap { return p; }(); final s = () { - final s1 = lists.firstWhereOrNull((e) => e.s <= duration); - final s2 = lists.lastWhereOrNull((e) => e.s >= duration); + final s1 = lists.lastWhereOrNull((e) => e.s <= duration); + final s2 = lists.firstWhereOrNull((e) => e.s >= duration); if (s1 == null || s2 == null) { return null; } diff --git a/app/test/core/provider/travel_time/provider/travel_time_provider_test.dart b/app/test/core/provider/travel_time/provider/travel_time_provider_test.dart new file mode 100644 index 000000000..8e9238758 --- /dev/null +++ b/app/test/core/provider/travel_time/provider/travel_time_provider_test.dart @@ -0,0 +1,65 @@ +import 'package:eqmonitor/core/provider/travel_time/provider/travel_time_provider.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + final container = ProviderContainer(); + + // Wait for loading + setUp(() async { + await container.read(travelTimeDepthMapProvider.future); + }); + + test('travelTimeDepthMap', () { + final travelTimeDepthMap = container.read(travelTimeDepthMapProvider); + expect(travelTimeDepthMap, isNotNull); + }); + + group( + 'TravelTimeDepthMapCalc', + () { + // https://zenn.dev/boocsan/articles/travel-time-table-converter-adcal2020?#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D より + test( + '20km 20sec', + () async { + final travelMap = + await container.read(travelTimeDepthMapProvider.future); + final result = travelMap.getTravelTime(20, 20); + expect(result.pDistance, 122.35900962861072); + expect(result.sDistance, 67.68853695324285); + }, + ); + test( + '100km 200sec', + () async { + final travelMap = + await container.read(travelTimeDepthMapProvider.future); + final result = travelMap.getTravelTime(100, 200); + expect(result.pDistance, 1603.2552083333333); + expect(result.sDistance, 868.2417083144026); + }, + ); + test( + '200km 200sec', + () async { + final travelMap = + await container.read(travelTimeDepthMapProvider.future); + final result = travelMap.getTravelTime(200, 200); + expect(result.pDistance, 1639.8745519713261); + expect(result.sDistance, 874.7576045627376); + }, + ); + test( + '300km 200sec', + () async { + final travelMap = + await container.read(travelTimeDepthMapProvider.future); + final result = travelMap.getTravelTime(300, 200); + expect(result.pDistance, 1672.7323943661972); + expect(result.sDistance, 869.2659627953747); + }, + ); + }, + ); +}