diff --git a/.gitignore b/.gitignore index 9491a2f..8fbf81f 100644 --- a/.gitignore +++ b/.gitignore @@ -360,4 +360,8 @@ MigrationBackup/ .ionide/ # Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file +FodyWeavers.xsd +/LR1/DataGeneration/input_data.txt +/LR1/DataGeneration/min_value.txt +/LR1/DataGeneration/output_data.txt +/LR1/AppTesting/Properties/launchSettings.json diff --git a/LR1/AppTesting.Tests/AppTesting.Tests.csproj b/LR1/AppTesting.Tests/AppTesting.Tests.csproj new file mode 100644 index 0000000..8fd9f33 --- /dev/null +++ b/LR1/AppTesting.Tests/AppTesting.Tests.csproj @@ -0,0 +1,22 @@ + + + + net8.0 + enable + enable + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/LR1/AppTesting.Tests/ArrayProcTests.cs b/LR1/AppTesting.Tests/ArrayProcTests.cs new file mode 100644 index 0000000..c860d1c --- /dev/null +++ b/LR1/AppTesting.Tests/ArrayProcTests.cs @@ -0,0 +1,44 @@ +using Xunit; + +namespace AppTesting +{ + public class ArrayProcTests + { + // Путь 1 + + [Fact] + public void ArrayProc_Way_1_1() + { + double[] input = new double[0]; + var result = Program.ArrayProc(input); + Assert.Null(result); + } + + [Fact] + public void ArrayProc_Way_1_2() + { + double[] input = new double[] { 5.0 }; + var result = Program.ArrayProc(input); + Assert.Null(result); + } + + [Fact] + public void ArrayProc_Way_1_3() + { + double[] input = new double[] { 1.0, 2.0, 3.0, 4.0, 5.0 }; + var result = Program.ArrayProc(input); + Assert.Null(result); + } + + [Theory] + [InlineData(new double[] { })] + [InlineData(new double[] { 10.0 })] + [InlineData(new double[] { 1.0, 2.0, 3.0 })] + [InlineData(new double[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 })] + public void ArrayProc_Way_1_4(double[] input) + { + var result = Program.ArrayProc(input); + Assert.Null(result); + } + } +} \ No newline at end of file diff --git a/LR1/AppTesting.Tests/SearchMinValueTests.cs b/LR1/AppTesting.Tests/SearchMinValueTests.cs new file mode 100644 index 0000000..5d12ede --- /dev/null +++ b/LR1/AppTesting.Tests/SearchMinValueTests.cs @@ -0,0 +1,148 @@ +using Xunit; + +namespace AppTesting +{ + public class SearchMinValueTests + { + // Путь 1 + [Fact] + public void SearchMinValue_Way_1() + { + double[]? inputData = null; + var result = Program.SearchMinValue(inputData); + Assert.Null(result); + } + + // Путь 2 + [Fact] + public void SearchMinValue_Way_2() + { + double[] inputData = new double[0]; + var result = Program.SearchMinValue(inputData); + Assert.Null(result); + } + + // Путь 3 + [Fact] + public void SearchMinValue_Way_3_1() + { + double[] inputData = new double[] { 42.5 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(42.5, result); + } + + [Fact] + public void SearchMinValue_Way_3_2() + { + double[] inputData = new double[] { -15.3 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(-15.3, result); + } + + [Fact] + public void SearchMinValue_Way_3_3() + { + double[] inputData = new double[] { 0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(0, result); + } + + [Fact] + public void SearchMinValue_Way_3_4() + { + double[] inputData = new double[] { double.MaxValue }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(double.MaxValue, result); + } + + [Fact] + public void SearchMinValue_Way_3_5() + { + double[] inputData = new double[] { double.MinValue }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(double.MinValue, result); + } + + // Путь 4 + [Fact] + public void SearchMinValue_Way_4_1() + { + double[] inputData = new double[] { 5.0, 10.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(5.0, result); + } + + [Fact] + public void SearchMinValue_Way_4_2() + { + double[] inputData = new double[] { 7.7, 7.7 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(7.7, result); + } + + [Fact] + public void SearchMinValue_Way_4_3() + { + double[] inputData = new double[] { 3.0, 4.0, 5.0, 6.0, 7.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(3.0, result); + } + + [Fact] + public void SearchMinValue_Way_4_4() + { + double[] inputData = new double[] { -8.0, 2.0, 5.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(-8.0, result); + } + + // Путь 5 + [Fact] + public void SearchMinValue_Way_5_1() + { + double[] inputData = new double[] { 10.0, 5.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(5.0, result); + } + + [Fact] + public void SearchMinValue_Way_5_2() + { + double[] inputData = new double[] { 10.0, 3.0, 7.0, 9.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(3.0, result); + } + + [Fact] + public void SearchMinValue_Way_5_3() + { + double[] inputData = new double[] { 8.0, 6.0, 4.0, 2.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(2.0, result); + } + + [Fact] + public void SearchMinValue_Way_5_4() + { + double[] inputData = new double[] { 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(5.0, result); + } + + [Fact] + public void SearchMinValue_Way_5_5() + { + double[] inputData = new double[] { 9.0, 7.0, 5.0, 3.0, -1.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(-1.0, result); + } + + [Fact] + public void SearchMinValue_Way_5_6() + { + double[] inputData = new double[] { 5.0, -3.0, 2.0, -600.0, 7.0 }; + var result = Program.SearchMinValue(inputData); + Assert.Equal(-600.0, result); + } + } +} \ No newline at end of file diff --git a/LR1/AppTesting/AppTesting.csproj b/LR1/AppTesting/AppTesting.csproj index 2150e37..49a1cdf 100644 --- a/LR1/AppTesting/AppTesting.csproj +++ b/LR1/AppTesting/AppTesting.csproj @@ -5,6 +5,7 @@ net8.0 enable enable + diff --git a/LR1/AppTesting/Program.cs b/LR1/AppTesting/Program.cs index edf231d..6dd4987 100644 --- a/LR1/AppTesting/Program.cs +++ b/LR1/AppTesting/Program.cs @@ -1,54 +1,139 @@ -internal class Program -{ - private static float[] inputArray = { - 1.5f, -2.4f, 3.1f, 0.5f, 12.7f, -8.2f, 4.4f, 9.0f, 0.0f, 11.1f, - -3.3f, 6.7f, 15.2f, 2.8f, 7.0f, -1.1f, 4.9f, 8.3f, 22.5f, 0.2f, - 5.6f, -9.4f, 13.0f, 1.1f, 3.7f, 18.2f, -4.5f, 6.0f, 0.9f, 10.4f, - 2.2f, -7.7f, 14.1f, 3.3f, 5.8f, 21.0f, -0.5f, 8.8f, 1.4f, 12.3f, - 4.0f, -6.1f, 17.5f, 2.9f, 9.2f, 19.8f, -2.2f, 7.4f, 0.3f, 11.9f -}; +using System.Globalization; +public class Program +{ private static void Main() { - Console.WriteLine($"Массив с входными данными: [{string.Join("; ", inputArray)}]"); + double[] inputArray = ReadInputData(@"D:\Projects\ISTU_TEST_LR1\LR1\DataGeneration\input_data.txt"); + Console.WriteLine($"Input data: [{string.Join("; ", inputArray)}]"); var outputData = ArrayProc(inputArray); - var minValue = SearchMinValue(outputData); + WriteToFile(outputData!, "output_data.txt"); - Console.WriteLine($"Массив с выходными данными: [{string.Join("; ", outputData ?? Array.Empty())}]"); - Console.WriteLine($"Минимальное значенние: {minValue.ToString()}"); + var minValue = SearchMinValue(outputData!); + Console.WriteLine($"Output data: [{(outputData != null ? string.Join(" ; ", outputData) : "null")}]"); + + WriteToFile(minValue!, "min_value.txt"); + Console.WriteLine($"Min value: {minValue.ToString()}"); } - - private static float SearchMinValue(float[]? inputData) + public static void WriteToFile(double[] data, string filename) { - if (inputData == null || inputData.Length == 0) return 0; + if (data == null) return; + + using (StreamWriter sw = new StreamWriter(filename)) + { + foreach (var value in data) + sw.WriteLine(value.ToString(CultureInfo.InvariantCulture)); + } + } + + public static void WriteToFile(double? data, string filename) + { + if (data == null) return; + + File.WriteAllText(filename, data.Value.ToString(CultureInfo.InvariantCulture) + Environment.NewLine); + } + + private static double[] ReadInputData(string txtFile) + { + string[] lines = File.ReadAllLines(txtFile); + double[] data = new double[lines.Length]; + + for (int i = 0; i < lines.Length; i++) + { + data[i] = double.Parse(lines[i], CultureInfo.InvariantCulture); + } + + return data; + } + + public static double? SearchMinValue(double[] inputData) + { + if (inputData == null) return null; + if (inputData.Length == 0) return null; var minValue = inputData[0]; - for (int i = 1; i < inputData.Length; i++) + int i = 1; + while (i < inputData.Length) { - if (inputData[i] < minValue) minValue = inputData[i]; + if (inputData[i] < minValue) + minValue = inputData[i]; + i++; } return minValue; } - private static float[]? ArrayProc(float[] inputData) + public static double[]? ArrayProc(double[] inputData) { - float[] outputArray; + double[] outputArray; + int pairs = 0; + int n = inputData.Length - 1; + + int i = 0; + while (i <= n / 2) + { + if (i + 8 <= n) + pairs++; + i++; + } + + if (pairs == 0) + return null; + + outputArray = new double[pairs]; + + int j = 0; + i = 8; + while (j < outputArray.Length) + { + outputArray[j] = inputData[i] * inputData[i - 8]; + j++; + i++; + } + + if (outputArray.Length % 2 != 0) + { + int centralIdx = outputArray.Length / 2; + double centralItem = outputArray[centralIdx]; + outputArray[centralIdx] = centralItem * centralItem; + } + + return outputArray; + } + + /* + private static double? SearchMinValue(double[] inputData) + { + if (inputData == null || inputData.Length == 0) + return null; + + var minValue = inputData[0]; + for (int i = 1; i < inputData.Length; i++) + { + if (inputData[i] < minValue) + minValue = inputData[i]; + } + return minValue; + } + */ + + /* + private static double[]? ArrayProc(double[] inputData) + { + double[] outputArray; int pairs = 0; int n = inputData.Length - 1; for (int i = 0; i <= n / 2; i++) { - if (i + 8 <= n) pairs++; + if (i + 8 <= n) + pairs++; } - if (pairs == 0) - { - Console.WriteLine("Размер массива не соответствует условию"); + if (pairs == 0) return null; - } - outputArray = new float[pairs]; + outputArray = new double[pairs]; for (int i = 8, j = 0; j < outputArray.Length; j++, i++) { @@ -58,10 +143,10 @@ if (outputArray.Length % 2 != 0) { int centralIdx = outputArray.Length / 2; - float centralItem = outputArray[centralIdx]; + double centralItem = outputArray[centralIdx]; outputArray[centralIdx] = centralItem * centralItem; } return outputArray; } - + */ } \ No newline at end of file diff --git a/LR1/DataGeneration/DataGeneration.py b/LR1/DataGeneration/DataGeneration.py index 4924226..9636237 100644 --- a/LR1/DataGeneration/DataGeneration.py +++ b/LR1/DataGeneration/DataGeneration.py @@ -1,24 +1,63 @@ import random -import struct -MIN_FLOAT = -3.4028235e38 -MAX_FLOAT = 3.4028235e38 +MIN_VAL = -3.4028235e38 +MAX_VAL = 3.4028235e38 -def generate_and_solve(): - length = random.randint(0, 1024) - input_data = [random.uniform(MIN_FLOAT, MAX_FLOAT) for _ in range(length)] - +MIN_VAL = -500.0 +MAX_VAL = 500.0 + +def generate_input_data(): + length = random.randint(0, 1024) + input_data = [random.uniform(MIN_VAL, MAX_VAL) for _ in range(length)] + return input_data + + +def write_to_file(data, filename): + with open(filename, 'w') as file: + if not isinstance(data, list): + data = [data] + for value in data: + file.write(str(value) + '\n') + +def search_min_value(input_data): + + if not input_data: + return 0 + + min_value = input_data[0] + for i in range(1, len(input_data)): + if input_data[i] < min_value: + min_value = input_data[i] + return min_value + +def array_proc(input_data): + + if not input_data: + return None + + pairs = 0 n = len(input_data) - 1 - limit = n // 2 - pairs = [] - for i in range(limit + 1): + for i in range(n // 2 + 1): if i + 8 <= n: - pairs.append(input_data[i] * input_data[i+8]) - - if len(pairs) % 2 != 0: - mid = len(pairs) // 2 - pairs[mid] = pairs[mid] ** 2 - + pairs += 1 + if pairs == 0: + return None -generate_and_solve() + output_array = [0.0] * pairs + for i in range(8, 8 + pairs): + output_array[i - 8] = input_data[i] * input_data[i - 8] + + if len(output_array) % 2 != 0: + central_idx = len(output_array) // 2 + output_array[central_idx] = output_array[central_idx] ** 2 + return output_array + +input_data = generate_input_data() +write_to_file(input_data, "input_data.txt"); + +output_data = array_proc(input_data) +write_to_file(output_data, "output_data.txt"); + +min_value = search_min_value(output_data) +write_to_file(min_value, "min_value.txt"); \ No newline at end of file diff --git a/LR1/LR1.sln b/LR1/LR1.sln index ecaaf97..18b735f 100644 --- a/LR1/LR1.sln +++ b/LR1/LR1.sln @@ -1,12 +1,14 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.14.36705.20 d17.14 +# Visual Studio Version 18 +VisualStudioVersion = 18.2.11430.68 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppTesting", "AppTesting\AppTesting.csproj", "{A02E459C-F603-4AC3-BEA4-00610EB22632}" EndProject Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "DataGeneration", "DataGeneration\DataGeneration.pyproj", "{3032CD08-5B57-4966-95CE-53274D36CE2E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppTesting.Tests", "AppTesting.Tests\AppTesting.Tests.csproj", "{047C52F4-BF4B-4C29-BD8A-42CAB4E117F2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,6 +21,10 @@ Global {A02E459C-F603-4AC3-BEA4-00610EB22632}.Release|Any CPU.Build.0 = Release|Any CPU {3032CD08-5B57-4966-95CE-53274D36CE2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3032CD08-5B57-4966-95CE-53274D36CE2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {047C52F4-BF4B-4C29-BD8A-42CAB4E117F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {047C52F4-BF4B-4C29-BD8A-42CAB4E117F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {047C52F4-BF4B-4C29-BD8A-42CAB4E117F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {047C52F4-BF4B-4C29-BD8A-42CAB4E117F2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE