Skip to content

Commit 23267d0

Browse files
committed
📝 📦 Chore, Struct: 项目架构变更
1 parent 872f57c commit 23267d0

5 files changed

Lines changed: 260 additions & 273 deletions

File tree

Common.Algorithm.UnitTest/Common.Algorithm.UnitTest.csproj renamed to Common.Algorithm.Interop.Test/Common.Algorithm.Interop.Test.csproj

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,17 @@
22

33
<PropertyGroup>
44
<TargetFramework>net6.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
56
<Nullable>enable</Nullable>
67

78
<IsPackable>false</IsPackable>
8-
9-
<BaseOutputPath>bin\</BaseOutputPath>
10-
</PropertyGroup>
11-
12-
<PropertyGroup>
13-
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
14-
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
159
</PropertyGroup>
1610

1711
<ItemGroup>
18-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
19-
<PackageReference Include="MSTest.TestAdapter" Version="2.2.7" />
20-
<PackageReference Include="MSTest.TestFramework" Version="2.2.7" />
21-
<PackageReference Include="coverlet.collector" Version="3.1.0" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
13+
<PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
14+
<PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
15+
<PackageReference Include="coverlet.collector" Version="3.1.2" />
2216
</ItemGroup>
2317

2418
<ItemGroup>
Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
using System.Diagnostics;
2+
3+
namespace Common.Algorithm.Interop.Test;
4+
5+
[TestClass]
6+
public class 哈希测试
7+
{
8+
[TestMethod]
9+
public async void 环境安装测试()
10+
{
11+
Console.WriteLine(Environment.CheckEnvironment());
12+
13+
Directory.Delete(Path.GetFullPath($"{Environment.DllPath}"), true);
14+
Console.WriteLine(Path.GetFullPath($"{Environment.DllPath}"));
15+
if (!Environment.CheckEnvironment())
16+
Environment.InstallEnvironment();
17+
Assert.IsTrue(Environment.CheckEnvironment());
18+
19+
Directory.Delete(Path.GetFullPath($"{Environment.DllPath}"), true);
20+
if (!Environment.CheckEnvironment())
21+
await Environment.InstallEnvironmentAsync();
22+
Thread.Sleep(3000);
23+
Assert.IsTrue(Environment.CheckEnvironment());
24+
}
25+
26+
[TestMethod]
27+
public void 哈希可行性测试()
28+
{
29+
var testData = new[]
30+
{
31+
"SHVIOSJDifjDKljkJ$*F$W*938r5834r89we9fIOSFJOIS", // 基础 ASCII 测试
32+
"SHVIOSJDifjDKljkJ$*F$W*939r5834r89we9fIOSFJOIS", // 微变更测试 938 -> 939
33+
"DHSJKfkl5262fads43234LKgjsd#$%$%#$%fjLKSdkfJLD", // 大变更测试
34+
"的是抗拒那就客服的撒滤镜打算离开房间啊w8e9832", // 中文测试
35+
"的是抗拒那就客服的撒滤镜打算离开房间啊w8e9132", // 中文微变更测试 9832 -> 9132
36+
"的dsa是fsd抗f拒s阿f斯是25是34会3卡死了的肌肤", // 中文大变更测试
37+
"426435314513461434532561234123614325415324", // 纯数字测试
38+
"426235314513461434532561234123614325415324", // 纯数字小变更 4264 -> 4262
39+
"426435434658956844336135342782895245234324", // 纯数字大变更
40+
"^$#%#$@T#@$@#$%#@^#$#@^#@%$&$#*$!*()$*@)($*)(#@", // 纯符号测试
41+
"^$#%#$@T#@$@#$%#@^#$#@!#@%$&$#*$!*()$*@)($*)(#@", // 纯符号微变更测试 ^ -> !
42+
"^$#%#*$(**(&#@(*$#*%(@$*(#@()#@09(()$*!)#(@*(#@", // 纯符号大变更测试
43+
"🐦🐡🐣🐱💣", // Emoji(Unicode) 测试
44+
"🐦🐡💯🐱💣", // Emoji(Unicode) 小变更测试 🐣 -> 💯
45+
"💬💰💮🕷🚩" // Emoji(Unicode) 大变更测试
46+
};
47+
foreach (var t in testData)
48+
{
49+
Console.WriteLine(t);
50+
Console.WriteLine(Hash.FromString2Hex_WithoutCompress(t));
51+
}
52+
}
53+
54+
[TestMethod]
55+
public void IS_1_压力测试()
56+
{
57+
const string a = "SHVIOSJDifjDKljkJ$*F$W*938r5834r89we9fIOSFJOIS";
58+
int same = 0, times = 1000;
59+
const string ans = "97-8F-3C-EB-2E-A3-A8-78-06-03-4D-B1-AF-16-DB-19-42-99-6F-7C-97-5F-71-EA-31-56-DF-37-32-20-4B-72-5B-FD-BB-4E-B3-23-8B-DE-DB-F8-C4-F9-05-29-58-50-20-B5-58-A5-E0-7F-EB-C0-2E-26-CD-98-BC-AF-A5-F8-9D-2A-8D-B8-57-3A-17-25-79-2D-7B-E0-42-56-2D-F9-63-47-DA-3C-BE-08-F2-E2-DB-DF-82-8A-15-3F-CB-D6-2C-41-78-50-43-20-5A-1F-E1-D8-01-5C-5C-C6-5D-A8-01-E3-07-E2-43-4F-F6-BB-E8-17-C5-BF-0D-39-AC-E8-53-E2-12-C2-19-C8-05-40-DD-96-EA-A7-31-2D-B0-CB-23-C2-73-89-B7-1D-F1-E3-82-84-02-66-F3-C1-0D-4D-0E-32-79-3B-8D-C0-6D-00-68-23-64-2F-91-2D-1D-81-17-BB-70-1B-35-44-54-14-83-71-DF-05-08-AE-26-6C-55-CC-E5-28-B5-43-C0-1A-A6-3D-EE-04-CF-85-2B-45-D8-F0-B4-19-C3-65-D6-EF-10-22-3B-63-C0-32-4B-78-F7-61-3E-D8-74-E3-A0-EF-33-6A-D1-2F-EC-04-1A-4B-60-E8-61-E4-95-81-16-AF-D7-1C-30-05-83-7D-7C-5A-11-36-4C-30-28-40-E8-08-6D-80-7F-02-E1-A3-B2-C5-6C-FA-59-38-81-F5-50-2D-67-89-4A-17-51-42-28-09-24-6D-8A-E3-71-88-75-CF-D8-3F-C1-06-C1-39-BE-96-B7-3D-EC-F0-1B-28-A2-74-9B-F4-F3-58-49-66-4B-0C-2E-9A-9E-72-5C-03-B3-5F-CF-B9-49-6E-C2-47-31-2A-B8-CD-BD-9C-33-67-54-97-54-5A-FC-3F-93-19-A0-51-29-02-E7-C2-32-0D-E1-B9-4E-21-1B-2D-7F-63-23-0B-C4-DA-EE-DC-2F-EE-A9-7F-23-3E-20-D8-86-5C-58-B5-EF-10-2A-AB-98-86-F3-58-CD-AB-18-F7-71-A0-01-C2-BA-BA-65-02-51-2F-D2-DA-CA-D5-11-CF-32-7D-84-46-0D-74-2D-AD-95-6A-9C-11-08-B5-D9-F5-B9-FA-8E-53-39-51-A2-DF-63-5E-37-77-38-62-3F-33-DB-28-7B-9D-8C-37-00-72-BC-0A-99-62-03-75-BE-63-7A-AF-47-C8-8D-4F-D3-BC-E6-61-CE-DC-3B-5D-16-0D-8F-C1-77-79-D9-88-3D-6B-E8-C9-CB-C4-85-2F-A3-CD-77-25-89-81-DA-CA-A9-33-32-D7-2A-DE-C8-87-85-88-92-5D-53-8E-89-A2-8D-B6-E6-6B-6A-C9-20-C1-58-ED-CF-DC-D3-C2-95-69-A4-E7-B4-8B-AE-19-66-9C-3C-DA-D0-E9-85-C3-07-C6-3C-A5-6F-1F-19-62-10-4A-98-2F-59-5D-91-64-20-BC-42-D0-DA-4D-AE-5D-C0-B2-01-F9-26-DF-89-9B-DA-AE-09-20-CE-37-AE-D6-06-BB-78-AE-98-96-70-E2-7F-00-AC-8C-E0-82-6D-FC-19-FA-B9-6B-0A-BD-C3-94-4B-53-DF-FC-59-E4-26-75-CC-58-FD-CB-2E-D9-4C-07-87-49-E4-50-B9-00-87-16-69-83-EC-E8-B8-89-59-72-D8-4C-41-D6-70-9B-F1-C0-1A-0E-6C-3B-F4-44-C6-FE-34-AC-9A-0E-8E-D1-3C-64-51-D2-4F-57-8B-EC-DE-52-59-C1-EA-04-BD-7C-9E-90-71-81-EC-0A-BA-15-6C-AC-CB-C8-4B-87-26-EC-E9-80-BC-8E-DA-8C-4A-34-DF-86-55-35-5D-34-22-BF-60-35-06-85-79-16-72-CE-9E-8A-77-F3-0B-4D-BC-34-8B-CF-67-2C-30-77-01-BD-7E-64-64-90-64-B3-3B-58-E2-9D-BB-58-D9-DD-43-CF-B3-31-F4-A6-40-67-2D-00-00-34-95-F6-9E-B8-90-B8-1A-F4-D8-39-E8-D8-A3-C8-AC-56-33-97-9E-70-30-61-D6-71-24-CB-EC-7A-1D-43-7E-5C-4C-4A-4B-14-DD-36-1C-C2-69-5A-C5-73-E6-2B-92-AE-7F-BC-0A-D5-C9-2B-91-D8-F5-25-A4-9A-EC-79-12-C2-A8-25-05-7E-7D-3D-5C-85-88-A1-09-7E-DC-E1-06-D5-67-FA-52-2C-4D-0E-49-03-6A-E8-97-1F-5B-23-DB-28-4A-C1-B2-27-32-E7-BB-C7-BC-BB-52-4C-D3-F3-38-54-28-41-2C-F7-DA-D5-79-C4-66-EF-B6-4D-89-16-7E-58-97-A3-54-0D-56-0B-4C-4B-F8-A3-B8-F9-56-E3-94-77-41-60-42-A2-38-89-91-C9-D2-73-CD-5C-A8-1B-B5-3C-7B-C5-F0-F0-3D-78-00-38-AB-D8-0B-53-C4-8C-84-3F-92-16-51-00-65-89-24-2A-27-BA-16-52-79-F7-AE-6B-32-30-BE-DC-37-54-A9-CB-D4-B1-09-B4-FB-57-65-26-F3-45-A2-11-B6-0B-50-FC-AF-BC-6F-D9-CA-5B-F4-05-11-6D-E0-A4-30-A6-CF-FE-CC-4D-A8-E2-C9-6E-27-FC-C3-1C-ED-06-0F-3A-84-AC-51-C3-0F-25-86-4B-41-E7-C7-63-D1-F0-6E-70-E6-68-BF-7C-B0-5D-3B-89-60-F2-3C-8A-84-61-0D-60-49-8D-E3-B3-3B-D2-00-18-AB-3D-37-6D-C2-8C-EA-B2-82-E6-EC-63-40-1D-2F-F4-DE-DF-5F-4D-13-27-94-E2-77-DB-E4-5F-0F-A0-8B-E3-C5-AE-95-25-64-3A-7E-B8-50-66-D2-FC-0B-EA-60-6E-80-DE-4B-B7-EF-27-2B-DF-10-2B-3E-5D-25-B3-F8-55-82-6B-CB-D3-44-2A-0D-38-8B-69-63-EF-E4-1E-5F-FA-0F-78-9E-AA-57-40-C0-43-CD-40-BD-FE-C4-F1-8A-76-A9-F4-07-7F-1A-6C-32-9A-18-DC-B2-1B-D5-3C-9B-BF-65-A0-70-42-95-C6-42-0B-EE-B9-F2-B3-D2-49-A5-86-8A-4B-0D-4F-6E-E9-E2-44-E8-07-F1-EF-6D-CC-67-F8-32-1D-BC-07-76-66-D8-83-C2-B8-77-1E-7D-B8-39-AB-25-9A-8E-FC-19-1C-25-2A-99-31-8C-F2-70-30-14-05-21-1B-F0-84-08-99-AC-0B-8F-71-CC-F2-AC-D8-A0-24-98-1F-65-1B-66-45-11-2E-B0-1E-C0-17-09-D2-45-2C-9A-14-F0-0A-D6-C0-9B-21-45-13-33-BB-8D-F3-01-DE-32-F2-73-12-80-80-95-7A-4B-3C-61-0D-44-75-62-3A-DE-76-E7-50-11-0B-36-05-37-35-5B-8D-24-14-A0-89-B5-5B-86-60-56-6A-79-D5-53-20-8A-1F-80-D2-9D-3F-A8-79-12-F6-EB-D3-C9-B3-81-B1-09-58-9D-BA-70-C4-06-50-EA-00-D0-6B-30-BC-B7-CE-89-B9-E8-1E-B7-26-C5-1E-D9-A2-88-21-78-A1-85-23-93-3F-9A-72-C6-A4-C9-24-18-62-64-0A-5F-40-32-EB-39-39-8C-B6-36-F1-BC-65-E4-9C-31-BE-47-3A-62-87-69-D3-5C-EB-96-76-39-4F-21-52-A0-5D-A8-75-89-79-74-ED-8E-B7-E6-09-B7-A0-F5-FA-67-7E-50-65-B6-05-74-17-A9-C7-BE-D7-F1-DA-68-8B-59-B6-51-A6-5A-32-5C-CB-3F-14-94-F0-A3-09-51-B7-A2-4C-39-0F-D0-D8-14-29-89-4B-40-EA-5A-FD-5C-72-05-9C-49-36-5D-75-66-25-E9-F5-32-49-36-C0-41-6C-5F-FA-12-A9-CD-03-79-5C-FB-33-5A-FD-3D-CA-7C-31-97-B0-D2-79-5B-F9-88-91-01-7D-E6-ED-7F-83-A9-8B-C0-CF-8E-5C-7C-7A-5B-3F-B8-56-DD-E0-83-2D-72-6D-94-CA-58-D7-5D-68-9E-47-A8-FD-28-12-4B-1C-C6-C3-75-C2-ED-F0-8A-BB-30-13-77-D3-4A-95-A3-2D-02-26-4D-58-D2-B5-A5-8D-7E-72-76-35-98-71-67-8C-DC-99-67-F3-D8-1B-35-DF-F1-AA-65-48-D9-57-41-2E-AD-9F-08-D5-65-87-A5-A5-8E-B4-19-60-EE-C8-97-ED-B2-A0-E5-DF-37-6F-3A-44-22-7C-53-B5-75-B9-9A-8E-48-14-1B-1E-25-00-74-23-0D-25-C3-8D-C5-D6-B0-09-AD-80-F7-57-06-E2-91-73-4A-28-7A-42-6F-66-99-35-9B-25-D1-82-1F-37-E1-DC-E1-A8-E0-69-81-4D-B8-47-6E-AD-4B-D1-29-7F-36-0D-32-9A-8D-CC-4F-CD-53-50-F1-9D-76-F0-7A-2D-E4-9C-9B-1D-D3-C1-D4-9B-E2-B3-03-8E-BA-4C-53-73-A9-E1-A2-6A-A3-43-2A-59-D6-E8-E1-B3-6F-20-92-6E-2A-94-D7-FD-2E-06-5A-60-8C-C2-D4-D7-C2-71-7A-7F-F0-C2-51-71-5F-28-9D-8F-96-EB-BD-B5-62-C3-38-12-4B-FD-7A-47-DE-81-81-3F-58-9B-46-A8-5A-C5-F8-7C-DA-ED-C1-4C-4E-77-75-FA-F8-3A-D6-C0-64-03-F2-E7-97-43-CC-F4-DC-7E-DD-4B-89-9A-09-79-F7-DE-C3-FD-E5-12-12-50-CB-2E-A4-4C-38-4A-1A-99-96-C3-99-16-07-6B-BC-8F-FB-34-9B-11-B1-02-79-34-FC-9B-3F-22-45-BE-A6-EF-5E-DF-39-78-AD-4E-57-ED-47-C1-CD-F1-74-2D-14-A8-02-CB-32-D0-07-D4-3C-40-4A-48-E1-92-A1-A9-A5-F2-14-11-AB-7C-8D-96-58-E5-10-D6-76-EC-2A-25-AB-0D-2B-75-B1-74-16-DD-F1-7A-C6-98-FB-2B-85-A8-34-F8-01-AF-63-22-8A-13-36-9F-5C-11-D9-46-C2-12-B5-56-27-60-53-53-9C-4E-A4-86-C4-01-AD-75-60-54-E7-B1-07-F9-51-C0-41-41-53-96-56-DF-10-C0-A3-1C-E1-F0-C5-C2-5D-80-32-9A-E7-95-30-63-07-A2-A7-A4-62-9C-7C-6E-BC-90-9A-FC-3C-1E-45-9A-87-60-2B-DF-54-D7-8D-6E-EC-ED-0B-70-0D-18-E5-A1-DC-7D-4B-99-AB-CE-E1-CC-3A-7A-CD-E1-6E-DE-1A-74-72-0B-F7-2D-AC-5C-AC-27-FA-71-66-1A-DE-9D-D0-22-30-DD-CA-AB-53-E8-A4-19-C8-35-6F-8C-79-14-A8-24-D8-25-16-C2";
60+
List<string> list = new();
61+
for (var i = 0; i < times; ++i)
62+
{
63+
var output = Hash.FromString2Hex_WithoutCompress(a);
64+
if (output == ans) ++same;
65+
list.Add(output);
66+
}
67+
Console.WriteLine($"通过: {same}/{times}, 错误: {times - same}");
68+
foreach (var item in list)
69+
{
70+
Console.WriteLine(item);
71+
}
72+
Assert.AreEqual(same, times);
73+
}
74+
75+
[TestMethod]
76+
public void 大于2048Byte的测试()
77+
{
78+
const int times = 1000;
79+
var data = new string[times];
80+
for (var i = 0; i < times; ++i)
81+
{
82+
for (var j = 0; j < 2048; ++j)
83+
data[i] += '0' + j % 9;
84+
data[i] += '0' + i % 9;
85+
}
86+
for (var i = 0; i < times; i++)
87+
{
88+
Console.WriteLine($"{i}. {data[i]}\n\t{Hash.FromString2Hex_WithoutCompress(data[i])}");
89+
}
90+
}
91+
92+
[TestMethod]
93+
public void 哈希压缩器可行性测试()
94+
{
95+
var testData = new[]
96+
{
97+
"SHVIOSJDifjDKljkJ$*F$W*938r5834r89we9fIOSFJOIS", // 基础 ASCII 测试
98+
"SHVIOSJDifjDKljkJ$*F$W*939r5834r89we9fIOSFJOIS", // 微变更测试 938 -> 939
99+
"DHSJKfkl5262fads43234LKgjsd#$%$%#$%fjLKSdkfJLD", // 大变更测试
100+
"的是抗拒那就客服的撒滤镜打算离开房间啊w8e9832", // 中文测试
101+
"的是抗拒那就客服的撒滤镜打算离开房间啊w8e9132", // 中文微变更测试 9832 -> 9132
102+
"的dsa是fsd抗f拒s阿f斯是25是34会3卡死了的肌肤", // 中文大变更测试
103+
"426435314513461434532561234123614325415324", // 纯数字测试
104+
"426235314513461434532561234123614325415324", // 纯数字小变更 4264 -> 4262
105+
"426435434658956844336135342782895245234324", // 纯数字大变更
106+
"^$#%#$@T#@$@#$%#@^#$#@^#@%$&$#*$!*()$*@)($*)(#@", // 纯符号测试
107+
"^$#%#$@T#@$@#$%#@^#$#@!#@%$&$#*$!*()$*@)($*)(#@", // 纯符号微变更测试 ^ -> !
108+
"^$#%#*$(**(&#@(*$#*%(@$*(#@()#@09(()$*!)#(@*(#@", // 纯符号大变更测试
109+
"🐦🐡🐣🐱💣", // Emoji(Unicode) 测试
110+
"🐦🐡💯🐱💣", // Emoji(Unicode) 小变更测试 🐣 -> 💯
111+
"💬💰💮🕷🚩" // Emoji(Unicode) 大变更测试
112+
};
113+
foreach (var t in testData)
114+
{
115+
Console.WriteLine(t);
116+
Console.WriteLine(Hash.FromString2Hex_WithoutCompress(t));
117+
Console.WriteLine(Hash.FromString2Hex(t));
118+
}
119+
}
120+
121+
[TestMethod]
122+
public void 多级压缩测试()
123+
{
124+
var testData = new[]
125+
{
126+
"SHVIOSJDifjDKljkJ$*F$W*938r5834r89we9fIOSFJOIS", // 基础 ASCII 测试
127+
"SHVIOSJDifjDKljkJ$*F$W*939r5834r89we9fIOSFJOIS", // 微变更测试 938 -> 939
128+
"DHSJKfkl5262fads43234LKgjsd#$%$%#$%fjLKSdkfJLD", // 大变更测试
129+
"的是抗拒那就客服的撒滤镜打算离开房间啊w8e9832", // 中文测试
130+
"的是抗拒那就客服的撒滤镜打算离开房间啊w8e9132", // 中文微变更测试 9832 -> 9132
131+
"的dsa是fsd抗f拒s阿f斯是25是34会3卡死了的肌肤", // 中文大变更测试
132+
"426435314513461434532561234123614325415324", // 纯数字测试
133+
"426235314513461434532561234123614325415324", // 纯数字小变更 4264 -> 4262
134+
"426435434658956844336135342782895245234324", // 纯数字大变更
135+
"^$#%#$@T#@$@#$%#@^#$#@^#@%$&$#*$!*()$*@)($*)(#@", // 纯符号测试
136+
"^$#%#$@T#@$@#$%#@^#$#@!#@%$&$#*$!*()$*@)($*)(#@", // 纯符号微变更测试 ^ -> !
137+
"^$#%#*$(**(&#@(*$#*%(@$*(#@()#@09(()$*!)#(@*(#@", // 纯符号大变更测试
138+
"🐦🐡🐣🐱💣", // Emoji(Unicode) 测试
139+
"🐦🐡💯🐱💣", // Emoji(Unicode) 小变更测试 🐣 -> 💯
140+
"💬💰💮🕷🚩" // Emoji(Unicode) 大变更测试
141+
};
142+
foreach (var item in testData)
143+
{
144+
Console.WriteLine(item);
145+
foreach (Hash.CompressLevel clv in Enum.GetValues(typeof(Hash.CompressLevel)))
146+
{
147+
Console.WriteLine($"\t{clv}\t{(clv == Hash.CompressLevel.x128 ? "" : "\t")}{Hash.FromString2Hex(item, true, clv)}");
148+
}
149+
}
150+
}
151+
152+
[TestMethod]
153+
public void BenchMark_短长度字符串Hash测试()
154+
{
155+
List<string> testData = new();
156+
Random random = new();
157+
for (var i = 0; i < 50; ++i)
158+
{
159+
var data = "";
160+
for (var j = 0; j < 1024; ++j)
161+
{
162+
data += (char)('a' + random.Next(0, 25));
163+
}
164+
testData.Add(data);
165+
}
166+
foreach (var item in testData)
167+
{
168+
Console.WriteLine(item);
169+
Console.WriteLine(Hash.FromString2Hex_WithoutCompress(item));
170+
}
171+
}
172+
173+
[TestMethod]
174+
public void BenchMark_短长度字符串原生Hash测试()
175+
{
176+
List<string> testData = new();
177+
Random random = new();
178+
for (var i = 0; i < 50; ++i)
179+
{
180+
var data = "";
181+
for (var j = 0; j < 1024; ++j)
182+
{
183+
data += (char)('a' + random.Next(0, 25));
184+
}
185+
testData.Add(data);
186+
}
187+
foreach (var item in testData)
188+
{
189+
Console.WriteLine(item);
190+
Console.WriteLine(BitConverter.ToString(BitConverter.GetBytes(item.GetHashCode())));
191+
}
192+
}
193+
194+
[TestMethod]
195+
public void BenchMark_多线程测试()
196+
{
197+
var sync = false;
198+
object locker = new();
199+
List<Thread> threads = new();
200+
Stopwatch reg = new();
201+
TimeSpan sum = new(0);
202+
int ran = 0, times = 1000;
203+
if (sync) reg.Start();
204+
for (var i = (int)1e8; i < (int)1e8 + times; ++i)
205+
{
206+
var id = i;
207+
threads.Add(new Thread(() =>
208+
{
209+
var testData = id.ToString();
210+
Stopwatch st = new();
211+
if (sync) st.Start();
212+
var hashCom = Hash.FromString2Hex(testData);
213+
if (sync) st.Stop();
214+
var rt = sync ? $"\n\t执行时间: {st.Elapsed}" : "";
215+
var output = $"{testData}{rt}\n\t{hashCom}\n";
216+
if (sync)
217+
lock (locker)
218+
{
219+
sum += st.Elapsed;
220+
}
221+
Console.WriteLine(output);
222+
if (sync) Interlocked.Increment(ref ran);
223+
}));
224+
}
225+
if (sync) reg.Stop();
226+
if (sync) Console.WriteLine($"注册用时: {reg.Elapsed}");
227+
foreach (var thread in threads)
228+
{
229+
thread.Start();
230+
}
231+
if (sync) while (ran != times)
232+
{
233+
}
234+
235+
if (sync) Console.WriteLine($"总用时: {sum}\n平均用时: {sum.TotalSeconds * 1.0 / 1000}s");
236+
}
237+
238+
[TestMethod]
239+
public void BenchMark_CPU多核并行执行测试()
240+
{
241+
const int times = 10000;
242+
Stopwatch sw = new();
243+
sw.Start();
244+
Parallel.For((int)1e8, (int)1e8 + times, (i, state) =>
245+
{
246+
//ToDo: 多核并行执行测试
247+
});
248+
}
249+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
global using Microsoft.VisualStudio.TestTools.UnitTesting;

0 commit comments

Comments
 (0)