1// TestFullText: automated full-text spell correction test 2using System; 3using System.IO; 4using System.Text; 5using System.Threading; 6using WindowCapture.Helpers; 7 8class TestFullText 9{ 10 static void Main() 11 { 12 Console.OutputEncoding = Encoding.UTF8; 13 Console.WriteLine("=== Full Text Correction Test ===\n"); 14 15 // Wait for async loading 16 Console.Write("Waiting for dictionaries to load..."); 17 for (int i = 0; i < 100; i++) 18 { 19 Thread.Sleep(200); 20 // Try a simple test to see if ready 21 try 22 { 23 string r = TextProcessor.TestCorrectText("тест"); 24 if (r != null) break; 25 } 26 catch { } 27 } 28 Console.WriteLine(" OK\n"); 29 Thread.Sleep(2000); // extra wait for all models 30 31 // Test cases: { input, expected_substring_that_must_be_present } 32 var tests = new string[,] { 33 // === Test 1: Original crash-test fragments === 34 {"н пожелаю", "не пожелаю"}, 35 {"и н болейте", "и не болейте"}, 36 {"кт кто-нибудь", "кто-нибудь"}, 37 {"ил ив рис", "или в рис"}, 38 {"а т оя", "а то я"}, 39 40 // === Test 2: НО vs НЕ === 41 {"н мне лень", "но мне лень"}, 42 {"методом н, очевидно", "но"}, 43 {"н отеперь не уверен", "но теперь"}, 44 {"н оскрость просто", "но скорость"}, 45 46 // === Test 3: IT text === 47 {"Приет всем", "Привет всем"}, 48 {"кайо-то сумашедший", "какой-то сумасшедший"}, 49 {"см не понимю", "сам не понимаю"}, 50 {"на обьект", "на объект"}, 51 {"Бкаап не поднмался", "Бэкап не поднимался"}, 52 {"сказла что он", "сказал, что он"}, 53 {"смстоятельно лезть", "самостоятельно лезть"}, 54 55 // === Test 4: Space issues === 56 {"вов ремя рндера", "во время рендера"}, 57 {"вс е пошло", "все пошло"}, 58 {"Тамв папек", "Там в папке"}, 59 {"чег от не хватате", "чего"}, 60 {"изза задрежки", "из-за задержки"}, 61 62 // === Test 5: Wrong candidates === 63 {"силно по ней стучал", "сильно по ней"}, 64 {"под стук колес", "под стук колес"}, 65 {"моент", "момент"}, 66 {"глова раскалывается", "голова раскалывается"}, 67 {"отсался без", "остался без"}, 68 69 // === Test 6: Slang protection === 70 {"пофиксить баг", "пофиксить баг"}, 71 {"маякните в личку", "маякните в личку"}, 72 {"дедлйн", "дедлайн"}, 73 {"вйафай постоянно", "вайфай постоянно"}, 74 {"рндера", "рендера"}, 75 76 // === Test 7: New patterns === 77 {"командривока прсото", "командировка просто"}, 78 {"файов", "файлов"}, 79 {"перзагружать через кнпку", "перезагружать через кнопку"}, 80 {"прзнтации", "презентации"}, 81 {"черапшья", "черепашья"}, 82 }; 83 84 int pass = 0, fail = 0; 85 for (int i = 0; i < tests.GetLength(0); i++) 86 { 87 string input = tests[i, 0]; 88 string expected = tests[i, 1]; 89 90 string result = TextProcessor.TestCorrectText(input); 91 // Remove extra punctuation/capitalization for comparison 92 string resultLower = result.ToLower().Replace(",", "").Replace(".", "").Trim(); 93 string expectedLower = expected.ToLower().Replace(",", "").Replace(".", "").Trim(); 94 95 bool ok = resultLower.Contains(expectedLower); 96 if (ok) pass++; else fail++; 97 98 string status = ok ? "PASS" : "FAIL"; 99 Console.WriteLine(" " + status + ": \"" + input + "\""); 100 if (!ok) 101 { 102 Console.WriteLine(" Got: \"" + result + "\""); 103 Console.WriteLine(" Expected: contains \"" + expected + "\""); 104 } 105 } 106 107 Console.WriteLine("\n=== Results: " + pass + "/" + (pass + fail) + " passed (" + 108 (100 * pass / (pass + fail)) + "%) ==="); 109 110 if (fail > 0) 111 { 112 Console.WriteLine("\nFailed tests need forcedFix entries or algorithm fixes."); 113 } 114 } 115}