fix: smooth scan RSSI readings
This commit is contained in:
70
test/controller/bluetooth_test.dart
Normal file
70
test/controller/bluetooth_test.dart
Normal file
@ -0,0 +1,70 @@
|
||||
import 'package:abawo_bt_app/controller/bluetooth.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
group('RssiAverager', () {
|
||||
test('averages samples within the configured window', () {
|
||||
final averager = RssiAverager(window: const Duration(milliseconds: 500));
|
||||
final startedAt = DateTime(2026);
|
||||
|
||||
expect(averager.addSample('trainer', -80, startedAt), -80);
|
||||
expect(
|
||||
averager.addSample(
|
||||
'trainer',
|
||||
-70,
|
||||
startedAt.add(const Duration(milliseconds: 100)),
|
||||
),
|
||||
-75,
|
||||
);
|
||||
expect(
|
||||
averager.addSample(
|
||||
'trainer',
|
||||
-60,
|
||||
startedAt.add(const Duration(milliseconds: 400)),
|
||||
),
|
||||
-70,
|
||||
);
|
||||
});
|
||||
|
||||
test('drops samples older than the configured window', () {
|
||||
final averager = RssiAverager(window: const Duration(milliseconds: 500));
|
||||
final startedAt = DateTime(2026);
|
||||
|
||||
averager.addSample('trainer', -80, startedAt);
|
||||
averager.addSample(
|
||||
'trainer',
|
||||
-60,
|
||||
startedAt.add(const Duration(milliseconds: 250)),
|
||||
);
|
||||
|
||||
expect(
|
||||
averager.addSample(
|
||||
'trainer',
|
||||
-40,
|
||||
startedAt.add(const Duration(milliseconds: 501)),
|
||||
),
|
||||
-50,
|
||||
);
|
||||
});
|
||||
|
||||
test('tracks devices independently', () {
|
||||
final averager = RssiAverager(window: const Duration(milliseconds: 500));
|
||||
final startedAt = DateTime(2026);
|
||||
|
||||
averager.addSample('trainer-a', -80, startedAt);
|
||||
averager.addSample('trainer-a', -60, startedAt);
|
||||
|
||||
expect(averager.addSample('trainer-b', -40, startedAt), -40);
|
||||
});
|
||||
|
||||
test('clear removes previous samples', () {
|
||||
final averager = RssiAverager(window: const Duration(milliseconds: 500));
|
||||
final startedAt = DateTime(2026);
|
||||
|
||||
averager.addSample('trainer', -80, startedAt);
|
||||
averager.clear();
|
||||
|
||||
expect(averager.addSample('trainer', -40, startedAt), -40);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user