blob: 639b3eb44a47125f8a6ae46d6006aa8d318687e7 [file] [log] [blame]
// 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));
}
}