refactor(storage): rename TasMemory to TasStorage and update references
- Renamed TasMemory.cs file to TasStorage.cs - Updated project file reference from TasMemory to TasStorage - Removed unused test project files and configurations - Fixed solution file project name and GUID references - Cleaned up obsolete MSTest configuration files
This commit is contained in:
@ -5,7 +5,7 @@ VisualStudioVersion = 17.14.36414.22
|
|||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BallanceTasEditor", "BallanceTasEditor\BallanceTasEditor.csproj", "{DD898514-03ED-4257-AFD1-290EEDF68113}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BallanceTasEditor", "BallanceTasEditor\BallanceTasEditor.csproj", "{DD898514-03ED-4257-AFD1-290EEDF68113}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BallanceTasEditorTest", "BallanceTasEditorTest\BallanceTasEditorTest.csproj", "{1DC1A8CD-E963-4FF8-91D9-059522419961}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BallanceTasEditorTests", "BallanceTasEditorTests\BallanceTasEditorTests.csproj", "{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -17,10 +17,10 @@ Global
|
|||||||
{DD898514-03ED-4257-AFD1-290EEDF68113}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{DD898514-03ED-4257-AFD1-290EEDF68113}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{DD898514-03ED-4257-AFD1-290EEDF68113}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{DD898514-03ED-4257-AFD1-290EEDF68113}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{DD898514-03ED-4257-AFD1-290EEDF68113}.Release|Any CPU.Build.0 = Release|Any CPU
|
{DD898514-03ED-4257-AFD1-290EEDF68113}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{1DC1A8CD-E963-4FF8-91D9-059522419961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{1DC1A8CD-E963-4FF8-91D9-059522419961}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{1DC1A8CD-E963-4FF8-91D9-059522419961}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{1DC1A8CD-E963-4FF8-91D9-059522419961}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@ -99,7 +99,7 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Utils\FpsConverter.cs" />
|
<Compile Include="Utils\FpsConverter.cs" />
|
||||||
<Compile Include="Utils\TasFrame.cs" />
|
<Compile Include="Utils\TasFrame.cs" />
|
||||||
<Compile Include="Utils\TasMemory.cs" />
|
<Compile Include="Utils\TasStorage.cs" />
|
||||||
<Compile Include="Views\MainWindow.xaml.cs">
|
<Compile Include="Views\MainWindow.xaml.cs">
|
||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
|
|||||||
@ -10,7 +10,7 @@ namespace BallanceTasEditor.Utils {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 所有用于在内存中存储TAS帧的结构都必须实现此interface。
|
/// 所有用于在内存中存储TAS帧的结构都必须实现此interface。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface ITasMemory<T> where T : class {
|
public interface ITasStorage<T> {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 访问给定索引的值。
|
/// 访问给定索引的值。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -61,8 +61,8 @@ namespace BallanceTasEditor.Utils {
|
|||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// 其实就是把List的InsertRange的复杂度从O(n*m)修正为O(n)。
|
/// 其实就是把List的InsertRange的复杂度从O(n*m)修正为O(n)。
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public class GapBufferTasMemory<T> : ITasMemory<T> where T : class {
|
public class GapBufferTasStorage<T> : ITasStorage<T> {
|
||||||
public GapBufferTasMemory() {
|
public GapBufferTasStorage() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,8 +97,8 @@ namespace BallanceTasEditor.Utils {
|
|||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// 由于List的InsertRange的复杂度是O(n*m),可能不符合要求。
|
/// 由于List的InsertRange的复杂度是O(n*m),可能不符合要求。
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public class ListTasMemory<T> : ITasMemory<T> where T : class {
|
public class ListTasStorage<T> : ITasStorage<T> {
|
||||||
public ListTasMemory() {
|
public ListTasStorage() {
|
||||||
m_Container = new List<T>();
|
m_Container = new List<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,8 +132,8 @@ namespace BallanceTasEditor.Utils {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 传统的基于LinkedList的TAS存储器。
|
/// 传统的基于LinkedList的TAS存储器。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LegacyTasMemory<T> : ITasMemory<T> where T : class {
|
public class LegacyTasStorage<T> : ITasStorage<T> {
|
||||||
public LegacyTasMemory() {
|
public LegacyTasStorage() {
|
||||||
m_Container = new LinkedList<T>();
|
m_Container = new LinkedList<T>();
|
||||||
m_Cursor = null;
|
m_Cursor = null;
|
||||||
m_CursorIndex = null;
|
m_CursorIndex = null;
|
||||||
@ -165,7 +165,7 @@ namespace BallanceTasEditor.Utils {
|
|||||||
/// <exception cref="Exception"></exception>
|
/// <exception cref="Exception"></exception>
|
||||||
private void MoveToIndex(int desiredIndex) {
|
private void MoveToIndex(int desiredIndex) {
|
||||||
// 检查基本环境
|
// 检查基本环境
|
||||||
if (desiredIndex >= GetCount())
|
if (desiredIndex < 0 || desiredIndex >= GetCount())
|
||||||
throw new ArgumentOutOfRangeException("Index out of range");
|
throw new ArgumentOutOfRangeException("Index out of range");
|
||||||
if (m_Cursor is null || !m_CursorIndex.HasValue || IsEmpty())
|
if (m_Cursor is null || !m_CursorIndex.HasValue || IsEmpty())
|
||||||
throw new InvalidOperationException("Can not move cursor when container is empty.");
|
throw new InvalidOperationException("Can not move cursor when container is empty.");
|
||||||
@ -1,11 +0,0 @@
|
|||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace BallanceTasEditorTest {
|
|
||||||
[TestClass]
|
|
||||||
public class UnitTest1 {
|
|
||||||
[TestMethod]
|
|
||||||
public void TestMethod1() {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -5,11 +5,11 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
<ProjectGuid>{1DC1A8CD-E963-4FF8-91D9-059522419961}</ProjectGuid>
|
<ProjectGuid>{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}</ProjectGuid>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BallanceTasEditorTest</RootNamespace>
|
<RootNamespace>BallanceTasEditorTests</RootNamespace>
|
||||||
<AssemblyName>BallanceTasEditorTest</AssemblyName>
|
<AssemblyName>BallanceTasEditorTests</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
@ -49,8 +49,8 @@
|
|||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="UnitTest1.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Utils\TasStorageTests.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
@ -2,18 +2,18 @@ using System.Reflection;
|
|||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
[assembly: AssemblyTitle("BallanceTasEditorTest")]
|
[assembly: AssemblyTitle("BallanceTasEditorTests")]
|
||||||
[assembly: AssemblyDescription("")]
|
[assembly: AssemblyDescription("")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("")]
|
[assembly: AssemblyCompany("")]
|
||||||
[assembly: AssemblyProduct("BallanceTasEditorTest")]
|
[assembly: AssemblyProduct("BallanceTasEditorTests")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2025")]
|
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
[assembly: Guid("1dc1a8cd-e963-4ff8-91d9-059522419961")]
|
[assembly: Guid("d2e825ce-691b-48d7-8d87-d2ced1b25ff9")]
|
||||||
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
164
BallanceTasEditorTests/Utils/TasStorageTests.cs
Normal file
164
BallanceTasEditorTests/Utils/TasStorageTests.cs
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using BallanceTasEditor.Utils;
|
||||||
|
|
||||||
|
namespace BallanceTasEditorTests.Utils {
|
||||||
|
[TestClass]
|
||||||
|
public class TasStorageTests {
|
||||||
|
|
||||||
|
private static readonly int[] PROBE = { 10, 20, 30, 40, 50 };
|
||||||
|
|
||||||
|
private static IEnumerable<object[]> TasStorageInstanceProvider {
|
||||||
|
get {
|
||||||
|
yield return new object[] { new ListTasStorage<int>() };
|
||||||
|
yield return new object[] { new LegacyTasStorage<int>() };
|
||||||
|
// TODO: Add GapBufferTasStorage once we finish it.
|
||||||
|
//yield return new object[] { new GapBufferTasStorage<int>() };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Visit函数独立测试。
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[DynamicData(nameof(TasStorageInstanceProvider))]
|
||||||
|
public void VisitTest(ITasStorage<int> storage) {
|
||||||
|
// 空时访问
|
||||||
|
Assert.ThrowsException<ArgumentOutOfRangeException>(() => storage.Visit(-1));
|
||||||
|
Assert.ThrowsException<ArgumentOutOfRangeException>(() => storage.Visit(0));
|
||||||
|
Assert.ThrowsException<ArgumentOutOfRangeException>(() => storage.Visit(1));
|
||||||
|
|
||||||
|
// 设置数据
|
||||||
|
storage.Insert(0, PROBE);
|
||||||
|
// 访问数据
|
||||||
|
Assert.ThrowsException<ArgumentOutOfRangeException>(() => storage.Visit(-1));
|
||||||
|
for (int i = 0; i < PROBE.Length; i++) {
|
||||||
|
Assert.AreEqual(storage.Visit(i), PROBE[i]);
|
||||||
|
}
|
||||||
|
Assert.ThrowsException<ArgumentOutOfRangeException>(() => storage.Visit(PROBE.Length));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Insert函数独立测试。
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[DynamicData(nameof(TasStorageInstanceProvider))]
|
||||||
|
public void InsertTest(ITasStorage<int> storage) {
|
||||||
|
// 需要在不同的存储器上,分别检测在空的时候插入,
|
||||||
|
// 和在非空时的头,中,尾分别插入的结果。
|
||||||
|
|
||||||
|
// 先检测空插入
|
||||||
|
Assert.ThrowsException<ArgumentOutOfRangeException>(() => storage.Insert(-1, PROBE));
|
||||||
|
Assert.ThrowsException<ArgumentOutOfRangeException>(() => storage.Insert(1, PROBE));
|
||||||
|
storage.Insert(0, PROBE);
|
||||||
|
for (int i = 0; i < PROBE.Length; i++) {
|
||||||
|
Assert.AreEqual(storage.Visit(i), PROBE[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 再检测有数据的插入,分别在头尾和中间进行
|
||||||
|
var indices = new int[] { 0, PROBE.Length / 2, PROBE.Length - 1, PROBE.Length };
|
||||||
|
foreach (var index in indices) {
|
||||||
|
// 清空,一次插入,然后二次插入
|
||||||
|
storage.Clear();
|
||||||
|
storage.Insert(0, PROBE);
|
||||||
|
storage.Insert(index, PROBE);
|
||||||
|
|
||||||
|
// 用List做正确模拟
|
||||||
|
var expected = new List<int>();
|
||||||
|
expected.AddRange(PROBE);
|
||||||
|
expected.InsertRange(index, PROBE);
|
||||||
|
|
||||||
|
// 检查结果
|
||||||
|
Assert.AreEqual(storage.GetCount(), expected.Count);
|
||||||
|
for (int i = 0; i < expected.Count; i++) {
|
||||||
|
Assert.AreEqual(storage.Visit(i), expected[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Remove函数独立测试。
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[DynamicData(nameof(TasStorageInstanceProvider))]
|
||||||
|
public void RemoveTest(ITasStorage<int> storage) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clear函数独立测试。
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[DynamicData(nameof(TasStorageInstanceProvider))]
|
||||||
|
public void ClearTest(ITasStorage<int> storage) {
|
||||||
|
// 设置数据后清空
|
||||||
|
storage.Insert(0, PROBE);
|
||||||
|
storage.Clear();
|
||||||
|
|
||||||
|
// 检查是否为空
|
||||||
|
Assert.IsTrue(storage.IsEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// IsEmpty函数独立测试。
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[DynamicData(nameof(TasStorageInstanceProvider))]
|
||||||
|
public void IsEmptyTest(ITasStorage<int> storage) {
|
||||||
|
// 检查是否为空
|
||||||
|
Assert.IsTrue(storage.IsEmpty());
|
||||||
|
|
||||||
|
// 插入数据后再检查
|
||||||
|
storage.Insert(0, PROBE);
|
||||||
|
Assert.IsFalse(storage.IsEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// GetCount函数独立测试。
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[DynamicData(nameof(TasStorageInstanceProvider))]
|
||||||
|
public void GetCountTest(ITasStorage<int> storage) {
|
||||||
|
// 检查长度为0
|
||||||
|
Assert.AreEqual(storage.GetCount(), 0);
|
||||||
|
|
||||||
|
// 插入数据后再检查
|
||||||
|
storage.Insert(0, PROBE);
|
||||||
|
Assert.AreEqual(storage.GetCount(), PROBE.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 混合检查Visit,Clear,GetCount,IsEmpty。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="storage"></param>
|
||||||
|
[TestMethod]
|
||||||
|
[DynamicData(nameof(TasStorageInstanceProvider))]
|
||||||
|
public void HybridTest(ITasStorage<int> storage) {
|
||||||
|
// 检查空和大小
|
||||||
|
Assert.IsTrue(storage.IsEmpty());
|
||||||
|
Assert.AreEqual(storage.GetCount(), 0);
|
||||||
|
|
||||||
|
// 设置内容
|
||||||
|
storage.Insert(0, PROBE);
|
||||||
|
// 并再次检查大小
|
||||||
|
Assert.IsFalse(storage.IsEmpty());
|
||||||
|
Assert.AreEqual(storage.GetCount(), PROBE.Length);
|
||||||
|
|
||||||
|
// 访问数据
|
||||||
|
var len = PROBE.Length;
|
||||||
|
for (int i = 0; i < len; ++i) {
|
||||||
|
Assert.AreEqual(storage.Visit(i), PROBE[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空数据
|
||||||
|
storage.Clear();
|
||||||
|
// 再次检查数据
|
||||||
|
Assert.IsTrue(storage.IsEmpty());
|
||||||
|
Assert.AreEqual(storage.GetCount(), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user