feat: complete academic symbol lexicon heal, 2-column Cooper extraction, and updated assets

This commit is contained in:
2026-10-09 15:26:58 +05:00
parent 7f91366201
commit 0b12e4583b
244 changed files with 611461 additions and 1617 deletions
+56
View File
@@ -0,0 +1,56 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:words999/services/day_numerology.dart';
import 'package:words999/services/words_repository.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
setUpAll(() async {
SharedPreferences.setMockInitialValues({});
await WordsRepository().init(remoteDailyShuffle: false);
});
test('calendar reduction keeps master numbers', () {
expect(DayNumerology.reduce(11), 11);
expect(DayNumerology.reduce(22), 22);
expect(DayNumerology.reduce(33), 33);
expect(DayNumerology.reduce(29), 11);
expect(DayNumerology.reduce(2026), 1);
expect(DayNumerology.reduce(10), 1);
final ordinary = DayNumerology.ofDate(DateTime(2026, 10, 5));
expect(ordinary.value, 7);
expect(ordinary.word, 'семь');
expect(ordinary.formula, '5 + 1 + 1 = 7');
expect(DayNumerology.ofDate(DateTime(2016, 1, 1)).value, 11);
expect(DayNumerology.ofDate(DateTime(2016, 2, 11)).value, 22);
expect(DayNumerology.ofDate(DateTime(2009, 11, 29)).value, 33);
});
test('code words and twelve stations live inside the thousand', () {
final repo = WordsRepository();
for (final name in DayNumerology.words.values) {
expect(repo.getWordByName(name), isNotNull, reason: name);
}
final file = File('assets/data/traditions_canon.json');
final canon = json.decode(file.readAsStringSync()) as Map<String, dynamic>;
final numerology = canon['numerology'] as Map<String, dynamic>;
final stations = numerology['stations'] as List;
expect(stations, hasLength(12));
for (final raw in stations) {
final station = raw as Map<String, dynamic>;
final primary = station['primary'] as Map<String, dynamic>;
final word = primary['word'] as String;
final item = repo.getWordByName(word);
expect(item, isNotNull, reason: word);
expect(item!.id, primary['id']);
expect((station['name'] as String).isNotEmpty, isTrue);
}
});
}