import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/app/ai_local.dart'; /// 195: Android 의 AI 엔진 (sd-cli) 판 고르기 · 엔진이 죽은 신호별 문구 void main() { // 실제 기기의 /proc/cpuinfo Features 줄 (a4 확인) const p11 = 'processor\t: 0\nFeatures\t: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid\n' 'processor\t: 7\nFeatures\t: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid\n'; // Snapdragon 662 (ARMv8.0) const note10 = 'processor\t: 0\nFeatures\t: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp\n' 'processor\t: 4\nFeatures\t: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp\n'; const s10 = 'Features\t: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 ' 'sm3 sm4 asimddp sha512 asimdfhm dit uscat ilrcpc flagm ssbs sb paca pacg dcpodp flagm2 frint i8mm bf16 bti\n'; test('195: dotprod · fp16 이 없는 CPU (P11) 는 v8.0 판, 있으면 (노트 10+ · S10) 빠른 판', () { expect(sdCliLibName(p11), 'libsdcli_v80.so'); expect(sdCliLibName(note10), 'libsdcli.so'); expect(sdCliLibName(s10), 'libsdcli.so'); }); test('195: 모르면 (읽지 못함 · 코어마다 다름) 어느 CPU 에서나 도는 판', () { expect(sdCliLibName(''), 'libsdcli_v80.so'); // 한 코어라도 없으면 (그 코어에서 돌면 죽으므로) expect(sdCliLibName('Features\t: fp asimd asimddp fphp\nFeatures\t: fp asimd\n'), 'libsdcli_v80.so'); // 이름이 비슷한 다른 기능 (asimdhp 만) 은 fphp 로 치지 않는다 expect(sdCliLibName('Features\t: fp asimd asimddp asimdhp\n'), 'libsdcli_v80.so'); }); test('195: 엔진이 죽은 신호별 문구 - CPU 미지원 · 메모리는 그 신호일 때만', () { expect(sdExitMessage(-4), contains('CPU')); expect(sdExitMessage(-4), isNot(contains('메모리'))); expect(sdExitMessage(-9), contains('메모리')); for (final code in [1, -6, -11]) { expect(sdExitMessage(code), contains('$code')); expect(sdExitMessage(code), isNot(contains('메모리'))); expect(sdExitMessage(code), isNot(contains('깨졌'))); } }); }