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
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BallanceTasEditor", "BallanceTasEditor\BallanceTasEditor.csproj", "{DD898514-03ED-4257-AFD1-290EEDF68113}"
|
||||
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
|
||||
Global
|
||||
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}.Release|Any CPU.ActiveCfg = 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
|
||||
{1DC1A8CD-E963-4FF8-91D9-059522419961}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1DC1A8CD-E963-4FF8-91D9-059522419961}.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}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@ -99,7 +99,7 @@
|
||||
</Compile>
|
||||
<Compile Include="Utils\FpsConverter.cs" />
|
||||
<Compile Include="Utils\TasFrame.cs" />
|
||||
<Compile Include="Utils\TasMemory.cs" />
|
||||
<Compile Include="Utils\TasStorage.cs" />
|
||||
<Compile Include="Views\MainWindow.xaml.cs">
|
||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
|
||||
@ -10,7 +10,7 @@ namespace BallanceTasEditor.Utils {
|
||||
/// <summary>
|
||||
/// 所有用于在内存中存储TAS帧的结构都必须实现此interface。
|
||||
/// </summary>
|
||||
public interface ITasMemory<T> where T : class {
|
||||
public interface ITasStorage<T> {
|
||||
/// <summary>
|
||||
/// 访问给定索引的值。
|
||||
/// </summary>
|
||||
@ -61,8 +61,8 @@ namespace BallanceTasEditor.Utils {
|
||||
/// <remarks>
|
||||
/// 其实就是把List的InsertRange的复杂度从O(n*m)修正为O(n)。
|
||||
/// </remarks>
|
||||
public class GapBufferTasMemory<T> : ITasMemory<T> where T : class {
|
||||
public GapBufferTasMemory() {
|
||||
public class GapBufferTasStorage<T> : ITasStorage<T> {
|
||||
public GapBufferTasStorage() {
|
||||
|
||||
}
|
||||
|
||||
@ -97,8 +97,8 @@ namespace BallanceTasEditor.Utils {
|
||||
/// <remarks>
|
||||
/// 由于List的InsertRange的复杂度是O(n*m),可能不符合要求。
|
||||
/// </remarks>
|
||||
public class ListTasMemory<T> : ITasMemory<T> where T : class {
|
||||
public ListTasMemory() {
|
||||
public class ListTasStorage<T> : ITasStorage<T> {
|
||||
public ListTasStorage() {
|
||||
m_Container = new List<T>();
|
||||
}
|
||||
|
||||
@ -132,8 +132,8 @@ namespace BallanceTasEditor.Utils {
|
||||
/// <summary>
|
||||
/// 传统的基于LinkedList的TAS存储器。
|
||||
/// </summary>
|
||||
public class LegacyTasMemory<T> : ITasMemory<T> where T : class {
|
||||
public LegacyTasMemory() {
|
||||
public class LegacyTasStorage<T> : ITasStorage<T> {
|
||||
public LegacyTasStorage() {
|
||||
m_Container = new LinkedList<T>();
|
||||
m_Cursor = null;
|
||||
m_CursorIndex = null;
|
||||
@ -165,7 +165,7 @@ namespace BallanceTasEditor.Utils {
|
||||
/// <exception cref="Exception"></exception>
|
||||
private void MoveToIndex(int desiredIndex) {
|
||||
// 检查基本环境
|
||||
if (desiredIndex >= GetCount())
|
||||
if (desiredIndex < 0 || desiredIndex >= GetCount())
|
||||
throw new ArgumentOutOfRangeException("Index out of range");
|
||||
if (m_Cursor is null || !m_CursorIndex.HasValue || IsEmpty())
|
||||
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>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{1DC1A8CD-E963-4FF8-91D9-059522419961}</ProjectGuid>
|
||||
<ProjectGuid>{D2E825CE-691B-48D7-8D87-D2CED1B25FF9}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>BallanceTasEditorTest</RootNamespace>
|
||||
<AssemblyName>BallanceTasEditorTest</AssemblyName>
|
||||
<RootNamespace>BallanceTasEditorTests</RootNamespace>
|
||||
<AssemblyName>BallanceTasEditorTests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
@ -49,8 +49,8 @@
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="UnitTest1.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Utils\TasStorageTests.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
@ -2,18 +2,18 @@ using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyTitle("BallanceTasEditorTest")]
|
||||
[assembly: AssemblyTitle("BallanceTasEditorTests")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("BallanceTasEditorTest")]
|
||||
[assembly: AssemblyProduct("BallanceTasEditorTests")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
[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.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