Commit f6bdffe

derdilla <derdilla06@gmail.com>
2023-06-03 06:10:21
add tests additional tests to ensure parity between blood pressure model implementations
1 parent e574046
test/model/bood_pressure_test.dart
@@ -106,7 +106,66 @@ void main() {
 
       expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 0);
       expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 0);
+    });
+
+    test('should return averages', () async {
+      var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_avg');
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 122, 87, 65, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73, ''));
+      
+      expect(await m.avgSys, 111); // 111 // gets 116
+      expect(await m.avgDia, 73); // 73.3333...
+      expect(await m.avgPul, 66); // 66.6666...
+    });
+
+    test('should return max', () async {
+      var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_max');
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 123, 87, 65, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(4), 111, 73, 73, ''));
+
+      expect(await m.maxSys, 123);
+      expect(await m.maxDia, 87);
+      expect(await m.maxPul, 73);
+    });
+
+    test('should return min', () async {
+      var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_min');
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 123, 87, 65, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(4), 100, 60, 62, ''));
+
+      expect(await m.minSys, 100);
+      expect(await m.minDia, 60);
+      expect(await m.minPul, 62);
+    });
+
+    test('should know count', () async {
+      var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_count');
+
+      for (int i = 1; i < 101; i++) {
+        await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(i), 0, 0, 0, ''));
+      }
 
+      expect(await m.count, 100);
+    });
+
+    test('should determine special days', () async {
+      var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_special_days');
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(100), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(-2200), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(9000000), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3124159), 0, 0, 0, ''));
+
+      expect((await m.firstDay), DateTime.fromMillisecondsSinceEpoch(-2200));
+      expect((await m.lastDay), DateTime.fromMillisecondsSinceEpoch(9000000));
     });
   });
 
@@ -152,5 +211,66 @@ void main() {
 
       m.add(r);
     });
+
+
+    test('should return averages', () async {
+      var m = RamBloodPressureModel();
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 122, 87, 65, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73, ''));
+
+      expect(await m.avgSys, 111); // 111 // gets 116
+      expect(await m.avgDia, 73); // 73.3333...
+      expect(await m.avgPul, 66); // 66.6666...
+    });
+
+    test('should return max', () async {
+      var m = RamBloodPressureModel();
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 123, 87, 65, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(4), 111, 73, 73, ''));
+
+      expect(await m.maxSys, 123);
+      expect(await m.maxDia, 87);
+      expect(await m.maxPul, 73);
+    });
+
+    test('should return min', () async {
+      var m = RamBloodPressureModel();
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 123, 87, 65, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(4), 100, 60, 62, ''));
+
+      expect(await m.minSys, 100);
+      expect(await m.minDia, 60);
+      expect(await m.minPul, 62);
+    });
+
+    test('should know count', () async {
+      var m = RamBloodPressureModel();
+
+      for (int i = 1; i < 101; i++) {
+        await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(i), 0, 0, 0, ''));
+      }
+
+      expect(await m.count, 100);
+    });
+
+    test('should determine special days', () async {
+      var m = RamBloodPressureModel();
+
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(100), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(-2200), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(9000000), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(3124159), 0, 0, 0, ''));
+
+      expect((await m.firstDay), DateTime.fromMillisecondsSinceEpoch(-2200));
+      expect((await m.lastDay), DateTime.fromMillisecondsSinceEpoch(9000000));
+    });
   });
 }
\ No newline at end of file
test/ram_only_implementations.dart
@@ -6,48 +6,17 @@ import 'package:flutter/material.dart';
 class RamBloodPressureModel extends ChangeNotifier implements BloodPressureModel {
   final List<BloodPressureRecord> _records = [];
 
-
   @override
   Future<void> add(BloodPressureRecord measurement) async {
     _records.add(measurement);
     notifyListeners();
   }
 
-  @override
-  Future<int> get avgDia async => _records.map((e) => e.diastolic).reduce((a, b) => a+b) ~/ _records.length;
-
-  @override
-  Future<int> get avgPul async => _records.map((e) => e.pulse).reduce((a, b) => a+b) ~/ _records.length;
-
-  @override
-  Future<int> get avgSys async => _records.map((e) => e.systolic).reduce((a, b) => a+b) ~/ _records.length;
-
-  @override
-  Future<List<BloodPressureRecord>> get all async => _records;
-
-  @override
-  void close() {}
-
-  @override
-  Future<int> get count async => _records.length;
-
   @override
   Future<void> delete(DateTime timestamp) async {
     _records.removeWhere((element) => element.creationTime.isAtSameMomentAs(timestamp));
   }
 
-  @override
-  Future<DateTime> get firstDay async {
-    _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
-    return _records.first.creationTime;
-  }
-
-  @override
-  Future<DateTime> get lastDay async {
-    _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
-    return _records.last.creationTime;
-  }
-
   @override
   Future<UnmodifiableListView<BloodPressureRecord>> getInTimeRange(DateTime from, DateTime to) async {
     List<BloodPressureRecord> recordsInTime = [];
@@ -59,6 +28,21 @@ class RamBloodPressureModel extends ChangeNotifier implements BloodPressureModel
     return UnmodifiableListView(recordsInTime);
   }
 
+  @override
+  Future<List<BloodPressureRecord>> get all async => _records;
+
+  @override
+  Future<int> get count async => _records.length;
+
+  @override
+  Future<int> get avgDia async => _records.map((e) => e.diastolic).reduce((a, b) => a+b) ~/ _records.length;
+
+  @override
+  Future<int> get avgPul async => _records.map((e) => e.pulse).reduce((a, b) => a+b) ~/ _records.length;
+
+  @override
+  Future<int> get avgSys async => _records.map((e) => e.systolic).reduce((a, b) => a+b) ~/ _records.length;
+
   @override
   Future<int> get maxDia async => _records.reduce((a,b) => (a.diastolic>=b.diastolic) ? a : b).diastolic;
 
@@ -77,6 +61,21 @@ class RamBloodPressureModel extends ChangeNotifier implements BloodPressureModel
   @override
   Future<int> get minSys async => _records.reduce((a,b) => (a.systolic<=b.systolic) ? a : b).systolic;
 
+  @override
+  Future<DateTime> get firstDay async {
+    _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+    return _records.first.creationTime;
+  }
+
+  @override
+  Future<DateTime> get lastDay async {
+    _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+    return _records.last.creationTime;
+  }
+
+  @override
+  void close() {}
+
   @override
   Future<void> import(void Function(bool p1, String? p2) callback) {
     // TODO: implement import
@@ -88,5 +87,4 @@ class RamBloodPressureModel extends ChangeNotifier implements BloodPressureModel
     // TODO: implement save
     throw UnimplementedError();
   }
-
 }
\ No newline at end of file