Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b9350d6
Добавлены проверки и улучшены тесты LimitedStream
Infarh Dec 14, 2025
9f56c68
Реализация счётчика блокировок ресурсов в NamedLock
Infarh Dec 14, 2025
e44f2a7
Рефакторинг RollingMax
Infarh Dec 14, 2025
a0dbc85
Актуализирован тест критерия Пирсона для Гаусса
Infarh Dec 14, 2025
6d574db
Добавлены XML-комментарии и readonly для YieldAsyncAwaitable
Infarh Dec 14, 2025
9a33234
Добавлен Task.Yield с поддержкой ThreadPool и LockContext
Infarh Dec 14, 2025
fe29875
Обновление NuGet-пакетов в проектах решения
Infarh Dec 15, 2025
dcc8e13
Реализация универсального класса CRC32 и расширенных тестов
Infarh Dec 15, 2025
ac1afb1
Рефакторинг CRC8/16/64: современный API, async, кэш
Infarh Dec 15, 2025
7a6f25a
Добавлены методы CRC для Stream (CRC-8/16/32/64)
Infarh Dec 15, 2025
02bc087
Добавлены методы CRC для FileInfo и тесты к ним
Infarh Dec 15, 2025
4d73799
Улучшения совместимости и рефакторинг коллекций
Infarh Dec 15, 2025
29db1e4
Добавлены методы CRC для строк и тесты к ним
Infarh Dec 15, 2025
6cfc820
Рефакторинг
Infarh Dec 15, 2025
643a559
Добавлен пакет SixLabors.ImageSharp в проект
Infarh Dec 16, 2025
3c8c30d
Переход с .sln на .slnx для структуры решения
Infarh Dec 16, 2025
f4c19b4
Скрипты автоматизации публикации новых версий
Infarh Dec 16, 2025
440ddf9
Обновлён shebang для dotnet-скриптов
Infarh Dec 16, 2025
ed849bd
Добавлен параметр ShapeResult для ограничения результата
Infarh Dec 17, 2025
b22bda8
v0.0.94.3
Infarh Dec 17, 2025
6c7f6b2
Приведен стиль кода, увеличена погрешность в Value_Test
Infarh Dec 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .scripts/dependencies.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
..\MathCore.WPF
..\MathCore.DSP
..\MathCore.AI
81 changes: 81 additions & 0 deletions .scripts/nuget-ver-remote.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#!/usr/local/bin/dotnet run
// Файл file-based app скрипта для определения текущей версии NuGet пакета из удаленного репозитория.
// Использование: dotnet run .scripts/nuget-ver-remote.cs <package-name>

#nullable enable

#:package NuGet.Protocol@7.0.1
#:package NuGet.Configuration@7.0.1

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using NuGet.Common;
using NuGet.Configuration;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;

if (args.Length < 1)
{
Console.Error.WriteLine("Usage: dotnet run .scripts/nuget-ver-remote.cs <package-name>");
Environment.Exit(1);
}

var package_name = args[0]; // имя пакета из аргумента
if (string.IsNullOrWhiteSpace(package_name))
{
Console.Error.WriteLine("Package name is empty");
Environment.Exit(1);
}

try
{
// Создадим репозиторий NuGet (v3 API)
var source_repo = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");

// Получим ресурс метаданных пакета
using var cache = new SourceCacheContext();
var logger = NullLogger.Instance;
var resource = await source_repo.GetResourceAsync<PackageMetadataResource>().ConfigureAwait(false);

// Запросим все метаданные по пакету (включая pre-release), не включая unlisted
var metadata = await resource.GetMetadataAsync(package_name, includePrerelease: true, includeUnlisted: false, cache, logger, CancellationToken.None).ConfigureAwait(false);

var metadata_list = metadata?.ToList() ?? new System.Collections.Generic.List<IPackageSearchMetadata>();
if (metadata_list.Count == 0)
{
Console.Error.WriteLine($"Package not found: {package_name}");
Environment.Exit(2);
}

// Соберём версии и выберем последнюю стабильную, если есть, иначе последнюю доступную
var versions = metadata_list
.Select(m => m.Identity.Version)
.Where(v => v is not null)
.OrderBy(v => v)
.ToArray();

if (versions.Length == 0)
{
Console.Error.WriteLine("No versions found");
Environment.Exit(2);
}

var stable_version = versions
.Where(v => !v.IsPrerelease)
.OrderByDescending(v => v)
.FirstOrDefault()
?? versions.OrderByDescending(v => v).First();

var latest_version = stable_version.ToNormalizedString();

Console.WriteLine(latest_version); // вывод версии в stdout
Environment.Exit(0);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error: {ex.Message}");
Environment.Exit(2);
}
116 changes: 116 additions & 0 deletions .scripts/nuget-ver-wait.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#!/usr/local/bin/dotnet run
// Файл file-based app скрипта для ожидания появления указанной версии NuGet пакета на сервере.
// Использование: dotnet run .scripts/nuget-ver-wait.cs <package-name> <target-version> [-n <tries>] [-t <timeout-ms>]

#nullable enable

#:package NuGet.Protocol@7.0.1
#:package NuGet.Configuration@7.0.1

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using NuGet.Common;
using NuGet.Configuration;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;

if (args.Length < 2)
{
Console.Error.WriteLine("Usage: dotnet run .scripts/nuget-ver-wait.cs <package-name> <target-version> [-n <tries>] [-t <timeout-ms>]");
Environment.Exit(1);
}

var package_name = args[0]; // имя пакета
var target_version_str = args[1]; // требуемая версия
if (string.IsNullOrWhiteSpace(package_name) || string.IsNullOrWhiteSpace(target_version_str))
{
Console.Error.WriteLine("Package name or target version is empty");
Environment.Exit(1);
}

// Значения по умолчанию
var tries = 10; // -n по умолчанию
var timeout_ms = 1000; // -t по умолчанию

// Разбор дополнительных аргументов
for (var i = 2; i < args.Length; i++)
{
var a = args[i];
const StringComparison cmp = StringComparison.OrdinalIgnoreCase;
if (string.Equals(a, "-n", cmp) && i + 1 < args.Length)
{
if (int.TryParse(args[++i], out var v)) tries = v;
}
else if (string.Equals(a, "-t", cmp) && i + 1 < args.Length)
{
if (int.TryParse(args[++i], out var v)) timeout_ms = v;
}
}

if (tries <= 0) tries = 1;
if (timeout_ms < 0) timeout_ms = 0;

if (!NuGetVersion.TryParse(target_version_str, out var target_version))
{
Console.Error.WriteLine($"Невозможно распарсить целевую версию: {target_version_str}");
Environment.Exit(1);
}

Console.WriteLine($"Ожидание версии {target_version} пакета {package_name} на nuget.org ({tries} попыток, таймаут {timeout_ms}ms)");

try
{
var source_repo = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
using var cache = new SourceCacheContext();
var logger = NullLogger.Instance;
var resource = await source_repo.GetResourceAsync<PackageMetadataResource>();

for (var attempt = 1; attempt <= tries; attempt++)
{
// Получим метаданные пакета
var metadata = await resource.GetMetadataAsync(package_name, includePrerelease: true, includeUnlisted: false, cache, logger, CancellationToken.None);
var metadata_list = metadata?.ToList() ?? [];

if (metadata_list.Count == 0)
Console.WriteLine($"[{attempt}/{tries}] Пакет не найден на сервере");
else
{
var versions = metadata_list
.Select(m => m.Identity.Version)
.Where(v => v is not null)
.OrderByDescending(v => v)
.ToArray();

if (versions.Length == 0)
Console.WriteLine($"[{attempt}/{tries}] На сервере нет версий пакета");
else
{
var latest = versions[0];
Console.WriteLine($"[{attempt}/{tries}] Серверная последняя версия: {latest}");

// Сравним последнюю серверную версию с целевой
if (latest < target_version)
Console.WriteLine($"Серверная версия {latest} младше требуемой {target_version}, ожидаем...");
else
{
Console.WriteLine($"Требуемая версия {target_version} доступна на сервере (серверная версия {latest})");
Environment.Exit(0);
}
}
}

if (attempt < tries)
await Task.Delay(timeout_ms);
}

Console.Error.WriteLine($"Не удалось дождаться версии {target_version} для пакета {package_name} после {tries} попыток");
Environment.Exit(2);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Ошибка: {ex.Message}");
Environment.Exit(2);
}
26 changes: 26 additions & 0 deletions .scripts/xml-xpath.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/local/bin/dotnet run
// Файл file-based app скрипта для выполнения XPath запросов к XML файлам.
// запуск через команду: dotnet run .scripts/xml-xpath.cs <xml-file> <xpath-query>

using System;
using System.Xml;

if (args.Length != 2)
{
Console.WriteLine("Usage: dotnet run .scripts/xml-xpath.cs <xml-file> <xpath-query>");
return;
}

var xml_file = args[0];
var xpath_query = args[1];

XmlDocument xml_doc = new XmlDocument();
xml_doc.Load(xml_file);

var nodes = xml_doc.SelectNodes(xpath_query);
if (nodes is null || nodes.Count == 0)
Console.WriteLine("No nodes found."); // нет найденных узлов
else
// используем явный тип XmlNode чтобы не получать object и иметь доступ к OuterXml
foreach (XmlNode node in nodes)
Console.WriteLine(node.OuterXml);
Loading