feat: complete academic symbol lexicon heal, 2-column Cooper extraction, and updated assets
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:words999/models/syncretic_session_model.dart';
|
||||
import 'package:words999/models/divination_instructions.dart';
|
||||
import 'package:words999/screens/numerology_divination_screen.dart';
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
group('Numerology & Pythagorean Square Tests', () {
|
||||
test('Instructions repository contains numerology entry', () {
|
||||
final instruction = DivinationInstructionsRepository.get('numerology');
|
||||
expect(instruction.id, equals('numerology'));
|
||||
expect(instruction.title, contains('Пифагор'));
|
||||
expect(instruction.icon, equals('🔢'));
|
||||
expect(instruction.physicalDiceMethod, isNotEmpty);
|
||||
expect(instruction.directInputMethod, isNotEmpty);
|
||||
});
|
||||
|
||||
test('Canonical Alexandrian working numbers calculation (e.g. 15.07.1990)', () {
|
||||
// Date: 15.07.1990
|
||||
// Digits: 1, 5, 0, 7, 1, 9, 9, 0
|
||||
// W1: 1+5+0+7+1+9+9+0 = 32
|
||||
// W2: 3+2 = 5
|
||||
// W3: 32 - 2 * 1 = 30
|
||||
// W4: 3+0 = 3
|
||||
const day = 15;
|
||||
const month = 7;
|
||||
const year = 1990;
|
||||
|
||||
final digits = [1, 5, 0, 7, 1, 9, 9, 0];
|
||||
final w1 = digits.reduce((a, b) => a + b);
|
||||
expect(w1, equals(32));
|
||||
|
||||
final w2 = (3 + 2);
|
||||
expect(w2, equals(5));
|
||||
|
||||
final w3 = w1 - (2 * 1);
|
||||
expect(w3, equals(30));
|
||||
|
||||
final w4 = 3 + 0;
|
||||
expect(w4, equals(3));
|
||||
|
||||
// Digit pool:
|
||||
// Date: 1, 5, 0, 7, 1, 9, 9, 0
|
||||
// W1: 3, 2
|
||||
// W2: 5
|
||||
// W3: 3, 0
|
||||
// W4: 3
|
||||
// Counts for 1..9:
|
||||
// 1: 1, 1 -> 2
|
||||
// 2: 2 -> 1
|
||||
// 3: 3, 3, 3 -> 3
|
||||
// 4: 0
|
||||
// 5: 5, 5 -> 2
|
||||
// 6: 0
|
||||
// 7: 7 -> 1
|
||||
// 8: 0
|
||||
// 9: 9, 9 -> 2
|
||||
final pool = [1, 5, 0, 7, 1, 9, 9, 0, 3, 2, 5, 3, 0, 3];
|
||||
expect(pool.where((d) => d == 1).length, equals(2));
|
||||
expect(pool.where((d) => d == 2).length, equals(1));
|
||||
expect(pool.where((d) => d == 3).length, equals(3));
|
||||
expect(pool.where((d) => d == 4).length, equals(0));
|
||||
expect(pool.where((d) => d == 5).length, equals(2));
|
||||
expect(pool.where((d) => d == 7).length, equals(1));
|
||||
expect(pool.where((d) => d == 9).length, equals(2));
|
||||
});
|
||||
|
||||
test('SyncreticReading accepts numerology format', () {
|
||||
final reading = SyncreticReading(
|
||||
id: 'num_test_1',
|
||||
systemId: 'numerology',
|
||||
systemName: 'Нумерология и Квадрат Пифагора',
|
||||
systemIcon: '🔢',
|
||||
timestamp: DateTime.now(),
|
||||
layoutTitle: 'Психоматрица 3×3 (ЧЖП: 5)',
|
||||
inputMethod: 'manual',
|
||||
items: [
|
||||
const ReadingSignItem(
|
||||
title: 'Число Жизненного Пути: 5',
|
||||
subtitle: '5 — Искатель Свободы и Странник',
|
||||
symbol: '5',
|
||||
lore: 'Динамические перемены и расширение горизонтов.',
|
||||
),
|
||||
const ReadingSignItem(
|
||||
title: 'Ячейка 1: Характер (11)',
|
||||
subtitle: 'Норма',
|
||||
symbol: '1',
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
final map = reading.toMap();
|
||||
final revived = SyncreticReading.fromMap(map);
|
||||
expect(revived.systemId, equals('numerology'));
|
||||
expect(revived.items.length, equals(2));
|
||||
expect(revived.items.first.title, contains('Число Жизненного Пути: 5'));
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user