aboutsummaryrefslogtreecommitdiff
path: root/lib/Utils/tests
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-10-14 15:41:17 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2023-10-14 15:41:17 -0400
commit62f9e126912fa9a620a361fb5b88d33506e096fb (patch)
tree78665fe8516c559821aa4358ca9e2734e475415a /lib/Utils/tests
parent0f0c991891b6be076a9a367627201eceeb6d354e (diff)
some refactoring and tests
Diffstat (limited to 'lib/Utils/tests')
-rw-r--r--lib/Utils/tests/Async/AsyncAccessSerializerTests.cs27
-rw-r--r--lib/Utils/tests/IO/VnMemoryStreamTests.cs99
-rw-r--r--lib/Utils/tests/Memory/MemoryUtilTests.cs2
3 files changed, 114 insertions, 14 deletions
diff --git a/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs b/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs
index 7119d21..3c9bde7 100644
--- a/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs
+++ b/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs
@@ -2,12 +2,12 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
+using System.Linq;
using System.Threading;
+using System.Diagnostics;
using System.Threading.Tasks;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Runtime.CompilerServices;
-using System.Linq;
namespace VNLib.Utils.Async.Tests
{
@@ -101,7 +101,7 @@ namespace VNLib.Utils.Async.Tests
int maxCount = 64;
- Task[] asyncArr = new int[maxCount].Select(async p =>
+ Task[] asyncArr = new int[maxCount].Select(p => Task.Run(async () =>
{
//Take a lock then random delay, then release
Task entry = serializer.WaitAsync(DEFAULT_KEY);
@@ -119,7 +119,7 @@ namespace VNLib.Utils.Async.Tests
serializer.Release(DEFAULT_KEY);
- }).ToArray();
+ })).ToArray();
Task.WaitAll(asyncArr);
}
@@ -149,7 +149,7 @@ namespace VNLib.Utils.Async.Tests
using CancellationTokenSource cts = new(500);
- Task[] asyncArr = new int[maxCount].Select(async p =>
+ Task[] asyncArr = new int[maxCount].Select(p => Task.Run(async () =>
{
//Take a lock then random delay, then release
await serializer.WaitAsync(DEFAULT_KEY, cts.Token);
@@ -159,7 +159,7 @@ namespace VNLib.Utils.Async.Tests
serializer.Release(DEFAULT_KEY);
- }).ToArray();
+ })).ToArray();
Task.WaitAll(asyncArr);
@@ -175,18 +175,19 @@ namespace VNLib.Utils.Async.Tests
//Alloc serailzer base on string
IAsyncAccessSerializer<string> serializer = new AsyncAccessSerializer<string>(100, 100, StringComparer.Ordinal);
- int maxCount = 128;
+ const int maxCount = 128;
+ const int itterations = 20;
string test = "";
Stopwatch timer = new();
using CancellationTokenSource cts = new(500);
- for (int i = 0; i < 10; i++)
+ for (int i = 0; i < itterations; i++)
{
test = "";
timer.Restart();
- Task[] asyncArr = new int[maxCount].Select(async p =>
+ Task[] asyncArr = new int[maxCount].Select(p => Task.Run(async () =>
{
//Take a lock then random delay, then release
await serializer.WaitAsync(DEFAULT_KEY, cts.Token);
@@ -196,7 +197,7 @@ namespace VNLib.Utils.Async.Tests
serializer.Release(DEFAULT_KEY);
- }).ToArray();
+ })).ToArray();
Task.WaitAll(asyncArr);
@@ -208,12 +209,12 @@ namespace VNLib.Utils.Async.Tests
using SemaphoreSlim slim = new(1,1);
- for (int i = 0; i < 10; i++)
+ for (int i = 0; i < itterations; i++)
{
test = "";
timer.Restart();
- Task[] asyncArr = new int[maxCount].Select(async p =>
+ Task[] asyncArr = new int[maxCount].Select(p => Task.Run(async () =>
{
//Take a lock then random delay, then release
await slim.WaitAsync(cts.Token);
@@ -222,7 +223,7 @@ namespace VNLib.Utils.Async.Tests
test += "0";
slim.Release();
- }).ToArray();
+ })).ToArray();
Task.WaitAll(asyncArr);
diff --git a/lib/Utils/tests/IO/VnMemoryStreamTests.cs b/lib/Utils/tests/IO/VnMemoryStreamTests.cs
new file mode 100644
index 0000000..3eb95ce
--- /dev/null
+++ b/lib/Utils/tests/IO/VnMemoryStreamTests.cs
@@ -0,0 +1,99 @@
+using System;
+
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+using VNLib.Utils.Memory;
+using VNLib.Utils.Extensions;
+
+namespace VNLib.Utils.IO.Tests
+{
+ [TestClass()]
+ public class VnMemoryStreamTests
+ {
+ [TestMethod()]
+ public void VnMemoryStreamConstructorTest()
+ {
+ using (VnMemoryStream vms = new())
+ {
+ Assert.IsTrue(vms.Length == 0);
+ Assert.IsTrue(vms.Position == 0);
+ Assert.IsTrue(vms.CanSeek == true);
+ Assert.IsTrue(vms.CanRead == true);
+ Assert.IsTrue(vms.CanWrite == true);
+ }
+
+ //Test heap
+ IUnmangedHeap privateHeap = MemoryUtil.InitializeNewHeapForProcess();
+
+ using (VnMemoryStream vms = new(privateHeap, 1024, false))
+ {
+ Assert.IsTrue(vms.Length == 0);
+ Assert.IsTrue(vms.Position == 0);
+ Assert.IsTrue(vms.CanSeek == true);
+ Assert.IsTrue(vms.CanRead == true);
+ Assert.IsTrue(vms.CanWrite == true);
+ }
+
+
+ //Create from mem handle
+ MemoryHandle<byte> handle = privateHeap.Alloc<byte>(byte.MaxValue);
+
+ using (VnMemoryStream vms = VnMemoryStream.ConsumeHandle(handle, handle.GetIntLength(), false))
+ {
+ Assert.IsTrue(vms.Length == byte.MaxValue);
+ Assert.IsTrue(vms.Position == 0);
+ Assert.IsTrue(vms.CanSeek == true);
+ Assert.IsTrue(vms.CanRead == true);
+ Assert.IsTrue(vms.CanWrite == true);
+ }
+
+ //From existing data
+ ReadOnlySpan<byte> testSpan = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
+ using (VnMemoryStream vms = new (privateHeap, testSpan))
+ {
+ Assert.IsTrue(vms.Length == testSpan.Length);
+ Assert.IsTrue(vms.Position == 0);
+
+ //Check values copied
+ while (vms.Position < vms.Length)
+ {
+ byte test = testSpan[(int)vms.Position];
+ Assert.IsTrue(vms.ReadByte() == test);
+ }
+ }
+
+ ReadOnlyMemory<byte> testMemory = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
+ using (VnMemoryStream vms = new (privateHeap, testMemory))
+ {
+ Assert.IsTrue(vms.Length == testMemory.Length);
+ Assert.IsTrue(vms.Position == 0);
+
+ //Check values copied
+ while(vms.Position < vms.Length)
+ {
+ byte test = testMemory.Span[(int)vms.Position];
+ Assert.IsTrue(vms.ReadByte() == test);
+ }
+ }
+ }
+
+ [TestMethod()]
+ public void VnMemoryStreamReadonlyTest()
+ {
+ using VnMemoryStream vms = new(MemoryUtil.Shared, 0, false);
+
+ Assert.IsTrue(vms.CanWrite == true);
+
+ //Convert to readonly
+ _ = VnMemoryStream.CreateReadonly(vms);
+
+ Assert.IsTrue(vms.CanSeek == true);
+ Assert.IsTrue(vms.CanRead == true);
+ Assert.IsTrue(vms.CanWrite == false);
+
+ //Try to write
+ Assert.ThrowsException<NotSupportedException>(() => vms.WriteByte(0));
+
+ }
+ }
+} \ No newline at end of file
diff --git a/lib/Utils/tests/Memory/MemoryUtilTests.cs b/lib/Utils/tests/Memory/MemoryUtilTests.cs
index 2166eea..64f94ff 100644
--- a/lib/Utils/tests/Memory/MemoryUtilTests.cs
+++ b/lib/Utils/tests/Memory/MemoryUtilTests.cs
@@ -388,7 +388,7 @@ namespace VNLib.Utils.Memory.Tests
IUnmangedHeap heap = MemoryUtil.InitializeNewHeapForProcess();
//Init wrapper and dispose
- using TrackedHeapWrapper wrapper = new(heap);
+ using TrackedHeapWrapper wrapper = new(heap, true);
//Confirm 0 stats
HeapStatistics preTest = wrapper.GetCurrentStats();