You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.5 KiB
103 lines
2.5 KiB
import 'package:test/test.dart';
|
|
import 'package:practice_engine/models/question.dart';
|
|
import 'package:practice_engine/models/deck_config.dart';
|
|
import 'package:practice_engine/algorithms/priority_manager.dart';
|
|
|
|
void main() {
|
|
group('PriorityManager', () {
|
|
late DeckConfig config;
|
|
|
|
setUp(() {
|
|
config = const DeckConfig(
|
|
priorityIncreaseOnIncorrect: 5,
|
|
priorityDecreaseOnCorrect: 2,
|
|
);
|
|
});
|
|
|
|
test('increases priority on incorrect answer', () {
|
|
final question = Question(
|
|
id: 'q1',
|
|
prompt: 'Test',
|
|
answers: ['A', 'B'],
|
|
correctAnswerIndices: [0],
|
|
priorityPoints: 10,
|
|
);
|
|
|
|
final updated = PriorityManager.applyAnswerResult(
|
|
question: question,
|
|
isCorrect: false,
|
|
config: config,
|
|
);
|
|
|
|
expect(updated.priorityPoints,
|
|
equals(10 + config.priorityIncreaseOnIncorrect));
|
|
});
|
|
|
|
test('decreases priority on correct answer', () {
|
|
final question = Question(
|
|
id: 'q1',
|
|
prompt: 'Test',
|
|
answers: ['A', 'B'],
|
|
correctAnswerIndices: [0],
|
|
priorityPoints: 10,
|
|
);
|
|
|
|
final updated = PriorityManager.applyAnswerResult(
|
|
question: question,
|
|
isCorrect: true,
|
|
config: config,
|
|
);
|
|
|
|
expect(updated.priorityPoints,
|
|
equals(10 - config.priorityDecreaseOnCorrect));
|
|
});
|
|
|
|
test('priority cannot go below 0', () {
|
|
final question = Question(
|
|
id: 'q1',
|
|
prompt: 'Test',
|
|
answers: ['A', 'B'],
|
|
correctAnswerIndices: [0],
|
|
priorityPoints: 1,
|
|
);
|
|
|
|
final updated = PriorityManager.applyAnswerResult(
|
|
question: question,
|
|
isCorrect: true,
|
|
config: config,
|
|
);
|
|
|
|
expect(updated.priorityPoints, equals(0));
|
|
});
|
|
|
|
test('resetPriority sets priority to 0', () {
|
|
final question = Question(
|
|
id: 'q1',
|
|
prompt: 'Test',
|
|
answers: ['A', 'B'],
|
|
correctAnswerIndices: [0],
|
|
priorityPoints: 100,
|
|
);
|
|
|
|
final updated = PriorityManager.resetPriority(question);
|
|
|
|
expect(updated.priorityPoints, equals(0));
|
|
});
|
|
|
|
test('withPriorityPoints enforces non-negative priority', () {
|
|
final question = Question(
|
|
id: 'q1',
|
|
prompt: 'Test',
|
|
answers: ['A', 'B'],
|
|
correctAnswerIndices: [0],
|
|
priorityPoints: 10,
|
|
);
|
|
|
|
final updated = question.withPriorityPoints(-5);
|
|
|
|
expect(updated.priorityPoints, equals(0));
|
|
});
|
|
});
|
|
}
|
|
|