| // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:test/test.dart'; |
| |
| import '../../../tool/code_completion/metrics_util.dart'; |
| |
| void main() { |
| group('ArithmeticMeanComputer', () { |
| test('empty', () { |
| var computer = ArithmeticMeanComputer('empty'); |
| expect(computer.sum, equals(0)); |
| expect(computer.count, equals(0)); |
| }); |
| |
| test('clear', () { |
| var computer = ArithmeticMeanComputer('name'); |
| computer.addValue(5); |
| computer.addValue(5); |
| computer.addValue(5); |
| |
| expect(computer.sum, equals(15)); |
| expect(computer.count, equals(3)); |
| computer.clear(); |
| |
| expect(computer.sum, equals(0)); |
| expect(computer.count, equals(0)); |
| }); |
| |
| test('mean', () { |
| var computer = ArithmeticMeanComputer('name'); |
| computer.addValue(1); |
| computer.addValue(2); |
| computer.addValue(3); |
| computer.addValue(4); |
| computer.addValue(5); |
| |
| expect(computer.sum, equals(15)); |
| expect(computer.count, equals(5)); |
| expect(computer.mean, equals(15 / 5)); |
| }); |
| }); |
| |
| group('Counter', () { |
| test('empty', () { |
| var counter = Counter('empty'); |
| expect(counter.map, isEmpty); |
| expect(counter.totalCount, equals(0)); |
| }); |
| |
| test('clear', () { |
| var counter = Counter('name'); |
| counter.count('bucket-1', 1); |
| expect(counter.map, isNotEmpty); |
| expect(counter.totalCount, equals(1)); |
| |
| counter.clear(); |
| expect(counter.map, isEmpty); |
| expect(counter.totalCount, equals(0)); |
| }); |
| |
| test('getCountOf', () { |
| var counter = Counter('name'); |
| counter.count('bucket-1', 1); |
| counter.count('bucket-2', 1); |
| counter.count('bucket-2', 1); |
| counter.count('bucket-3', 3); |
| expect(counter.name, equals('name')); |
| expect(counter.map, isNotEmpty); |
| expect(counter.totalCount, equals(6)); // 1 + 2 + 3 |
| expect(counter.getCountOf('bucket-0'), equals(0)); |
| expect(counter.getCountOf('bucket-1'), equals(1)); |
| expect(counter.getCountOf('bucket-2'), equals(2)); |
| expect(counter.getCountOf('bucket-3'), equals(3)); |
| }); |
| }); |
| |
| group('DistributionComputer', () { |
| test('displayString', () { |
| var computer = DistributionComputer(); |
| expect( |
| computer.displayString(), |
| '[0] 0 [10] 0 [20] 0 [30] 0 [40] 0 [50] 0 ' |
| '[60] 0 [70] 0 [80] 0 [90] 0 [100] 0'); |
| |
| for (var value in [ |
| 3, // 0-9 |
| 12, 15, // 10-19 |
| 23, 24, 26, // 20-29 |
| 30, 31, 31, 35, // 30-39 |
| 42, 42, 42, 42, 42, // 40-49 |
| 52, 53, 54, 55, 56, 57, // 50-59 |
| 63, // 60-69 |
| 72, 79, // 70-79 |
| 83, 84, 86, // 80-89 |
| 90, 91, 91, 99, // 90-99 |
| 100, 110, 120, 5000, // 100+ |
| ]) { |
| computer.addValue(value); |
| } |
| expect( |
| computer.displayString(), |
| '[0] 1 [10] 2 [20] 3 [30] 4 [40] 5 [50] 6 ' |
| '[60] 1 [70] 2 [80] 3 [90] 4 [100] 4'); |
| }); |
| }); |
| |
| group('MeanReciprocalRankComputer', () { |
| test('empty', () { |
| var computer = MeanReciprocalRankComputer(''); |
| expect(computer.count, equals(0)); |
| expect(computer.mrr, equals(0)); |
| }); |
| |
| test('clear', () { |
| var computer = MeanReciprocalRankComputer(''); |
| computer.addRank(2); |
| expect(computer.count, equals(1)); |
| expect(computer.mrr, equals(1 / 2)); |
| expect(computer.mrr_5, equals(1 / 2)); |
| |
| computer.clear(); |
| expect(computer.count, equals(0)); |
| expect(computer.mrr, equals(0)); |
| expect(computer.mrr_5, equals(0)); |
| }); |
| |
| test('mrr- single value', () { |
| var computer = MeanReciprocalRankComputer(''); |
| computer.addRank(3); |
| computer.addRank(3); |
| computer.addRank(3); |
| computer.addRank(3); |
| computer.addRank(3); |
| expect(computer.count, equals(5)); |
| expect(computer.mrr, doubleEquals(1 / 3)); |
| expect(computer.mrr_5, doubleEquals(1 / 3)); |
| }); |
| |
| test('mrr- example', () { |
| var computer = MeanReciprocalRankComputer(''); |
| computer.addRank(3); |
| computer.addRank(2); |
| computer.addRank(1); |
| expect(computer.count, equals(3)); |
| expect(computer.mrr, doubleEquals(11 / 18)); |
| expect(computer.mrr_5, doubleEquals(11 / 18)); |
| }); |
| |
| test('mrr- max rank', () { |
| var computer = MeanReciprocalRankComputer(''); |
| computer.addRank(6); |
| computer.addRank(5); |
| computer.addRank(4); |
| computer.addRank(3); |
| computer.addRank(2); |
| computer.addRank(1); |
| expect(computer.count, equals(6)); |
| expect(computer.mrr, greaterThan(computer.mrr_5)); |
| }); |
| }); |
| |
| group('Place', () { |
| test('none', () { |
| var place = Place.none(); |
| expect(place.numerator, equals(0)); |
| expect(place.denominator, equals(0)); |
| expect(place.rank, equals(0)); |
| expect(place, equals(Place.none())); |
| expect(place == Place(1, 1), isFalse); |
| }); |
| |
| test('default', () { |
| var place = Place(10, 20); |
| expect(place.numerator, equals(10)); |
| expect(place.rank, equals(10)); |
| expect(place.denominator, equals(20)); |
| expect(place, equals(Place(10, 20))); |
| expect(place == Place(1, 2), isFalse); |
| expect(place == Place(10, 200), isFalse); |
| expect(place == Place(1, 20), isFalse); |
| }); |
| }); |
| } |
| |
| /// Returns matcher that can compare double values. |
| Matcher doubleEquals(double expected) => _DoubleEquals(expected); |
| |
| class _DoubleEquals extends Matcher { |
| final double _value; |
| final int fractionDigits = 10; |
| |
| const _DoubleEquals(this._value); |
| |
| @override |
| Description describe(Description description) => |
| description.add(_value.toString()); |
| |
| @override |
| bool matches(item, Map matchState) { |
| return item is num && |
| num.parse(item.toStringAsFixed(fractionDigits)) == |
| num.parse(_value.toStringAsFixed(fractionDigits)); |
| } |
| } |