import 'package:dmc_app/domain/mission/mission_stats.dart'; import 'package:dmc_app/domain/waypoint/flat_waypoint_list.dart'; import 'package:flutter_test/flutter_test.dart'; Waypoint _wp(double lat, double lon, {double speed = 15}) => Waypoint(lat: lat, lon: lon, altitudeM: 60, speedMs: speed, catchRadiusM: 60); void main() { group('computeMissionStats', () { test('leere/einzelne Wegpunktliste ergibt Distanz/Dauer 0', () { expect(computeMissionStats(const []).distanceM, 0); expect(computeMissionStats([_wp(0, 0)]).distanceM, 0); expect(computeMissionStats([_wp(0, 0)]).durationSec, 0); }); test('zwei Wegpunkte: Distanz aus Grosskreis, Dauer aus Zielgeschwindigkeit', () { final stats = computeMissionStats([_wp(0, 0), _wp(0, 0.01, speed: 20)]); // 0.01 Grad Laengendifferenz am Aequator entspricht rund 1112 m. expect(stats.distanceM, closeTo(1112.6, 1)); expect(stats.durationSec, closeTo(stats.distanceM / 20, 0.01)); }); test('mehrere Beine summieren sich, Dauer je Bein mit dessen Zielgeschwindigkeit', () { final stats = computeMissionStats( [_wp(0, 0, speed: 10), _wp(0, 0.01, speed: 20), _wp(0, 0.02, speed: 10)], ); final leg1 = 1112.6; final leg2 = 1112.6; expect(stats.distanceM, closeTo(leg1 + leg2, 2)); // Erstes Bein zaehlt mit der Geschwindigkeit des Zielwegpunkts (20), // zweites Bein mit dessen Zielwegpunkt (10). expect(stats.durationSec, closeTo(leg1 / 20 + leg2 / 10, 0.1)); }); }); }