Skip to content

Commit 659ab2f

Browse files
author
SirJosh3917
authored
Merge pull request #3 from SirJosh3917/rewrite
Rewrite
2 parents 99082c5 + 9bc4a00 commit 659ab2f

14 files changed

+168
-20
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# StringDB
22
<p align="center">
3-
<img src="https://raw.githubusercontent.com/SirJosh3917/StringDB/master/icons/banner_ad.png" alt="StringDB" />
3+
<img src="https://rawcdn.githack.com/SirJosh3917/StringDB/master/icons/banner_ad.png" alt="StringDB" />
44
</p>
55

66
[![AppVeyor Build Status][badge_appveyor_build_image]][badge_appveyor_build_page]
@@ -61,5 +61,5 @@ using(var db = StringDatabase.Create())
6161
[section_understandable]: #understandable-
6262
[section_simple]: #simple-
6363

64-
[wiki_stringdb_format]: .
65-
[wiki_tutorials]: .
64+
[wiki_stringdb_format]: https://github.com/SirJosh3917/StringDB/wiki/StringDB-10.0.0-Format
65+
[wiki_tutorials]: https://github.com/SirJosh3917/StringDB/wiki/Getting-Started

src/StringDB.Tests/StringDB10_0_0Tests.cs

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using StringDB.IO.Compatibility;
77

88
using System;
9+
using System.Collections.Generic;
910
using System.IO;
1011
using System.Linq;
1112
using System.Text;
@@ -16,10 +17,49 @@ namespace StringDB.Tests
1617
{
1718
public static class StringDB10_0_0Tests
1819
{
20+
public class IntegrationTests
21+
{
22+
[Fact]
23+
public void IntegrationTest()
24+
{
25+
if (File.Exists("stringdb.db"))
26+
File.Delete("stringdb.db");
27+
28+
using (var db = StringDatabase.Create(File.Open("stringdb.db", FileMode.OpenOrCreate)))
29+
{
30+
db.Insert("test", "value");
31+
db.Insert("test", "value2");
32+
db.Insert("test", "value3");
33+
34+
db.EnumerateAggressively(3)
35+
.Should().BeEquivalentTo(new[]
36+
{
37+
new KeyValuePair<string, string>("test", "value"),
38+
new KeyValuePair<string, string>("test", "value2"),
39+
new KeyValuePair<string, string>("test", "value3"),
40+
});
41+
}
42+
43+
using (var db = StringDatabase.Create(File.Open("stringdb.db", FileMode.OpenOrCreate)))
44+
{
45+
db.Insert("test", "value4");
46+
47+
db.EnumerateAggressively(3)
48+
.Should().BeEquivalentTo(new[]
49+
{
50+
new KeyValuePair<string, string>("test", "value"),
51+
new KeyValuePair<string, string>("test", "value2"),
52+
new KeyValuePair<string, string>("test", "value3"),
53+
new KeyValuePair<string, string>("test", "value4")
54+
});
55+
}
56+
}
57+
}
58+
1959
public static (MemoryStream ms, StringDB10_0_0LowlevelDatabaseIODevice io) Generate()
2060
{
2161
var ms = new MemoryStream();
22-
var io = new StringDB10_0_0LowlevelDatabaseIODevice(ms);
62+
var io = new StringDB10_0_0LowlevelDatabaseIODevice(ms, true);
2363

2464
return (ms, io);
2565
}
@@ -57,7 +97,7 @@ public void TooLargeJumpRead()
5797
{
5898
var (ms, io) = Generate();
5999

60-
Action throws = () => io.WriteJump(0xDEAD_BEEF);
100+
Action throws = () => io.WriteJump(0xDEAD_BEEF_5);
61101

62102
throws.Should()
63103
.ThrowExactly<ArgumentException>();
@@ -73,6 +113,20 @@ public void AtEOF()
73113
throws.Should()
74114
.ThrowExactly<NotSupportedException>();
75115
}
116+
117+
[Fact]
118+
public void ReadingVeryLargeVariableInt()
119+
{
120+
var (ms, io) = Generate();
121+
122+
Action throws = () => io.ReadValue(8);
123+
124+
io.Reset();
125+
ms.Write(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0b0_1111111, 0x00 });
126+
127+
throws.Should()
128+
.ThrowExactly<NotSupportedException>();
129+
}
76130
}
77131

78132
public static class Write
@@ -204,6 +258,22 @@ public void JumpShortened()
204258
.Should()
205259
.Be(1337 - pos);
206260
}
261+
262+
[Fact]
263+
public void WritesJumpPosition()
264+
{
265+
var (ms, io) = Generate();
266+
267+
io.JumpPos = 0xDEADBEEF5;
268+
269+
io.Dispose();
270+
271+
ms.Position = 0;
272+
var jumpPos = new byte[8];
273+
ms.Read(jumpPos, 0, jumpPos.Length);
274+
275+
jumpPos.Should().BeEquivalentTo(BitConverter.GetBytes((long)0xDEADBEEF5));
276+
}
207277
}
208278
}
209279

src/StringDB/Fluency/CacheDatabaseExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using StringDB.Databases;
22

3+
using System.Runtime.CompilerServices;
4+
35
namespace StringDB.Fluency
46
{
57
/// <summary>
@@ -14,6 +16,7 @@ public static class CacheDatabaseExtensions
1416
/// <typeparam name="TValue">The type of value.</typeparam>
1517
/// <param name="database">The database to cache results from.</param>
1618
/// <returns>A database with caching.</returns>
19+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1720
public static IDatabase<TKey, TValue> WithCache<TKey, TValue>(this IDatabase<TKey, TValue> database)
1821
=> new CacheDatabase<TKey, TValue>(database);
1922
}

src/StringDB/Fluency/DatabaseIODeviceBuilder.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.IO;
6+
using System.Runtime.CompilerServices;
67

78
namespace StringDB.Fluency
89
{
@@ -22,6 +23,7 @@ public static class DatabaseIODeviceBuilderExtensions
2223
/// <param name="stream">The stream to use.</param>
2324
/// <param name="leaveStreamOpen">If the stream should be left open after disposing of the <see cref="IDatabaseIODevice"/>.</param>
2425
/// <returns>A <see cref="StoneVaultIODevice"/>.</returns>
26+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2527
public static IDatabaseIODevice UseStoneVault
2628
(
2729
this DatabaseIODeviceBuilder builder,

src/StringDB/Fluency/IODatabaseExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using StringDB.IO;
33

44
using System;
5+
using System.Runtime.CompilerServices;
56

67
namespace StringDB.Fluency
78
{
@@ -16,6 +17,7 @@ public static class IODatabaseExtensions
1617
/// <param name="builder">The builder.</param>
1718
/// <param name="databaseIODevice">The <see cref="IDatabaseIODevice"/> to pass to the IODatabase.</param>
1819
/// <returns>An IODatabase.</returns>
20+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1921
public static IDatabase<byte[], byte[]> UseIODatabase
2022
(
2123
this DatabaseBuilder builder,
@@ -29,6 +31,7 @@ IDatabaseIODevice databaseIODevice
2931
/// <param name="builder">The builder.</param>
3032
/// <param name="databaseIODevice">A delegate that allows for fluent building of an IDatabaseIODevice.</param>
3133
/// <returns>An IODatabase.</returns>
34+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
3235
public static IDatabase<byte[], byte[]> UseIODatabase
3336
(
3437
this DatabaseBuilder builder,

src/StringDB/Fluency/MemoryDatabaseExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using StringDB.Databases;
22

33
using System.Collections.Generic;
4+
using System.Runtime.CompilerServices;
45

56
namespace StringDB.Fluency
67
{
@@ -16,6 +17,7 @@ public static class MemoryDatabaseExtensions
1617
/// <typeparam name="TValue">The type of value to use.</typeparam>
1718
/// <param name="builder">The builder.</param>
1819
/// <returns>A <see cref="MemoryDatabase{TKey,TValue}"/></returns>
20+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1921
public static IDatabase<TKey, TValue> UseMemoryDatabase<TKey, TValue>
2022
(
2123
this DatabaseBuilder builder
@@ -30,6 +32,7 @@ this DatabaseBuilder builder
3032
/// <param name="builder">The builder.</param>
3133
/// <param name="data">The data to prefill it with.</param>
3234
/// <returns>A <see cref="MemoryDatabase{TKey,TValue}"/></returns>
35+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
3336
public static IDatabase<TKey, TValue> UseMemoryDatabase<TKey, TValue>
3437
(
3538
this DatabaseBuilder builder,

src/StringDB/Fluency/ThreadLockDatabaseExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using StringDB.Databases;
22

3+
using System.Runtime.CompilerServices;
4+
35
namespace StringDB.Fluency
46
{
57
/// <summary>
@@ -14,6 +16,7 @@ public static class ThreadLockDatabaseExtensions
1416
/// <typeparam name="TValue">The type of value.</typeparam>
1517
/// <param name="database">The database to put a lock on.</param>
1618
/// <returns>A <see cref="ThreadLockDatabase{TKey,TValue}"/>.</returns>
19+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1720
public static IDatabase<TKey, TValue> WithThreadLock<TKey, TValue>(this IDatabase<TKey, TValue> database)
1821
=> new ThreadLockDatabase<TKey, TValue>(database);
1922
}

src/StringDB/Fluency/TransformDatabaseExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using StringDB.Databases;
22

3+
using System.Runtime.CompilerServices;
4+
35
namespace StringDB.Fluency
46
{
57
/// <summary>
@@ -18,6 +20,7 @@ public static class TransformDatabaseExtensions
1820
/// <param name="keyTransformer">A transformer for the keys.</param>
1921
/// <param name="valueTransformer">A transformer for the values.</param>
2022
/// <returns>A <see cref="TransformDatabase{TPreTransformKey,TPreTransformValue,TPostTransformKey,TPostTransformValue}"/>.</returns>
23+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2124
public static IDatabase<TPostKey, TPostValue> WithTransform<TPreKey, TPreValue, TPostKey, TPostValue>
2225
(
2326
this IDatabase<TPreKey, TPreValue> database,

src/StringDB/IDatabase.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ public interface IDatabase<TKey, TValue> : IEnumerable<KeyValuePair<TKey, ILazyL
4848
void InsertRange(KeyValuePair<TKey, TValue>[] items);
4949
}
5050

51+
/// <summary>
52+
/// Handy extensions for a database.
53+
/// </summary>
5154
public static class DatabaseExtensions
5255
{
5356
/// <summary>

0 commit comments

Comments
 (0)