From e6ba1324a5bdf25a7a73ad6f2c6a0c330705a81a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B5=D0=BC=D0=BB=D1=8F=D0=BA?= <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Tue, 3 Feb 2026 12:10:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20Lib=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B2=20CompilationSamples=20=D0=B2=20TestRunner=20(#?= =?UTF-8?q?3386)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Delete PascalABC.NET Lib files from CompilationSamples * Delete SPython Lib files from CompilationSamples * Delete DataFrameABC from CompilationSamples * Delete copying Lib files in TestRunner + set up copying CodeExamples in separate dir --- TestSuiteAdditionalLanguages/.gitignore | 3 +- .../GraphWPF_use_example.pys | 10 ----- .../CompilationSamples/argmin.pys | 18 -------- .../compound_conditions_example.pys | 27 ----------- .../CompilationSamples/delete_by_mouse.pys | 42 ------------------ .../CompilationSamples/game_example.pys | 26 ----------- .../CompilationSamples/in_out_example.pys | 24 ---------- .../CompilationSamples/list_use_example.pys | 13 ------ .../SPythonTests/CompilationSamples/new.pys | 9 ---- .../CompilationSamples/set_example.pys | 11 ----- .../time_measurement_example.pys | 16 ------- .../CompilationSamples/unit_example.pys | 18 -------- .../CompilationSamples/unit_use_example.pys | 19 -------- bin/TestRunner.exe | Bin 77824 -> 77824 bytes bin/TestRunner.pas | 32 +++++-------- 15 files changed, 13 insertions(+), 255 deletions(-) delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/GraphWPF_use_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/argmin.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/compound_conditions_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/delete_by_mouse.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/game_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/in_out_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/list_use_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/new.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/set_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/time_measurement_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_example.pys delete mode 100644 TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_use_example.pys diff --git a/TestSuiteAdditionalLanguages/.gitignore b/TestSuiteAdditionalLanguages/.gitignore index 94576a2ea..3ba4059ed 100644 --- a/TestSuiteAdditionalLanguages/.gitignore +++ b/TestSuiteAdditionalLanguages/.gitignore @@ -11,4 +11,5 @@ */exe/input.txt */exe/out.txt */exe/test.txt -*/exe/*.dat \ No newline at end of file +*/exe/*.dat +*/CodeExamples \ No newline at end of file diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/GraphWPF_use_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/GraphWPF_use_example.pys deleted file mode 100644 index fd9d70def..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/GraphWPF_use_example.pys +++ /dev/null @@ -1,10 +0,0 @@ -from GraphWPF import * - -color = RandomColor() - -def MouseMove(x: float, y: float, mb: int): - if mb == 1: - FillCircle(x, y, 10, color) - - -OnMouseMove = MouseMove diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/argmin.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/argmin.pys deleted file mode 100644 index eb142e0ae..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/argmin.pys +++ /dev/null @@ -1,18 +0,0 @@ -# индекс минимального элемента -def argmin(arr: list[int]) -> int: - if len(arr) == 0: - return -1 - res = 0 - for i in range(1, len(arr)): - if arr[i] < arr[res]: - res = i - return res - - - - -print(argmin([1, 2, 3])) -print(argmin([3, 2, 1])) -# a = [4,9,16,8,2,15,13,13,15,2,8,16,9,4] -a = [i ** 2 % 17 for i in range(2, 16)] -print(argmin([i ** 2 % 17 for i in range(2, 16)])) diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/compound_conditions_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/compound_conditions_example.pys deleted file mode 100644 index 20332be55..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/compound_conditions_example.pys +++ /dev/null @@ -1,27 +0,0 @@ -N = 7 - -# Выводит первые N чисел, -# которые можно тремя различными -# способами представить как -# сумму двух квадратов целых чисел -def print_sequence(N: int): - a = 0 - while True: - a += 1 - for b in range(1, a): - for c in range(1, b): - for d in range(1, c + 1): - for e in range(1, d): - for f in range(1, e): - if a ** 2 + f ** 2 == b ** 2 + e ** 2 == c ** 2 + d ** 2: - print(a ** 2 + f ** 2, '\t= ', - a, '^2 + ', f, '^2 \t= ', - b, '^2 + ', e, '^2 \t= ', - c, '^2 + ', d, '^2', sep='') - - N -= 1 - if N == 0: - return - - -print_sequence(N) \ No newline at end of file diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/delete_by_mouse.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/delete_by_mouse.pys deleted file mode 100644 index 1a0c29675..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/delete_by_mouse.pys +++ /dev/null @@ -1,42 +0,0 @@ -from WPFObjects import RectangleWPF, ObjectUnderPoint -from WPFObjects import Colors, Window, OnMouseDown -from PABCSystem import Random, Inc, Milliseconds - -CountSquares = 10 -StatusRect: RectangleWPF -CurrentDigit = 1 -Mistakes = 0 - -def DrawStatusText(): - if CurrentDigit <= CountSquares: - StatusRect.Text = ('Удалено квадратов: ' + str(CurrentDigit-1) - + '\tОшибок: ' + str(Mistakes)) - else: - StatusRect.Text = ('Игра окончена. Время: ' + str(Milliseconds() // 1000) - + ' с.\tОшибок: ' + str(Mistakes)) - - -def MyMouseDown(x: float, y: float, mb: int): - ob = ObjectUnderPoint(x, y) - if ob is RectangleWPF and ob != StatusRect: - if ob.Number == CurrentDigit: - ob.Destroy() - Inc(CurrentDigit) - DrawStatusText() - else: - ob.Color = Colors.Red - Inc(Mistakes) - DrawStatusText() - - -Window.Title = 'Игра: удали все квадраты по порядку' -for i in range(1, CountSquares + 1): - x = Random(Window.Width - 50) - y = Random(Window.Height - 100) - ob = new RectangleWPF(x, y, 50, 50, Colors.LightGreen, 1) - ob.FontSize = 25 - ob.Number = i -StatusRect = new RectangleWPF(0, Window.Height - 40, - Window.Width, 40, Colors.LightBlue) -DrawStatusText() -OnMouseDown = MyMouseDown \ No newline at end of file diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/game_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/game_example.pys deleted file mode 100644 index 12f30b832..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/game_example.pys +++ /dev/null @@ -1,26 +0,0 @@ -import random as rnd - -hidden_number = rnd.randint(1, 100) -print('Угадай число от 1 до 100') -attempts = 0 -left_border = 1 -right_border = 100 -while True: - attempts += 1 - guess = int(input('Попытка ' + str(attempts) + ':')) - if guess < left_border or right_border < guess: - print('Число', guess, 'не из диапазона', - '[' + str(left_border) + ',', str(right_border) + ']') - continue - if guess < hidden_number: - left_border = guess + 1 - print('Загаданное число больше', guess); - elif guess > hidden_number: - right_border = guess - 1 - print('Загаданное число меньше', guess); - else: - print('Победа!!!') - break - print('Попробуй число от', left_border, - 'до', right_border) -print('Тебе понадобилось', attempts, 'попыток') \ No newline at end of file diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/in_out_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/in_out_example.pys deleted file mode 100644 index c5bf877f2..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/in_out_example.pys +++ /dev/null @@ -1,24 +0,0 @@ -a = int(input('Введите первое число:')) -b = int(input('Введите второе число:')) - -def print_expressions(a: int, b: int): - print(a, ' +', b, '=', a + b, end = '\n') - print(a, ' -', b, '=', a - b, end = '\n') - print(a, ' *', b, '=', a * b, end = '\n') - print(a, ' %', b, '=', a % b, end = '\n') - print(a, ' /', b, '=', a / b, end = '\n') - print(a, '//', b, '=', a // b, end = '\n') - print(a, '**', b, '=', a ** b, end = '\n') - -print_expressions(a, b) - - -# Введите первое число: 10 -# Введите второе число: 6 -# 10 + 6 = 16 -# 10 - 6 = 4 -# 10 * 6 = 60 -# 10 % 6 = 4 -# 10 / 6 = 1.66666666666667 -# 10 // 6 = 1 -# 10 ** 6 = 1000000 diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/list_use_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/list_use_example.pys deleted file mode 100644 index a00806436..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/list_use_example.pys +++ /dev/null @@ -1,13 +0,0 @@ -def print_matr(matr: list[list[int]]): - for row in matr: - for elem in row: - print(elem, '\t', end=' ') - print() - - -matrix_of_integers: list[list[int]] -matrix_of_integers = [ - [j * i for j in range(1, 10)] - for i in range(1, 10) if i % 2 == 0 - ] -print_matr(matrix_of_integers) \ No newline at end of file diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/new.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/new.pys deleted file mode 100644 index dcd45a73c..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/new.pys +++ /dev/null @@ -1,9 +0,0 @@ -a = [1, 2, 3] -a.append(4) -a.insert(4, 2) -b = a.copy() -b.reverse() -print(b) -print(a) -print(a.count(2)) -print(a.pop(1)) diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/set_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/set_example.pys deleted file mode 100644 index 575d1c54f..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/set_example.pys +++ /dev/null @@ -1,11 +0,0 @@ -from time import time - -s: set[int] = set() -t1 = time() - -for i in range(1, 10000): - s |= {i} - -t2 = time() -print(t2 - t1) -print(len(s)) \ No newline at end of file diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/time_measurement_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/time_measurement_example.pys deleted file mode 100644 index fe054776e..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/time_measurement_example.pys +++ /dev/null @@ -1,16 +0,0 @@ -import time - -n = 60000 -start = time.time() -sm: float = 0 - -i = 1.0 -while i < n: - j = 1.0 - while j < n: - sm += 1.0 / i / j - j += 1 - i += 1 - -end = time.time(); -print(end - start) \ No newline at end of file diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_example.pys deleted file mode 100644 index a70ba349b..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_example.pys +++ /dev/null @@ -1,18 +0,0 @@ -# Рекурсивная функция вычисления факториала -def factorial(n: int)-> bigint: - if n == 0: - return 1 - return n * factorial(n - 1) - - -# Не рекурсивная функция вычисления числа Фибоначчи -def fibonacci(n: int)-> bigint: - if n <= 1: - return n - f1: bigint = 0 - f2: bigint = 1 - for i in range(n - 1): - t = f1 + f2 - f1 = f2 - f2 = t - return f2 diff --git a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_use_example.pys b/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_use_example.pys deleted file mode 100644 index 87308e0eb..000000000 --- a/TestSuiteAdditionalLanguages/SPythonTests/CompilationSamples/unit_use_example.pys +++ /dev/null @@ -1,19 +0,0 @@ -from unit_example import fibonacci as F, factorial as fact - -N = 10 - -fibs = [F(i) for i in range(1, N + 1)] -print("Последовательность чисел Фибоначчи:") -i = 0 -for fib_num in fibs: - i += 1 - print('F(' + str(i) + ')\t=', fib_num) -print() - -facts = [fact(i) for i in range(1, N + 1)] -print("Последовательность факториалов:") -i = 0 -for fact_num in facts: - i += 1 - print(str(i) + '!\t=', fact_num) -print() \ No newline at end of file diff --git a/bin/TestRunner.exe b/bin/TestRunner.exe index 42ccfb27428840668e8d53b6bb66bd279716f1b4..502d230f4e256a041c1d86daa91a6af43b10a58e 100644 GIT binary patch delta 22496 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 delta 22634 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 diff --git a/bin/TestRunner.pas b/bin/TestRunner.pas index fc7b26c9e..0db9a3708 100644 --- a/bin/TestRunner.pas +++ b/bin/TestRunner.pas @@ -42,15 +42,6 @@ begin Result := new LanguageTestsInfo(languageInformation.Name, languageInformation.FilesExtensions, languageInformation.CommentSymbol); end; -function GetLibDir(languageName : string): string; -begin - var dir := Path.GetDirectoryName(GetEXEFileName()); - if languageName <> 'PascalABC.NET' then - Result := dir + PathSeparator + 'Lib' + PathSeparator + languageName - else - Result := dir + PathSeparator + 'Lib'; -end; - function GetFilesByExtensions(path: string; extensions: array of string; searchOption: SearchOption := System.IO.SearchOption.TopDirectoryOnly): array of string; begin Result := extensions.SelectMany(ext -> Directory.GetFiles(path, $'*{ext}', searchOption)).ToArray(); @@ -455,24 +446,23 @@ end; // var pcu := Path.Combine(dir, 'PABCSystem.pcu'); //end; -procedure CopyLibFiles; -begin - var files := GetFilesByExtensions(GetLibDir(CurrentLanguageInfo.languageName), CurrentLanguageInfo.languageExtensions); - foreach f: string in files do - begin - &File.Copy(f, TestSuiteDir + PathSeparator + 'CompilationSamples' + PathSeparator + Path.GetFileName(f), true); - end; -end; - +/// Копирует всю папку CodeExamples в TestSuite (если такая уже есть, то предварительно удаляет её) procedure CopyCodeExamples; begin var dir := GetCodeExamplesDir(); if not Directory.Exists(dir) then exit; var files := GetFilesByExtensions(dir, CurrentLanguageInfo.languageExtensions, SearchOption.AllDirectories); + var destinationDir := TestSuiteDir + PathSeparator + 'CodeExamples' + PathSeparator; + + if Directory.Exists(destinationDir) then + Directory.Delete(destinationDir, True); + + Directory.CreateDirectory(destinationDir); + foreach f: string in files do begin - &File.Copy(f, TestSuiteDir + PathSeparator + 'CompilationSamples' + PathSeparator + Path.GetFileName(f), true); + &File.Copy(f, destinationDir + Path.GetFileName(f), true); end; end; @@ -509,9 +499,9 @@ begin if (ParamCount = 0) or (ParamStr(1) = '2') then begin - Println('Compiling compilation samples...'); - CopyLibFiles; + Println('Compiling compilation samples...'); CopyCodeExamples; + CompileAllCompilationTests('CodeExamples', false); CompileAllCompilationTests('CompilationSamples', false); Println('Success. Time elapsed: ' + MsToMinutes(MillisecondsDelta())); end;