From 7fd738b7d2d7a509ccc3999683f0cde2cbe61641 Mon Sep 17 00:00:00 2001 From: Mark <112826355+NemirovichMark@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:12:40 +0300 Subject: [PATCH 01/10] Create dotnet-desktop.yml --- .github/workflows/dotnet-desktop.yml | 127 +++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 .github/workflows/dotnet-desktop.yml diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml new file mode 100644 index 0000000..f49809b --- /dev/null +++ b/.github/workflows/dotnet-desktop.yml @@ -0,0 +1,127 @@ +name: .NET Tests & Auto-commit + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches-ignore: [main] + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + issues: read + +jobs: + + check-target: + runs-on: ubuntu-latest + outputs: + pr_valid: ${{ steps.check.outputs.pr_valid }} + steps: + - name: 🚫 Проверка PR в main + id: check + shell: bash + run: | + PR_BASE="${{ github.event.pull_request.base.ref }}" + echo "Base branch: $PR_BASE" + if [ "$PR_BASE" = "main" ]; then + echo "❌ Нельзя отправлять работу в main ветку." + echo "pr_valid=false" >> $GITHUB_OUTPUT + exit 1 + else + echo "✅ PR направлен в '$PR_BASE', можно запускать тесты." + echo "pr_valid=true" >> $GITHUB_OUTPUT + fi + + tests: + name: Run test + runs-on: windows-latest + needs: check-target + if: | + (github.event_name == 'pull_request' && needs.check-target.outputs.pr_valid == 'true') || + github.event_name == 'push' || + github.event_name == 'workflow_dispatch' + strategy: + matrix: + configuration: [Debug] + + steps: + - name: Checkout code safely + uses: actions/checkout@v4 + with: + repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + ref: ${{ github.event.pull_request.head.sha || github.ref }} + fetch-depth: 0 + + - name: Install .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: Setup MSBuild.exe + uses: microsoft/setup-msbuild@v2 + + - name: Restore + run: dotnet restore Lab9/Lab9.sln + + - name: Build + run: dotnet build Lab9/Lab9.sln --configuration ${{ matrix.configuration }} --no-restore + + - name: Run tests (league cascade) + id: cascade + shell: pwsh + env: + CFG: ${{ matrix.configuration }} + run: | + $proj = "Lab9test/Lab9test.csproj" + Write-Host "Building test project..." + dotnet build $proj -c $Env:CFG + + $dll = Join-Path $PWD "Lab9test\bin\$Env:CFG\net8.0\Lab9test.dll" + if (-not (Test-Path $dll)) { + Write-Error "DLL не найдена: $dll" + exit 1 + } + + $leagues = @{ + "Purple" = @("Task1","Task2","Task3","Task4","Task5") + "Blue" = @("Task1","Task2","Task3","Task4","Task5") + "Green" = @("Task1","Task2","Task3","Task4","Task5") + "White" = @("Task1","Task2","Task3","Task4","Task5") + } + + foreach ($leagueName in $leagues.Keys) { + Write-Host "Лига: $leagueName" + $allPassed = $true + + foreach ($cls in $leagues[$leagueName]) { + $filter = "FullyQualifiedName~$leagueName.$cls" + Write-Host "Запуск тестов класса: $leagueName.$cls" + dotnet vstest $dll --TestCaseFilter:"$filter" --Logger:"trx;LogFileName=test-$leagueName-$cls.trx" + + if ($LASTEXITCODE -ne 0) { + Write-Host "❌ Тест $leagueName.$cls не прошёл." + $allPassed = $false + } else { + Write-Host "✅ Тест $leagueName.$cls прошёл." + } + } + + if ($allPassed) { + Write-Host "✅ Все тесты лиги $leagueName прошли! Останавливаем каскад." + exit 0 + } else { + Write-Host "⚠️ Не все тесты лиги $leagueName прошли. Переходим к следующей лиге." + } + } + + Write-Host "❌ Ни одна лига полностью не прошла. Проверьте корректность загруженных файлов." + exit 1 + + - name: Upload TRX + if: always() + uses: actions/upload-artifact@v4 + with: + name: trx-${{ matrix.configuration }} + path: '**/test-*.trx' From e0a315a4d9e0adee45ebd1ff3e69da5f562b7f46 Mon Sep 17 00:00:00 2001 From: Kantsler Date: Mon, 6 Apr 2026 10:26:25 +0300 Subject: [PATCH 02/10] Add files via upload --- Classwork 06.04/Classwork 06.04.sln | 25 +++ Classwork 06.04/Classwork 06.04/App.config | 6 + .../Classwork 06.04/Classwork 06.04.csproj | 53 ++++++ Classwork 06.04/Classwork 06.04/Program.cs | 152 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 33 ++++ .../bin/Debug/Classwork 06.04.exe | Bin 0 -> 8192 bytes .../bin/Debug/Classwork 06.04.exe.config | 6 + .../bin/Debug/Classwork 06.04.pdb | Bin 0 -> 26112 bytes ...swork 06.04.csproj.AssemblyReference.cache | Bin 0 -> 4079 bytes ...swork 06.04.csproj.CoreCompileInputs.cache | 1 + ...lasswork 06.04.csproj.FileListAbsolute.txt | 8 + .../obj/Debug/Classwork 06.04.exe | Bin 0 -> 8192 bytes .../obj/Debug/Classwork 06.04.exe.config | 6 + .../obj/Debug/Classwork 06.04.pdb | Bin 0 -> 26112 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 1830 bytes 15 files changed, 290 insertions(+) create mode 100644 Classwork 06.04/Classwork 06.04.sln create mode 100644 Classwork 06.04/Classwork 06.04/App.config create mode 100644 Classwork 06.04/Classwork 06.04/Classwork 06.04.csproj create mode 100644 Classwork 06.04/Classwork 06.04/Program.cs create mode 100644 Classwork 06.04/Classwork 06.04/Properties/AssemblyInfo.cs create mode 100644 Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.exe create mode 100644 Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.exe.config create mode 100644 Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.pdb create mode 100644 Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.AssemblyReference.cache create mode 100644 Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.CoreCompileInputs.cache create mode 100644 Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.FileListAbsolute.txt create mode 100644 Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.exe create mode 100644 Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.exe.config create mode 100644 Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.pdb create mode 100644 Classwork 06.04/Classwork 06.04/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache diff --git a/Classwork 06.04/Classwork 06.04.sln b/Classwork 06.04/Classwork 06.04.sln new file mode 100644 index 0000000..814b0be --- /dev/null +++ b/Classwork 06.04/Classwork 06.04.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.37012.4 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Classwork 06.04", "Classwork 06.04\Classwork 06.04.csproj", "{6C7809F8-8EF6-4E0C-8332-879DC02ED08F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6C7809F8-8EF6-4E0C-8332-879DC02ED08F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C7809F8-8EF6-4E0C-8332-879DC02ED08F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C7809F8-8EF6-4E0C-8332-879DC02ED08F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C7809F8-8EF6-4E0C-8332-879DC02ED08F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {7F328878-78D9-4A84-8D60-361827FC6980} + EndGlobalSection +EndGlobal diff --git a/Classwork 06.04/Classwork 06.04/App.config b/Classwork 06.04/Classwork 06.04/App.config new file mode 100644 index 0000000..5754728 --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Classwork 06.04/Classwork 06.04/Classwork 06.04.csproj b/Classwork 06.04/Classwork 06.04/Classwork 06.04.csproj new file mode 100644 index 0000000..4aad1fb --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/Classwork 06.04.csproj @@ -0,0 +1,53 @@ + + + + + Debug + AnyCPU + {6C7809F8-8EF6-4E0C-8332-879DC02ED08F} + Exe + Classwork_06._04 + Classwork 06.04 + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Classwork 06.04/Classwork 06.04/Program.cs b/Classwork 06.04/Classwork 06.04/Program.cs new file mode 100644 index 0000000..3f16d00 --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/Program.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Classwork_06._04 +{ + internal class Program + { + static void Main(string[] args) + { + string s = "Hello, World!"; + Console.WriteLine(s); + Console.WriteLine(s[7]); + + var students = new Student[] + { + new Student("a", "A", new int[,] { { 1, 2, 3 }, { 4, 5, 6 } }), + new Student("B", "b", new int[,] { { 2, 4, 3 }, { 4, 1, 1 } }), + new Student("C", "C", new int[,] { { 5, 2, 1 }, { 2, 4, 4 } }), + }; + + foreach (var student in students) + { + Console.WriteLine(student[0]); + } + + string str = "I am a good student"; + string str2 = "No! I am!"; + str = "No! I am!"; + str2 = str; + + Console.WriteLine(str2); + //str2 = str2.Substring(2, 5); + //str2 = str2.Replace("am", "sAS", StringComparison.InvariantCultureIgnoreCase); + //int index = str2.IndexOf("I"); + + var strings = str.Split(new char[] { '.', '?', '!'}, StringSplitOptions.RemoveEmptyEntries); + Console.WriteLine(str2); + + foreach (var c in "Решения должны находиться в файле с названием, соответствующем его номеру внутри папки\r\nс названием вашей лиги. Решение номеров необходимо писать внутри класса с соответствующим\r\nномером (Task1 – Task4). Автотестами будет сравниваться состояние Ваших объектов с выходными\r\nданными.") + { + bool isLetter = Char.IsLetter(c); + bool isDigit = Char.IsDigit(c); + bool isSpaceTabNewLine = Char.IsSeparator(c); + bool isPunctuation = Char.IsPunctuation(c); + } + + string output = $"New \n text \r on \r\n each{Environment.NewLine} line!"; + + StringBuilder sb = new StringBuilder(); + sb.Append("sdadsdad"); + sb.Remove(1, 5); + //преобразование динамического массива символово в строку + sb.ToString(); + + + //Regex regex = new Regex("[/d+]"); + //var result = regex.Match("Решения должны находиться в файле с названием, соответствующем его номеру внутри папки\r\nс названием вашей лиги. Решение номеров необходимо писать внутри класса с соответствующим\r\nномером (Task1 – Task4). Автотестами будет сравниваться состояние Ваших объектов с выходными\r\nданными."); + //foreach (var match in result.Value) + //{ + // Console.WriteLine(match); + //} + } + } + + public class Student + { + string _name; + string _surname; + + int[,] _marks; + + public int[,] Marks => _marks; + public double[] AverageMarks + { + get + { + if ( _marks == null || _marks.GetLength(0) == 0 || _marks.GetLength(1) == 0) + { + return null; + } + var average = new double[_marks.GetLength(0)]; + for (int i = 0; i < average.Length; i++) + { + for (int j = 0; j<_marks.GetLength(1); j++) + { + average[i] += (double)_marks[i, j] / _marks.GetLength(1); + } + } + return average; + } + } + + public char this[int idx] + { + get { return _name[idx]; } + } + + //public double this[int idx] + //{ + // get { return AverageMarks[idx]; } + //} + + public int this[int i, int j] + { + get { return _marks[i, j]; } + } + + public Student(string name, string surname, int[,] marks = null) + { + _name = name; + _surname = surname; + if (_marks != null) + { + _marks = (int[,])marks.Clone(); + } + } + + public override string ToString() + { + string output = _name + " " + _surname; + for (int i = 0; i < _marks.GetLength(0); i++) + { + for (int j = 0; j<_marks.GetLength(1); j++) + { + output += _marks[i, j] + " "; + } + output = output.TrimEnd(); + output += Environment.NewLine; + } + return output; + + StringBuilder sb = new StringBuilder(_name); + sb.Append(" "); + sb.AppendLine(_surname); + for (int i = 0; i < _marks.GetLength(0); i++) + { + for (int j = 0; j < _marks.GetLength(1); j++) + { + sb.Append(_marks[i, j]).Append(" "); + } + sb = sb.Remove(sb.Length-1, 1); + sb.AppendLine(); + } + + + } + } +} diff --git a/Classwork 06.04/Classwork 06.04/Properties/AssemblyInfo.cs b/Classwork 06.04/Classwork 06.04/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d21da1d --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные с этой сборкой. +[assembly: AssemblyTitle("Classwork 06.04")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Classwork 06.04")] +[assembly: AssemblyCopyright("Copyright © 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// из модели COM задайте для атрибута ComVisible этого типа значение true. +[assembly: ComVisible(false)] + +// Следующий GUID представляет идентификатор typelib, если этот проект доступен из модели COM +[assembly: Guid("6c7809f8-8ef6-4e0c-8332-879dc02ed08f")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Номер редакции +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.exe b/Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.exe new file mode 100644 index 0000000000000000000000000000000000000000..0931e0ad6d0ff7a3e7886c4d2e4582432fe19c54 GIT binary patch literal 8192 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 KU;gh!;C}$J(@b9g literal 0 HcmV?d00001 diff --git a/Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.exe.config b/Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.exe.config new file mode 100644 index 0000000..5754728 --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.pdb b/Classwork 06.04/Classwork 06.04/bin/Debug/Classwork 06.04.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5001d387b8da182d45dc60b6694efa2da1b46b96 GIT binary patch literal 26112 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

hBFIh`Zh@&6 z-o$Rvk1Sw+|J#oyvj?j1theL;NrqFcIUHw933*L%G3ry)=tbwM|DO%dvjRtMzeqg) zdA{>Jvg7}s-<0zCx8py$z0V$_>EH36o~$@K{@)X;U0Q8a93XrzOO;ID0Izs<{6Cd} z`cWDE6g&Rg^MCT3RutBb|MsINsc)&m`0sP2C-33&|LzO9YybAd*7?tE%UXYY#=qaR z!~zb|9%do%vacQ}5t&-m{Q&@2$Y52T-A#(%HEJ>$RhEg02iM4NHr^Ns&9 nNIo6Js5k$;fF1vZ5qgmHe+AfshISL%0=5Ng3)mLu(-!zIW9oAV literal 0 HcmV?d00001 diff --git a/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.AssemblyReference.cache b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..25132c674d928c0ebec4ea1e2dec947dde6c8e81 GIT binary patch literal 4079 zcmcInO>fjN5X}gvwp#?^L!gy<*dtu5LMsZrR4Cnw1FTR}Ar6r$*X!(BO`NUmUAn#W z%$YyJjbG9`zk)M%ND3jjM499e#c?#Ad2eRkWDV9m&jaf3g&$QqRWunMikR!+vy0cS zo`**~;)+Yghi|p!$!RRO4nGK{Qk_O7Jhb2QFR3~U$#``9ceUIhyX0k!RJwtzeK&0U$QL`)4F{$63RpIiK##EtBfJ#*H|D9^e?**Z(!3wd4xw@Vi^xN*P% zSo;HV3xEMObE1wG(ujnUfGa^`aoIct%G3dD+$5FaEnKYTz_QC6IG~0ScMG@~T^KI4 zEd^bZ5w70QGNQoB9ozydoRlb>@l#~tL?^`ENCNSL8CCPHxx%PAB!~g-R+~9bT*p|)O z8N(j{p5*Qoy5dtd6LQ)p|eEjIvrNV+>m$1 z)U`X**$|_MklI}pVb*1fa^qmNL!s(E2DlINWX>j+;5=?Oa^wFDR9Wj(SlrZ7LmTP< Zk3k!ju%PNdVJzTmp@dnrXxA0me*?;F-)8^- literal 0 HcmV?d00001 diff --git a/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.CoreCompileInputs.cache b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..fe38182 --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +137ddb1975586287657f37337b64d051167bb6a147915d9fb5b8eb94b1093509 diff --git a/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.FileListAbsolute.txt b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..7c19781 --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\bin\Debug\Classwork 06.04.exe.config +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\bin\Debug\Classwork 06.04.exe +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\bin\Debug\Classwork 06.04.pdb +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\obj\Debug\Classwork 06.04.csproj.AssemblyReference.cache +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\obj\Debug\Classwork 06.04.csproj.CoreCompileInputs.cache +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\obj\Debug\Classwork 06.04.exe +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\obj\Debug\Classwork 06.04.pdb +C:\Users\Lenovo\source\repos\Classwork 06.04\Classwork 06.04\obj\Debug\Classwork 06.04.exe.config diff --git a/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.exe b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.exe new file mode 100644 index 0000000000000000000000000000000000000000..0931e0ad6d0ff7a3e7886c4d2e4582432fe19c54 GIT binary patch literal 8192 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 KU;gh!;C}$J(@b9g literal 0 HcmV?d00001 diff --git a/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.exe.config b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.exe.config new file mode 100644 index 0000000..5754728 --- /dev/null +++ b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.pdb b/Classwork 06.04/Classwork 06.04/obj/Debug/Classwork 06.04.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5001d387b8da182d45dc60b6694efa2da1b46b96 GIT binary patch literal 26112 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

hBFIh`Zh@&6 z-o$Rvk1Sw+|J#oyvj?j1theL;NrqFcIUHw933*L%G3ry)=tbwM|DO%dvjRtMzeqg) zdA{>Jvg7}s-<0zCx8py$z0V$_>EH36o~$@K{@)X;U0Q8a93XrzOO;ID0Izs<{6Cd} z`cWDE6g&Rg^MCT3RutBb|MsINsc)&m`0sP2C-33&|LzO9YybAd*7?tE%UXYY#=qaR z!~zb|9%do%vacQ}5t&-m{Q&@2$Y52T-A#(%HEJ>$RhEg02iM4NHr^Ns&9 nNIo6Js5k$;fF1vZ5qgmHe+AfshISL%0=5Ng3)mLu(-!zIW9oAV literal 0 HcmV?d00001 diff --git a/Classwork 06.04/Classwork 06.04/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Classwork 06.04/Classwork 06.04/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..98f9bbd41eed312d8bef4711ebcef3d9f53341dd GIT binary patch literal 1830 zcmcJQ-;2~R5XY-7`*7fk2#Wa7#}k&YddH~;J{;}VJ2;nPcTaqXNSe-eqis?%*DNUuSvjiRX5 zngi8PDWp-s5VuPI3dd(;eEP@yqN)g2aw&3Q?c8XUYgUGdC;-Fb-G{R`bOuY%AUT8= zh)|}50Hj|8*9z6r(8TTs2cTp+SsZ4YQ}Uj?J8UG;e8qI-d}m%rC32+;kvc-=g)rZv zfs#Z@gM(~*LSkkZal;(UWM@F4P!hez)?#gJKYYe!?XP^=pMoKm#xIG$lnfRPkZpl-nU+Ya+U|ly2ChBcMa|1WgRh@iHsSz7lC~%5zVvuQb=>d%qr2U zyt2omc~vi%&cXCj5DN|5D7|mudIq^bqxa`?s~uaW;UEwX^<&iO$Ee4tBC{Gd*)>n= z8QVJg)Cy1YZ|au{Nn=RYIc;P8FaA|FIe)LmD*buyQ4A<@xez7H09CQ+|9mgVNI2sw zcx-+5QxV_2)LFtf%WMyM{h(otzS{I!jr-Ik{<&KW`x*+{ZZhoF1|^E($i9!s$@t{$ J$F5H8cn7N0fj|HN literal 0 HcmV?d00001 From ae0396bfea856eea063804d9125fccb0f27de720 Mon Sep 17 00:00:00 2001 From: Mark <112826355+NemirovichMark@users.noreply.github.com> Date: Fri, 10 Apr 2026 15:44:18 +0300 Subject: [PATCH 03/10] Update dotnet-desktop version.yml --- .github/workflows/dotnet-desktop.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml index f49809b..2e34a78 100644 --- a/.github/workflows/dotnet-desktop.yml +++ b/.github/workflows/dotnet-desktop.yml @@ -57,7 +57,9 @@ jobs: - name: Install .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.x + dotnet-version: | + 8.0.x + 9.0.x - name: Setup MSBuild.exe uses: microsoft/setup-msbuild@v2 From 1c8e053d827d16742edeaa64024d652b0f958d13 Mon Sep 17 00:00:00 2001 From: Mark <112826355+NemirovichMark@users.noreply.github.com> Date: Fri, 10 Apr 2026 16:09:24 +0300 Subject: [PATCH 04/10] Update dotnet-desktop.yml --- .github/workflows/dotnet-desktop.yml | 54 +++++++++++++++++----------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml index 2e34a78..fff9e2e 100644 --- a/.github/workflows/dotnet-desktop.yml +++ b/.github/workflows/dotnet-desktop.yml @@ -76,49 +76,63 @@ jobs: env: CFG: ${{ matrix.configuration }} run: | - $proj = "Lab9test/Lab9test.csproj" + $testProjectPath = "Lab9Test/Lab9Test.csproj" + $testDir = "Lab9Test" + Write-Host "Building test project..." - dotnet build $proj -c $Env:CFG - - $dll = Join-Path $PWD "Lab9test\bin\$Env:CFG\net8.0\Lab9test.dll" + dotnet build $testProjectPath -c $Env:CFG --no-restore + + $tfm = (dotnet list $testProjectPath framework --framework net9.0 | Select-Object -Last 1).Trim() + if (-not $tfm) { $tfm = "net9.0" } + + $dll = Join-Path $PWD "$testDir\bin\$Env:CFG\$tfm\Lab9Test.dll" + + Write-Host "Ожидаемая DLL: $dll" + if (-not (Test-Path $dll)) { Write-Error "DLL не найдена: $dll" + Write-Host "`nСодержимое bin папки:" + Get-ChildItem "$testDir\bin" -Recurse -ErrorAction SilentlyContinue | + Select-Object FullName | Out-Host exit 1 } - + + Write-Host "DLL успешно найдена`n" + $leagues = @{ - "Purple" = @("Task1","Task2","Task3","Task4","Task5") - "Blue" = @("Task1","Task2","Task3","Task4","Task5") - "Green" = @("Task1","Task2","Task3","Task4","Task5") - "White" = @("Task1","Task2","Task3","Task4","Task5") + "Purple" = @("Task1","Task2","Task3","Task4") + "Blue" = @("Task1","Task2","Task3","Task4") + "Green" = @("Task1","Task2","Task3","Task4") + "White" = @("Task1","Task2","Task3","Task4") } - + foreach ($leagueName in $leagues.Keys) { Write-Host "Лига: $leagueName" $allPassed = $true - + foreach ($cls in $leagues[$leagueName]) { $filter = "FullyQualifiedName~$leagueName.$cls" - Write-Host "Запуск тестов класса: $leagueName.$cls" + Write-Host " Запуск: $leagueName.$cls" + dotnet vstest $dll --TestCaseFilter:"$filter" --Logger:"trx;LogFileName=test-$leagueName-$cls.trx" - + if ($LASTEXITCODE -ne 0) { - Write-Host "❌ Тест $leagueName.$cls не прошёл." + Write-Host " ❌ $leagueName.$cls не прошёл" -ForegroundColor Red $allPassed = $false } else { - Write-Host "✅ Тест $leagueName.$cls прошёл." + Write-Host " ✅ $leagueName.$cls прошёл" -ForegroundColor Green } } - + if ($allPassed) { - Write-Host "✅ Все тесты лиги $leagueName прошли! Останавливаем каскад." + Write-Host "✅ Все тесты лиги $leagueName прошли! Останавливаем каскад." -ForegroundColor Green exit 0 } else { - Write-Host "⚠️ Не все тесты лиги $leagueName прошли. Переходим к следующей лиге." + Write-Host "⚠️ Лига $leagueName не прошла полностью. Переходим к следующей..." -ForegroundColor Yellow } } - - Write-Host "❌ Ни одна лига полностью не прошла. Проверьте корректность загруженных файлов." + + Write-Host "❌ Ни одна лига полностью не прошла." -ForegroundColor Red exit 1 - name: Upload TRX From 08d8040230d71634b233fc880e2b75f825eff579 Mon Sep 17 00:00:00 2001 From: Kantsler Date: Mon, 13 Apr 2026 22:37:42 +0300 Subject: [PATCH 05/10] Add files via upload --- Lab9/Purple/Purple.cs | 22 ++++++- Lab9/Purple/Task1.cs | 81 +++++++++++++++++++++++++ Lab9/Purple/Task2.cs | 136 ++++++++++++++++++++++++++++++++++++++++++ Lab9/Purple/Task3.cs | 118 ++++++++++++++++++++++++++++++++++++ Lab9/Purple/Task4.cs | 53 ++++++++++++++++ 5 files changed, 408 insertions(+), 2 deletions(-) create mode 100644 Lab9/Purple/Task1.cs create mode 100644 Lab9/Purple/Task2.cs create mode 100644 Lab9/Purple/Task3.cs create mode 100644 Lab9/Purple/Task4.cs diff --git a/Lab9/Purple/Purple.cs b/Lab9/Purple/Purple.cs index c00ca3e..448eeca 100644 --- a/Lab9/Purple/Purple.cs +++ b/Lab9/Purple/Purple.cs @@ -1,3 +1,21 @@ -namespace Lab9.Purple -{ +namespace Lab9.Purple +{ + public abstract class Purple + { + private string _input; + public string Input => _input; + + protected Purple(string input) + { + _input = input; + } + + public abstract void Review(); + + public virtual void ChangeText(string text) + { + _input = text; + Review(); + } + } } \ No newline at end of file diff --git a/Lab9/Purple/Task1.cs b/Lab9/Purple/Task1.cs new file mode 100644 index 0000000..8e392f4 --- /dev/null +++ b/Lab9/Purple/Task1.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Lab9.Purple +{ + public class Task1 : Purple + { + private string _output; + public Task1(string input) : base(input) + { + _output = ""; + } + public string Output => _output; + + internal StringBuilder Reverse(StringBuilder word) + { + StringBuilder result = new StringBuilder(); + for (int i = word.Length - 1; i>=0; i--) + { + if (word[i] == ')') result.Append('('); + else if (word[i] == '(') result.Append(')'); + else result.Append(word[i]); + } + return result; + } + public override void Review() + { + StringBuilder result = new StringBuilder(); + + string[] temp = Input.Split(" "); + for (int i = 0; i < temp.Length; i++) + { + StringBuilder word = new StringBuilder(); + word.Append(temp[i]); + if (Char.IsDigit(word[0])) + { + for (int j = 0; j= 0; j--) + { + if (!Char.IsPunctuation(word[j]) || (Char.IsPunctuation(word[j]) && word[j] == '-') || (Char.IsPunctuation(word[j]) && word[j].ToString() == "'")) + { + result.Append(word[j]); + } + } + result.Append(' '); + } + } + + result.Remove(result.Length - 1, 1); + for (int i = 0; i< Input.Length; i++) + { + if (Char.IsPunctuation(Input[i]) && Input[i] != '-' && Input[i].ToString() != "'") + { + result.Insert(i, Input[i]); + } + } + _output = result.ToString(); + } + + public override string ToString() + { + return _output; + } + + } +} diff --git a/Lab9/Purple/Task2.cs b/Lab9/Purple/Task2.cs new file mode 100644 index 0000000..e2bcdab --- /dev/null +++ b/Lab9/Purple/Task2.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Lab9.Purple +{ + public class Task2 : Purple + { + private string[] _output; + + public string[] Output => _output; + public Task2(string input) : base(input) + { + _output = new string[0]; + } + + public override void Review() + { + if (string.IsNullOrWhiteSpace(Input)) + { + _output = new string[0]; + return; + } + + int width = 50; + + string[] words = Input.Split(' '); + + string[] tempLines = new string[words.Length]; + int lineCount = 0; + + int i = 0; + + while (i < words.Length) + { + string[] lineWords = new string[words.Length]; + int wordCount = 0; + int currentLength = 0; + + while (i < words.Length) + { + string word = words[i].Trim(); + int newLength; + + if (wordCount == 0) + { + newLength = word.Length; + } + else + { + newLength = currentLength + 1 + word.Length; + } + + if (newLength <= width) + { + lineWords[wordCount] = word; + wordCount++; + currentLength = newLength; + i++; + } + else + { + break; + } + } + + string line = ""; + if (wordCount == 1) + { + line = lineWords[0]; + } + else + { + int lettersCount = 0; + for (int j = 0; j < wordCount; j++) + { + lettersCount = lettersCount + lineWords[j].Length; + } + + int spacesCount = width - lettersCount; + int gaps = wordCount - 1; + + int baseSpace = spacesCount / gaps; + int extraSpaces = spacesCount % gaps; + + StringBuilder sb = new StringBuilder(); + + for (int j = 0; j < wordCount; j++) + { + sb.Append(lineWords[j]); + + if (j < gaps) + { + int spaces = baseSpace; + + if (j < extraSpaces) + { + spaces++; + } + + sb.Append(' ', spaces); + } + } + + line = sb.ToString(); + } + + tempLines[lineCount] = line; + lineCount++; + } + + _output = new string[lineCount]; + for (int j = 0; j < lineCount; j++) + { + _output[j] = tempLines[j]; + } + } + public override string ToString() + { + if (_output == null || _output.Length == 0) + return ""; + + string result = _output[0]; + + for (int i = 1; i < _output.Length; i++) + { + result += Environment.NewLine + _output[i]; + } + + return result; + } + + } +} diff --git a/Lab9/Purple/Task3.cs b/Lab9/Purple/Task3.cs new file mode 100644 index 0000000..897d37d --- /dev/null +++ b/Lab9/Purple/Task3.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Lab9.Purple +{ + public class Task3 : Purple + { + private string _output; + private (string, char)[] _codes; + public string Output => _output; + public (string, char)[] Codes => _codes; + public Task3(string input) : base(input) + { + _output = ""; + _codes = new (string, char)[5]; + } + + public override void Review() + { + string[] pairs = new string[0]; + int[] firstIndex = new int[0]; + + _output = Input; + + for (int i = 1; i < Input.Length; i++) + { + if (Char.IsLetter(Input[i - 1]) && Char.IsLetter(Input[i])) + { + string pair = Input[i - 1].ToString() + Input[i].ToString(); + + if (!pairs.Contains(pair)) + { + Array.Resize(ref pairs, pairs.Length + 1); + pairs[^1] = pair; + + Array.Resize(ref firstIndex, firstIndex.Length + 1); + firstIndex[^1] = i - 1; + } + } + } + + int[] pairsCount = new int[pairs.Length]; + + for (int i = 0; i < pairs.Length; i++) + { + int count = 0; + + for (int j = 0; j < Input.Length - 1; j++) + { + string sub = Input.Substring(j, 2); + + if (sub == pairs[i]) + { + count++; + } + } + + pairsCount[i] = count; + } + + for (int i = 0; i < pairs.Length - 1; i++) + { + for (int j = i + 1; j < pairs.Length; j++) + { + if (pairsCount[i] < pairsCount[j] || (pairsCount[i] == pairsCount[j] && firstIndex[i] > firstIndex[j])) + { + (pairsCount[i], pairsCount[j]) = (pairsCount[j], pairsCount[i]); + (pairs[i], pairs[j]) = (pairs[j], pairs[i]); + (firstIndex[i], firstIndex[j]) = (firstIndex[j], firstIndex[i]); + } + } + } + + int limit = pairs.Length; + if (limit > 5) + { + limit = 5; + } + + string[] topPairs = new string[limit]; + + for (int i = 0; i < limit; i++) + { + topPairs[i] = pairs[i]; + } + + string[] tempCodes = new string[limit]; + + for (int i = 0; i < limit; i++) + { + tempCodes[i] = "#" + i + "#"; + _output = _output.Replace(topPairs[i], tempCodes[i]); + } + + int symbolIndex = 32; + + for (int i = 0; i < limit; i++) + { + while (Input.Contains(((char)symbolIndex).ToString())) + { + symbolIndex++; + } + + _output = _output.Replace(tempCodes[i], ((char)symbolIndex).ToString()); + _codes[i] = (pairs[i], (char)symbolIndex); + symbolIndex++; + } + } + + public override string ToString() + { + return _output; + } + } +} diff --git a/Lab9/Purple/Task4.cs b/Lab9/Purple/Task4.cs new file mode 100644 index 0000000..dcea5d9 --- /dev/null +++ b/Lab9/Purple/Task4.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Lab9.Purple +{ + public class Task4 : Purple + { + private string _output; + private (string, char)[] _codes; + public string Output => _output; + public (string, char)[] Codes => _codes; + public Task4(string input, (string, char)[] codes) : base(input) + { + _output = ""; + _codes = codes; + } + + public override void Review() + { + _output = Input; + + for (int i = 0; i < Codes.Length; i++) + { + int j = 0; + + while (j < _output.Length) + { + if (_output[j] == Codes[i].Item2) + { + string replacement = Codes[i].Item1; + + _output = _output.Remove(j, 1); + _output = _output.Insert(j, replacement); + + j += replacement.Length; + } + else + { + j++; + } + } + } + } + + public override string ToString() + { + return _output; + } + } +} From e43cf579436fb4554c74c8138d9944d06b891e6c Mon Sep 17 00:00:00 2001 From: Kantsler Date: Mon, 13 Apr 2026 22:40:52 +0300 Subject: [PATCH 06/10] Update Task1.cs --- Lab9Test/Purple/Task1.cs | 354 +++++++++++++++++++-------------------- 1 file changed, 177 insertions(+), 177 deletions(-) diff --git a/Lab9Test/Purple/Task1.cs b/Lab9Test/Purple/Task1.cs index 53908f0..c0bcf40 100644 --- a/Lab9Test/Purple/Task1.cs +++ b/Lab9Test/Purple/Task1.cs @@ -1,177 +1,177 @@ -//using System.Text.Json; -//using System.Linq; - -//namespace Lab9Test.Purple -//{ -// [TestClass] -// public sealed class Task1 -// { -// private Lab9.Purple.Task1 _student; - -// private string[] _input; -// private string[] _output; - -// [TestInitialize] -// public void LoadData() -// { -// var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; -// var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); - -// var json = JsonSerializer.Deserialize( -// File.ReadAllText(file)); - -// _input = json.GetProperty("Purple1") -// .GetProperty("input") -// .Deserialize(); - -// _output = json.GetProperty("Purple1") -// .GetProperty("output") -// .Deserialize(); -// } - -// [TestMethod] -// public void Test_00_OOP() -// { -// var type = typeof(Lab9.Purple.Task1); - -// Assert.IsTrue(type.IsClass, "Task1 must be a class"); -// Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple)), -// "Task1 must inherit from Purple"); - -// Assert.IsNotNull( -// type.GetConstructor(new[] { typeof(string) }), -// "Constructor Task1(string input) not found" -// ); - -// Assert.IsNotNull(type.GetMethod("Review"), -// "Method Review() not found"); - -// Assert.IsNotNull(type.GetMethod("ToString"), -// "Method ToString() not found"); -// } - -// [TestMethod] -// public void Test_01_Input() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); - -// Assert.AreEqual(_input[i], _student.Input, -// $"Input stored incorrectly\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_02_Output() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i], _student.Output, -// $"Output mismatch\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_03_ToString() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i], _student.ToString(), -// $"ToString mismatch\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_04_ChangeText() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// var oldOutput = _student.Output; - -// var newText = _input[(i + 1) % _input.Length]; -// _student.ChangeText(newText); - -// Assert.AreEqual(newText, _student.Input, -// $"ChangeText failed\nTest: {i}"); - -// Assert.AreNotEqual(oldOutput, _student.Output, -// $"Output not updated after ChangeText\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_05_TypeSafety() -// { -// Init(0); -// _student.Review(); - -// Assert.IsInstanceOfType(_student.Output, typeof(string), -// $"Output must be string\nActual: {_student.Output.GetType()}"); -// } - -// [TestMethod] -// public void Test_06_Length() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i].Length, _student.ToString().Length, -// $"Length mismatch\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_07_PunctuationPreserved() -// { -// Init(0); -// _student.Review(); - -// var input = _student.Input; -// var output = _student.Output; - -// var inputPunct = new string(input.Where(c => !char.IsLetterOrDigit(c) && c != ' ').ToArray()); -// var outputPunct = new string(output.Where(c => !char.IsLetterOrDigit(c) && c != ' ').ToArray()); - -// Assert.AreEqual(inputPunct, outputPunct, -// "Punctuation must stay in the same places"); -// } - -// [TestMethod] -// public void Test_08_WordsReversed() -// { -// Init(0); -// _student.Review(); - -// var wordsIn = _student.Input.Split(' ', StringSplitOptions.RemoveEmptyEntries); -// var wordsOut = _student.Output.Split(' ', StringSplitOptions.RemoveEmptyEntries); - -// for (int i = 0; i < Math.Min(wordsIn.Length, wordsOut.Length); i++) -// { -// var cleanIn = new string(wordsIn[i].Where(char.IsLetter).ToArray()); -// var cleanOut = new string(wordsOut[i].Where(char.IsLetter).ToArray()); - -// var reversed = new string(cleanIn.Reverse().ToArray()); - -// Assert.AreEqual(reversed, cleanOut, -// $"Word not reversed\nIndex: {i}\nExpected: {reversed}\nActual: {cleanOut}"); -// } -// } - -// private void Init(int i) -// { -// _student = new Lab9.Purple.Task1(_input[i]); -// } -// } -//} \ No newline at end of file +using System.Text.Json; +using System.Linq; + +namespace Lab9Test.Purple +{ + [TestClass] + public sealed class Task1 + { + private Lab9.Purple.Task1 _student; + + private string[] _input; + private string[] _output; + + [TestInitialize] + public void LoadData() + { + var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; + var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); + + var json = JsonSerializer.Deserialize( + File.ReadAllText(file)); + + _input = json.GetProperty("Purple1") + .GetProperty("input") + .Deserialize(); + + _output = json.GetProperty("Purple1") + .GetProperty("output") + .Deserialize(); + } + + [TestMethod] + public void Test_00_OOP() + { + var type = typeof(Lab9.Purple.Task1); + + Assert.IsTrue(type.IsClass, "Task1 must be a class"); + Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple)), + "Task1 must inherit from Purple"); + + Assert.IsNotNull( + type.GetConstructor(new[] { typeof(string) }), + "Constructor Task1(string input) not found" + ); + + Assert.IsNotNull(type.GetMethod("Review"), + "Method Review() not found"); + + Assert.IsNotNull(type.GetMethod("ToString"), + "Method ToString() not found"); + } + + [TestMethod] + public void Test_01_Input() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + + Assert.AreEqual(_input[i], _student.Input, + $"Input stored incorrectly\nTest: {i}"); + } + } + + [TestMethod] + public void Test_02_Output() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i], _student.Output, + $"Output mismatch\nTest: {i}"); + } + } + + [TestMethod] + public void Test_03_ToString() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i], _student.ToString(), + $"ToString mismatch\nTest: {i}"); + } + } + + [TestMethod] + public void Test_04_ChangeText() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + var oldOutput = _student.Output; + + var newText = _input[(i + 1) % _input.Length]; + _student.ChangeText(newText); + + Assert.AreEqual(newText, _student.Input, + $"ChangeText failed\nTest: {i}"); + + Assert.AreNotEqual(oldOutput, _student.Output, + $"Output not updated after ChangeText\nTest: {i}"); + } + } + + [TestMethod] + public void Test_05_TypeSafety() + { + Init(0); + _student.Review(); + + Assert.IsInstanceOfType(_student.Output, typeof(string), + $"Output must be string\nActual: {_student.Output.GetType()}"); + } + + [TestMethod] + public void Test_06_Length() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i].Length, _student.ToString().Length, + $"Length mismatch\nTest: {i}"); + } + } + + [TestMethod] + public void Test_07_PunctuationPreserved() + { + Init(0); + _student.Review(); + + var input = _student.Input; + var output = _student.Output; + + var inputPunct = new string(input.Where(c => !char.IsLetterOrDigit(c) && c != ' ').ToArray()); + var outputPunct = new string(output.Where(c => !char.IsLetterOrDigit(c) && c != ' ').ToArray()); + + Assert.AreEqual(inputPunct, outputPunct, + "Punctuation must stay in the same places"); + } + + [TestMethod] + public void Test_08_WordsReversed() + { + Init(0); + _student.Review(); + + var wordsIn = _student.Input.Split(' ', StringSplitOptions.RemoveEmptyEntries); + var wordsOut = _student.Output.Split(' ', StringSplitOptions.RemoveEmptyEntries); + + for (int i = 0; i < Math.Min(wordsIn.Length, wordsOut.Length); i++) + { + var cleanIn = new string(wordsIn[i].Where(char.IsLetter).ToArray()); + var cleanOut = new string(wordsOut[i].Where(char.IsLetter).ToArray()); + + var reversed = new string(cleanIn.Reverse().ToArray()); + + Assert.AreEqual(reversed, cleanOut, + $"Word not reversed\nIndex: {i}\nExpected: {reversed}\nActual: {cleanOut}"); + } + } + + private void Init(int i) + { + _student = new Lab9.Purple.Task1(_input[i]); + } + } +} From 55bd175dc30ddb5bc43dafb6786114b894569dc9 Mon Sep 17 00:00:00 2001 From: Kantsler Date: Mon, 13 Apr 2026 22:41:09 +0300 Subject: [PATCH 07/10] Update Task2.cs --- Lab9Test/Purple/Task2.cs | 374 +++++++++++++++++++-------------------- 1 file changed, 187 insertions(+), 187 deletions(-) diff --git a/Lab9Test/Purple/Task2.cs b/Lab9Test/Purple/Task2.cs index dafb515..4e7d055 100644 --- a/Lab9Test/Purple/Task2.cs +++ b/Lab9Test/Purple/Task2.cs @@ -1,187 +1,187 @@ -//using System.Text.Json; -//using System.Linq; - -//namespace Lab9Test.Purple -//{ -// [TestClass] -// public sealed class Task2 -// { -// private Lab9.Purple.Task2 _student; - -// private string[] _input; -// private string[][] _output; - -// [TestInitialize] -// public void LoadData() -// { -// var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; -// var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); - -// var json = JsonSerializer.Deserialize( -// File.ReadAllText(file)); - -// _input = json.GetProperty("Purple2") -// .GetProperty("input") -// .Deserialize(); - -// _output = json.GetProperty("Purple2") -// .GetProperty("output") -// .Deserialize(); -// } - -// [TestMethod] -// public void Test_00_OOP() -// { -// var type = typeof(Lab9.Purple.Task2); - -// Assert.IsTrue(type.IsClass); -// Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple))); - -// Assert.IsNotNull(type.GetConstructor(new[] { typeof(string) })); -// Assert.IsNotNull(type.GetMethod("Review")); -// Assert.IsNotNull(type.GetMethod("ToString")); -// } - -// [TestMethod] -// public void Test_01_Output() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// var actual = _student.Output; -// var expected = _output[i]; - -// Assert.AreEqual(expected.Length, actual.Length, -// $"Line count mismatch\nTest: {i}"); - -// for (int j = 0; j < expected.Length; j++) -// { -// Assert.AreEqual(expected[j], actual[j], -// $"Line mismatch\nTest: {i}, Line: {j}"); -// } -// } -// } - -// [TestMethod] -// public void Test_02_LineLength() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// for (int j = 0; j < _output[i].Length; j++) -// { -// Assert.AreEqual(_output[i][j].Length, _student.Output[j].Length, -// $"Line length must be 50\nActual: {_student.Output[j].Length}\nLine: {_student.Output[j]}"); -// } -// } -// } - -// [TestMethod] -// public void Test_03_NoWordBreak() -// { -// Init(0); -// _student.Review(); - -// foreach (var line in _student.Output) -// { -// Assert.IsFalse(line.StartsWith(" "), -// "Line starts with space"); - -// Assert.IsFalse(line.EndsWith(" "), -// "Line ends with space"); -// } -// } - -// [TestMethod] -// public void Test_04_SpacesDistributed() -// { -// Init(0); -// _student.Review(); - -// foreach (var line in _student.Output) -// { -// var words = line.Split(' ', StringSplitOptions.RemoveEmptyEntries); - -// if (words.Length <= 1) continue; - -// int spaces = line.Count(c => c == ' '); -// int minSpaces = (50 - words.Sum(w => w.Length)) / (words.Length - 1); - -// Assert.IsTrue(spaces >= minSpaces, -// $"Spaces distributed incorrectly\nLine: {line}"); -// } -// } - -// [TestMethod] -// public void Test_05_ToString() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// var expected = string.Join(Environment.NewLine, _output[i]); -// var actual = _student.ToString(); - -// Assert.AreEqual(expected, actual, -// $"ToString mismatch\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_06_ChangeText() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// var old = _student.Output; - -// var newText = _input[(i + 1) % _input.Length]; -// _student.ChangeText(newText); - -// Assert.AreEqual(newText, _student.Input, -// $"ChangeText failed\nTest: {i}"); - -// Assert.IsFalse(old.SequenceEqual(_student.Output), -// $"Output not updated\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_07_TypeSafety() -// { -// Init(0); -// _student.Review(); - -// Assert.IsInstanceOfType(_student.Output, typeof(string[]), -// $"Output must be string[]\nActual: {_student.Output.GetType()}"); -// } - -// [TestMethod] -// public void Test_08_ToStringLength() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// var expectedLength = string.Join(Environment.NewLine, _output[i]).Length; -// var actualLength = _student.ToString().Length; - -// Assert.AreEqual(expectedLength, actualLength, -// $"Wrong ToString length\nTest: {i}"); -// } -// } - -// private void Init(int i) -// { -// _student = new Lab9.Purple.Task2(_input[i]); -// } -// } -//} \ No newline at end of file +using System.Text.Json; +using System.Linq; + +namespace Lab9Test.Purple +{ + [TestClass] + public sealed class Task2 + { + private Lab9.Purple.Task2 _student; + + private string[] _input; + private string[][] _output; + + [TestInitialize] + public void LoadData() + { + var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; + var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); + + var json = JsonSerializer.Deserialize( + File.ReadAllText(file)); + + _input = json.GetProperty("Purple2") + .GetProperty("input") + .Deserialize(); + + _output = json.GetProperty("Purple2") + .GetProperty("output") + .Deserialize(); + } + + [TestMethod] + public void Test_00_OOP() + { + var type = typeof(Lab9.Purple.Task2); + + Assert.IsTrue(type.IsClass); + Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple))); + + Assert.IsNotNull(type.GetConstructor(new[] { typeof(string) })); + Assert.IsNotNull(type.GetMethod("Review")); + Assert.IsNotNull(type.GetMethod("ToString")); + } + + [TestMethod] + public void Test_01_Output() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + var actual = _student.Output; + var expected = _output[i]; + + Assert.AreEqual(expected.Length, actual.Length, + $"Line count mismatch\nTest: {i}"); + + for (int j = 0; j < expected.Length; j++) + { + Assert.AreEqual(expected[j], actual[j], + $"Line mismatch\nTest: {i}, Line: {j}"); + } + } + } + + [TestMethod] + public void Test_02_LineLength() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + for (int j = 0; j < _output[i].Length; j++) + { + Assert.AreEqual(_output[i][j].Length, _student.Output[j].Length, + $"Line length must be 50\nActual: {_student.Output[j].Length}\nLine: {_student.Output[j]}"); + } + } + } + + [TestMethod] + public void Test_03_NoWordBreak() + { + Init(0); + _student.Review(); + + foreach (var line in _student.Output) + { + Assert.IsFalse(line.StartsWith(" "), + "Line starts with space"); + + Assert.IsFalse(line.EndsWith(" "), + "Line ends with space"); + } + } + + [TestMethod] + public void Test_04_SpacesDistributed() + { + Init(0); + _student.Review(); + + foreach (var line in _student.Output) + { + var words = line.Split(' ', StringSplitOptions.RemoveEmptyEntries); + + if (words.Length <= 1) continue; + + int spaces = line.Count(c => c == ' '); + int minSpaces = (50 - words.Sum(w => w.Length)) / (words.Length - 1); + + Assert.IsTrue(spaces >= minSpaces, + $"Spaces distributed incorrectly\nLine: {line}"); + } + } + + [TestMethod] + public void Test_05_ToString() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + var expected = string.Join(Environment.NewLine, _output[i]); + var actual = _student.ToString(); + + Assert.AreEqual(expected, actual, + $"ToString mismatch\nTest: {i}"); + } + } + + [TestMethod] + public void Test_06_ChangeText() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + var old = _student.Output; + + var newText = _input[(i + 1) % _input.Length]; + _student.ChangeText(newText); + + Assert.AreEqual(newText, _student.Input, + $"ChangeText failed\nTest: {i}"); + + Assert.IsFalse(old.SequenceEqual(_student.Output), + $"Output not updated\nTest: {i}"); + } + } + + [TestMethod] + public void Test_07_TypeSafety() + { + Init(0); + _student.Review(); + + Assert.IsInstanceOfType(_student.Output, typeof(string[]), + $"Output must be string[]\nActual: {_student.Output.GetType()}"); + } + + [TestMethod] + public void Test_08_ToStringLength() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + var expectedLength = string.Join(Environment.NewLine, _output[i]).Length; + var actualLength = _student.ToString().Length; + + Assert.AreEqual(expectedLength, actualLength, + $"Wrong ToString length\nTest: {i}"); + } + } + + private void Init(int i) + { + _student = new Lab9.Purple.Task2(_input[i]); + } + } +} From d07f188595ee6c5f97ed3ecfbe54d98d218a0b63 Mon Sep 17 00:00:00 2001 From: Kantsler Date: Mon, 13 Apr 2026 22:41:26 +0300 Subject: [PATCH 08/10] Restore Task3 test class and methods --- Lab9Test/Purple/Task3.cs | 344 +++++++++++++++++++-------------------- 1 file changed, 172 insertions(+), 172 deletions(-) diff --git a/Lab9Test/Purple/Task3.cs b/Lab9Test/Purple/Task3.cs index 07799d1..c82aff6 100644 --- a/Lab9Test/Purple/Task3.cs +++ b/Lab9Test/Purple/Task3.cs @@ -1,172 +1,172 @@ -//using System.Text.Json; -//using System.Linq; - -//namespace Lab9Test.Purple -//{ -// [TestClass] -// public sealed class Task3 -// { -// private Lab9.Purple.Task3 _student; - -// private string[] _input; -// private string[] _output; - -// [TestInitialize] -// public void LoadData() -// { -// var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; -// var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); - -// var json = JsonSerializer.Deserialize( -// File.ReadAllText(file)); - -// _input = json.GetProperty("Purple3") -// .GetProperty("input") -// .Deserialize(); - -// _output = json.GetProperty("Purple3") -// .GetProperty("output") -// .Deserialize(); -// } - -// [TestMethod] -// public void Test_00_OOP() -// { -// var type = typeof(Lab9.Purple.Task3); - -// Assert.IsTrue(type.IsClass); -// Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple))); - -// Assert.IsNotNull(type.GetConstructor(new[] { typeof(string) })); -// Assert.IsNotNull(type.GetMethod("Review")); -// Assert.IsNotNull(type.GetMethod("ToString")); -// } - -// [TestMethod] -// public void Test_01_Output() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i], _student.Output, -// $"Output mismatch\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_02_ToString() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i], _student.ToString(), -// $"ToString mismatch\nTest: {i}"); -// } -// } - -// //[TestMethod] -// //public void Test_03_Codes() -// //{ -// // for (int i = 0; i < _input.Length; i++) -// // { -// // Init(i); -// // _student.Review(); - -// // var actual = _student.Codes; -// // var expected = _codes[i]; - -// // Assert.AreEqual(expected.Length, actual.Length, -// // $"Codes length mismatch\nTest: {i}"); - -// // for (int j = 0; j < expected.Length; j++) -// // { -// // Assert.AreEqual(expected[j].Item1, actual[j].Item1, -// // $"Pair mismatch\nTest: {i}, Index: {j}"); - -// // Assert.AreEqual(expected[j].Item2, actual[j].Item2, -// // $"Code mismatch\nTest: {i}, Index: {j}"); -// // } -// // } -// //} - -// [TestMethod] -// public void Test_04_CodesLimit() -// { -// Init(0); -// _student.Review(); - -// Assert.IsTrue(_student.Codes.Length <= 5); -// } - -// [TestMethod] -// public void Test_05_NoOriginalPairsInOutput() -// { -// Init(0); -// _student.Review(); - -// var output = _student.Output; - -// foreach (var pair in _student.Codes) -// { -// Assert.IsFalse(output.Contains(pair.Item1), -// $"Pair not replaced: {pair.Item1}"); -// } -// } - -// [TestMethod] -// public void Test_06_ChangeText() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// foreach (var pair in _student.Codes) -// Console.WriteLine($"{pair.Item1}:{pair.Item2}"); -// Console.WriteLine(); - -// var oldOutput = _student.Output; - -// var newText = _input[(i + 1) % _input.Length]; -// _student.ChangeText(newText); - -// Assert.AreEqual(newText, _student.Input); -// Assert.AreNotEqual(oldOutput, _student.Output); -// } -// } - -// [TestMethod] -// public void Test_07_TypeSafety() -// { -// Init(0); -// _student.Review(); - -// Assert.IsInstanceOfType(_student.Output, typeof(string)); -// Assert.IsInstanceOfType(_student.Codes, typeof((string, char)[])); -// } - -// [TestMethod] -// public void Test_08_CodeSymbolsNotInOriginal() -// { -// Init(0); -// _student.Review(); - -// var input = _student.Input; - -// foreach (var code in _student.Codes) -// { -// Assert.IsFalse(input.Contains(code.Item2), -// $"Code symbol already exists in input: {code.Item2}"); -// } -// } - -// private void Init(int i) -// { -// _student = new Lab9.Purple.Task3(_input[i]); -// } -// } -//} \ No newline at end of file +using System.Text.Json; +using System.Linq; + +namespace Lab9Test.Purple +{ + [TestClass] + public sealed class Task3 + { + private Lab9.Purple.Task3 _student; + + private string[] _input; + private string[] _output; + + [TestInitialize] + public void LoadData() + { + var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; + var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); + + var json = JsonSerializer.Deserialize( + File.ReadAllText(file)); + + _input = json.GetProperty("Purple3") + .GetProperty("input") + .Deserialize(); + + _output = json.GetProperty("Purple3") + .GetProperty("output") + .Deserialize(); + } + + [TestMethod] + public void Test_00_OOP() + { + var type = typeof(Lab9.Purple.Task3); + + Assert.IsTrue(type.IsClass); + Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple))); + + Assert.IsNotNull(type.GetConstructor(new[] { typeof(string) })); + Assert.IsNotNull(type.GetMethod("Review")); + Assert.IsNotNull(type.GetMethod("ToString")); + } + + [TestMethod] + public void Test_01_Output() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i], _student.Output, + $"Output mismatch\nTest: {i}"); + } + } + + [TestMethod] + public void Test_02_ToString() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i], _student.ToString(), + $"ToString mismatch\nTest: {i}"); + } + } + + //[TestMethod] + //public void Test_03_Codes() + //{ + // for (int i = 0; i < _input.Length; i++) + // { + // Init(i); + // _student.Review(); + + // var actual = _student.Codes; + // var expected = _codes[i]; + + // Assert.AreEqual(expected.Length, actual.Length, + // $"Codes length mismatch\nTest: {i}"); + + // for (int j = 0; j < expected.Length; j++) + // { + // Assert.AreEqual(expected[j].Item1, actual[j].Item1, + // $"Pair mismatch\nTest: {i}, Index: {j}"); + + // Assert.AreEqual(expected[j].Item2, actual[j].Item2, + // $"Code mismatch\nTest: {i}, Index: {j}"); + // } + // } + //} + + [TestMethod] + public void Test_04_CodesLimit() + { + Init(0); + _student.Review(); + + Assert.IsTrue(_student.Codes.Length <= 5); + } + + [TestMethod] + public void Test_05_NoOriginalPairsInOutput() + { + Init(0); + _student.Review(); + + var output = _student.Output; + + foreach (var pair in _student.Codes) + { + Assert.IsFalse(output.Contains(pair.Item1), + $"Pair not replaced: {pair.Item1}"); + } + } + + [TestMethod] + public void Test_06_ChangeText() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + foreach (var pair in _student.Codes) + Console.WriteLine($"{pair.Item1}:{pair.Item2}"); + Console.WriteLine(); + + var oldOutput = _student.Output; + + var newText = _input[(i + 1) % _input.Length]; + _student.ChangeText(newText); + + Assert.AreEqual(newText, _student.Input); + Assert.AreNotEqual(oldOutput, _student.Output); + } + } + + [TestMethod] + public void Test_07_TypeSafety() + { + Init(0); + _student.Review(); + + Assert.IsInstanceOfType(_student.Output, typeof(string)); + Assert.IsInstanceOfType(_student.Codes, typeof((string, char)[])); + } + + [TestMethod] + public void Test_08_CodeSymbolsNotInOriginal() + { + Init(0); + _student.Review(); + + var input = _student.Input; + + foreach (var code in _student.Codes) + { + Assert.IsFalse(input.Contains(code.Item2), + $"Code symbol already exists in input: {code.Item2}"); + } + } + + private void Init(int i) + { + _student = new Lab9.Purple.Task3(_input[i]); + } + } +} From e8ec0a928344e962faa8dd35574434e01d7c05a5 Mon Sep 17 00:00:00 2001 From: Kantsler Date: Mon, 13 Apr 2026 22:41:43 +0300 Subject: [PATCH 09/10] Update Task4.cs --- Lab9Test/Purple/Task4.cs | 306 +++++++++++++++++++-------------------- 1 file changed, 153 insertions(+), 153 deletions(-) diff --git a/Lab9Test/Purple/Task4.cs b/Lab9Test/Purple/Task4.cs index c027307..5748f88 100644 --- a/Lab9Test/Purple/Task4.cs +++ b/Lab9Test/Purple/Task4.cs @@ -1,153 +1,153 @@ -//using System.Text.Json; -//using System.Linq; - -//namespace Lab9Test.Purple -//{ -// [TestClass] -// public sealed class Task4 -// { -// private Lab9.Purple.Task4 _student; - -// private string[] _input; -// private (string, char)[][] _codes; -// private string[] _output; -// [TestInitialize] -// public void LoadData() -// { -// var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; -// var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); -// var jsonText = File.ReadAllText(file); -// var json = JsonSerializer.Deserialize(jsonText); - -// var purple4 = json.GetProperty("Purple4"); - -// _input = purple4.GetProperty("input").Deserialize(); -// _output = purple4.GetProperty("output").Deserialize(); - -// // Десериализация кодов -// var codeGroups = purple4.GetProperty("codes").EnumerateArray(); -// var listOfArrays = new List<(string, char)[]>(); - -// foreach (var group in codeGroups) -// { -// var pairs = new List<(string, char)>(); -// foreach (var entry in group.EnumerateArray()) -// { -// string pair = entry.GetProperty("pair").GetString() ?? ""; -// string codeStr = entry.GetProperty("code").GetString() ?? ""; -// char code = string.IsNullOrEmpty(codeStr) ? '\0' : codeStr[0]; -// pairs.Add((pair, code)); -// } -// listOfArrays.Add(pairs.ToArray()); -// } - -// _codes = listOfArrays.ToArray(); -// } - -// [TestMethod] -// public void Test_00_OOP() -// { -// var type = typeof(Lab9.Purple.Task4); - -// Assert.IsTrue(type.IsClass); -// Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple))); - -// Assert.IsNotNull(type.GetConstructor(new[] { typeof(string), typeof((string, char)[]) })); -// Assert.IsNotNull(type.GetMethod("Review")); -// Assert.IsNotNull(type.GetMethod("ToString")); -// } - -// [TestMethod] -// public void Test_01_Output() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i], _student.Output, -// $"Output mismatch\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_02_ToString() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i], _student.ToString(), -// $"ToString mismatch\nTest: {i}"); -// } -// } - -// [TestMethod] -// public void Test_03_DecodeAllCodes() -// { -// Init(0); -// _student.Review(); - -// var output = _student.Output; - -// foreach (var code in _codes[0]) -// { -// Assert.IsFalse(output.Contains(code.Item2), -// $"Code symbol not decoded: {code.Item2}"); - -// Assert.IsTrue(output.Contains(code.Item1), -// $"Pair not restored: {code.Item1}"); -// } -// } - -// [TestMethod] -// public void Test_04_ChangeText() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// var old = _student.Output; - -// var newText = _input[(i + 1) % _input.Length]; -// var newCodes = _codes[(i + 1) % _codes.Length]; - -// _student.ChangeText(newText); -// _student = new Lab9.Purple.Task4(newText, newCodes); -// _student.Review(); - -// Assert.AreEqual(newText, _student.Input); -// Assert.AreNotEqual(old, _student.Output); -// } -// } - -// [TestMethod] -// public void Test_05_TypeSafety() -// { -// Init(0); -// _student.Review(); - -// Assert.IsInstanceOfType(_student.Output, typeof(string)); -// } - -// [TestMethod] -// public void Test_06_Length() -// { -// for (int i = 0; i < _input.Length; i++) -// { -// Init(i); -// _student.Review(); - -// Assert.AreEqual(_output[i].Length, _student.ToString().Length, -// $"Length mismatch\nTest: {i}"); -// } -// } - -// private void Init(int i) -// { -// _student = new Lab9.Purple.Task4(_input[i], _codes[i]); -// } -// } -//} \ No newline at end of file +using System.Text.Json; +using System.Linq; + +namespace Lab9Test.Purple +{ + [TestClass] + public sealed class Task4 + { + private Lab9.Purple.Task4 _student; + + private string[] _input; + private (string, char)[][] _codes; + private string[] _output; + [TestInitialize] + public void LoadData() + { + var folder = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName; + var file = Path.Combine(folder, "Lab9Test", "Purple", "data.json"); + var jsonText = File.ReadAllText(file); + var json = JsonSerializer.Deserialize(jsonText); + + var purple4 = json.GetProperty("Purple4"); + + _input = purple4.GetProperty("input").Deserialize(); + _output = purple4.GetProperty("output").Deserialize(); + + // Десериализация кодов + var codeGroups = purple4.GetProperty("codes").EnumerateArray(); + var listOfArrays = new List<(string, char)[]>(); + + foreach (var group in codeGroups) + { + var pairs = new List<(string, char)>(); + foreach (var entry in group.EnumerateArray()) + { + string pair = entry.GetProperty("pair").GetString() ?? ""; + string codeStr = entry.GetProperty("code").GetString() ?? ""; + char code = string.IsNullOrEmpty(codeStr) ? '\0' : codeStr[0]; + pairs.Add((pair, code)); + } + listOfArrays.Add(pairs.ToArray()); + } + + _codes = listOfArrays.ToArray(); + } + + [TestMethod] + public void Test_00_OOP() + { + var type = typeof(Lab9.Purple.Task4); + + Assert.IsTrue(type.IsClass); + Assert.IsTrue(type.IsSubclassOf(typeof(Lab9.Purple.Purple))); + + Assert.IsNotNull(type.GetConstructor(new[] { typeof(string), typeof((string, char)[]) })); + Assert.IsNotNull(type.GetMethod("Review")); + Assert.IsNotNull(type.GetMethod("ToString")); + } + + [TestMethod] + public void Test_01_Output() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i], _student.Output, + $"Output mismatch\nTest: {i}"); + } + } + + [TestMethod] + public void Test_02_ToString() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i], _student.ToString(), + $"ToString mismatch\nTest: {i}"); + } + } + + [TestMethod] + public void Test_03_DecodeAllCodes() + { + Init(0); + _student.Review(); + + var output = _student.Output; + + foreach (var code in _codes[0]) + { + Assert.IsFalse(output.Contains(code.Item2), + $"Code symbol not decoded: {code.Item2}"); + + Assert.IsTrue(output.Contains(code.Item1), + $"Pair not restored: {code.Item1}"); + } + } + + [TestMethod] + public void Test_04_ChangeText() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + var old = _student.Output; + + var newText = _input[(i + 1) % _input.Length]; + var newCodes = _codes[(i + 1) % _codes.Length]; + + _student.ChangeText(newText); + _student = new Lab9.Purple.Task4(newText, newCodes); + _student.Review(); + + Assert.AreEqual(newText, _student.Input); + Assert.AreNotEqual(old, _student.Output); + } + } + + [TestMethod] + public void Test_05_TypeSafety() + { + Init(0); + _student.Review(); + + Assert.IsInstanceOfType(_student.Output, typeof(string)); + } + + [TestMethod] + public void Test_06_Length() + { + for (int i = 0; i < _input.Length; i++) + { + Init(i); + _student.Review(); + + Assert.AreEqual(_output[i].Length, _student.ToString().Length, + $"Length mismatch\nTest: {i}"); + } + } + + private void Init(int i) + { + _student = new Lab9.Purple.Task4(_input[i], _codes[i]); + } + } +} From f4766a5aff6ca0d2113e4c7015ca4507e4a1b4aa Mon Sep 17 00:00:00 2001 From: Kantsler Date: Mon, 13 Apr 2026 22:53:27 +0300 Subject: [PATCH 10/10] Update dotnet-desktop.yml --- .github/workflows/dotnet-desktop.yml | 58 ++++++++++++++++++---------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml index f49809b..fff9e2e 100644 --- a/.github/workflows/dotnet-desktop.yml +++ b/.github/workflows/dotnet-desktop.yml @@ -57,7 +57,9 @@ jobs: - name: Install .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.x + dotnet-version: | + 8.0.x + 9.0.x - name: Setup MSBuild.exe uses: microsoft/setup-msbuild@v2 @@ -74,49 +76,63 @@ jobs: env: CFG: ${{ matrix.configuration }} run: | - $proj = "Lab9test/Lab9test.csproj" + $testProjectPath = "Lab9Test/Lab9Test.csproj" + $testDir = "Lab9Test" + Write-Host "Building test project..." - dotnet build $proj -c $Env:CFG - - $dll = Join-Path $PWD "Lab9test\bin\$Env:CFG\net8.0\Lab9test.dll" + dotnet build $testProjectPath -c $Env:CFG --no-restore + + $tfm = (dotnet list $testProjectPath framework --framework net9.0 | Select-Object -Last 1).Trim() + if (-not $tfm) { $tfm = "net9.0" } + + $dll = Join-Path $PWD "$testDir\bin\$Env:CFG\$tfm\Lab9Test.dll" + + Write-Host "Ожидаемая DLL: $dll" + if (-not (Test-Path $dll)) { Write-Error "DLL не найдена: $dll" + Write-Host "`nСодержимое bin папки:" + Get-ChildItem "$testDir\bin" -Recurse -ErrorAction SilentlyContinue | + Select-Object FullName | Out-Host exit 1 } - + + Write-Host "DLL успешно найдена`n" + $leagues = @{ - "Purple" = @("Task1","Task2","Task3","Task4","Task5") - "Blue" = @("Task1","Task2","Task3","Task4","Task5") - "Green" = @("Task1","Task2","Task3","Task4","Task5") - "White" = @("Task1","Task2","Task3","Task4","Task5") + "Purple" = @("Task1","Task2","Task3","Task4") + "Blue" = @("Task1","Task2","Task3","Task4") + "Green" = @("Task1","Task2","Task3","Task4") + "White" = @("Task1","Task2","Task3","Task4") } - + foreach ($leagueName in $leagues.Keys) { Write-Host "Лига: $leagueName" $allPassed = $true - + foreach ($cls in $leagues[$leagueName]) { $filter = "FullyQualifiedName~$leagueName.$cls" - Write-Host "Запуск тестов класса: $leagueName.$cls" + Write-Host " Запуск: $leagueName.$cls" + dotnet vstest $dll --TestCaseFilter:"$filter" --Logger:"trx;LogFileName=test-$leagueName-$cls.trx" - + if ($LASTEXITCODE -ne 0) { - Write-Host "❌ Тест $leagueName.$cls не прошёл." + Write-Host " ❌ $leagueName.$cls не прошёл" -ForegroundColor Red $allPassed = $false } else { - Write-Host "✅ Тест $leagueName.$cls прошёл." + Write-Host " ✅ $leagueName.$cls прошёл" -ForegroundColor Green } } - + if ($allPassed) { - Write-Host "✅ Все тесты лиги $leagueName прошли! Останавливаем каскад." + Write-Host "✅ Все тесты лиги $leagueName прошли! Останавливаем каскад." -ForegroundColor Green exit 0 } else { - Write-Host "⚠️ Не все тесты лиги $leagueName прошли. Переходим к следующей лиге." + Write-Host "⚠️ Лига $leagueName не прошла полностью. Переходим к следующей..." -ForegroundColor Yellow } } - - Write-Host "❌ Ни одна лига полностью не прошла. Проверьте корректность загруженных файлов." + + Write-Host "❌ Ни одна лига полностью не прошла." -ForegroundColor Red exit 1 - name: Upload TRX