Skip to content

Commit 5d827bb

Browse files
committed
Fix bug where some overloads didn't work
1 parent cd28633 commit 5d827bb

2 files changed

Lines changed: 94 additions & 4 deletions

File tree

Src/FastData.Tests/FastDataGeneratorTests.cs

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,82 @@ public void Generate_ThrowOnInvalidType()
9393
Assert.Throws<InvalidOperationException>(() => FastDataGenerator.Generate([DateTime.Now, DateTime.UtcNow], new FastDataConfig(StructureType.Array), new DummyGenerator()));
9494
}
9595

96+
[Fact]
97+
public void Generate_Overloads_String_Work()
98+
{
99+
string[] keys = ["a", "b", "c"];
100+
int[] values = [1, 2, 3];
101+
102+
FastDataConfig config = new FastDataConfig(StructureType.Array);
103+
config.DeduplicationMode = DeduplicationMode.Disabled;
104+
105+
ContextCaptureGenerator generator = new ContextCaptureGenerator();
106+
FastDataGenerator.Generate((ReadOnlyMemory<string>)keys, config, generator);
107+
AssertKeysOnly(generator, keys);
108+
109+
generator = new ContextCaptureGenerator();
110+
FastDataGenerator.Generate(keys, config, generator);
111+
AssertKeysOnly(generator, keys);
112+
113+
generator = new ContextCaptureGenerator();
114+
FastDataGenerator.Generate<string>((ReadOnlyMemory<string>)keys, config, generator);
115+
AssertKeysOnly(generator, keys);
116+
117+
generator = new ContextCaptureGenerator();
118+
FastDataGenerator.GenerateKeyed((ReadOnlyMemory<string>)keys, (ReadOnlyMemory<int>)values, config, generator);
119+
AssertKeysAndValues(generator, keys, values);
120+
121+
generator = new ContextCaptureGenerator();
122+
FastDataGenerator.GenerateKeyed(keys, values, config, generator);
123+
AssertKeysAndValues(generator, keys, values);
124+
125+
generator = new ContextCaptureGenerator();
126+
FastDataGenerator.GenerateKeyed<string, int>((ReadOnlyMemory<string>)keys, (ReadOnlyMemory<int>)values, config, generator);
127+
AssertKeysAndValues(generator, keys, values);
128+
129+
generator = new ContextCaptureGenerator();
130+
FastDataGenerator.GenerateKeyed(keys, values, config, generator);
131+
AssertKeysAndValues(generator, keys, values);
132+
}
133+
134+
[Fact]
135+
public void Generate_Overloads_Int32_Work()
136+
{
137+
int[] keys = [1, 2, 3];
138+
string[] values = ["v1", "v2", "v3"];
139+
140+
FastDataConfig config = new FastDataConfig(StructureType.Array);
141+
config.DeduplicationMode = DeduplicationMode.Disabled;
142+
143+
ContextCaptureGenerator generator = new ContextCaptureGenerator();
144+
FastDataGenerator.Generate((ReadOnlyMemory<int>)keys, config, generator);
145+
AssertKeysOnly(generator, keys);
146+
147+
generator = new ContextCaptureGenerator();
148+
FastDataGenerator.Generate(keys, config, generator);
149+
AssertKeysOnly(generator, keys);
150+
151+
generator = new ContextCaptureGenerator();
152+
FastDataGenerator.Generate<int>((ReadOnlyMemory<int>)keys, config, generator);
153+
AssertKeysOnly(generator, keys);
154+
155+
generator = new ContextCaptureGenerator();
156+
FastDataGenerator.GenerateKeyed((ReadOnlyMemory<int>)keys, (ReadOnlyMemory<string>)values, config, generator);
157+
AssertKeysAndValues(generator, keys, values);
158+
159+
generator = new ContextCaptureGenerator();
160+
FastDataGenerator.GenerateKeyed(keys, values, config, generator);
161+
AssertKeysAndValues(generator, keys, values);
162+
163+
generator = new ContextCaptureGenerator();
164+
FastDataGenerator.GenerateKeyed<int, string>((ReadOnlyMemory<int>)keys, (ReadOnlyMemory<string>)values, config, generator);
165+
AssertKeysAndValues(generator, keys, values);
166+
167+
generator = new ContextCaptureGenerator();
168+
FastDataGenerator.GenerateKeyed<int, string>(keys, values, config, generator);
169+
AssertKeysAndValues(generator, keys, values);
170+
}
171+
96172
[Fact]
97173
public void GenerateKeyed_HashTablePerfect_ReordersValuesToMatchSlots()
98174
{
@@ -208,4 +284,18 @@ public string Generate<TKey, TValue>(GeneratorConfig<TKey> genCfg, IContext<TVal
208284
return string.Empty;
209285
}
210286
}
211-
}
287+
288+
private static void AssertKeysOnly<TKey>(ContextCaptureGenerator generator, ReadOnlySpan<TKey> keys)
289+
{
290+
ArrayContext<TKey, byte> ctx = Assert.IsType<ArrayContext<TKey, byte>>(generator.Context);
291+
Assert.True(ctx.Values.IsEmpty);
292+
Assert.True(ctx.Keys.Span.SequenceEqual(keys));
293+
}
294+
295+
private static void AssertKeysAndValues<TKey, TValue>(ContextCaptureGenerator generator, ReadOnlySpan<TKey> keys, ReadOnlySpan<TValue> values)
296+
{
297+
ArrayContext<TKey, TValue> ctx = Assert.IsType<ArrayContext<TKey, TValue>>(generator.Context);
298+
Assert.True(ctx.Keys.Span.SequenceEqual(keys));
299+
Assert.True(ctx.Values.Span.SequenceEqual(values));
300+
}
301+
}

Src/FastData/FastDataGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static string Generate<TKey>(ReadOnlyMemory<TKey> keys, FastDataConfig fd
3232
public static string Generate<TKey>(TKey[] keys, FastDataConfig fdCfg, ICodeGenerator generator, ILoggerFactory? factory = null)
3333
{
3434
if (typeof(TKey) == typeof(string))
35-
return GenerateStringInternal((string[])(object)keys, ReadOnlyMemory<byte>.Empty, fdCfg, generator, factory);
35+
return GenerateStringInternal(new ReadOnlyMemory<string>((string[])(object)keys), ReadOnlyMemory<byte>.Empty, fdCfg, generator, factory);
3636

3737
return GenerateNumericInternal((ReadOnlyMemory<TKey>)keys, ReadOnlyMemory<byte>.Empty, fdCfg, generator, factory);
3838
}
@@ -48,7 +48,7 @@ public static string GenerateKeyed<TKey, TValue>(ReadOnlyMemory<TKey> keys, Read
4848
public static string GenerateKeyed<TKey, TValue>(TKey[] keys, TValue[] values, FastDataConfig fdCfg, ICodeGenerator generator, ILoggerFactory? factory = null)
4949
{
5050
if (typeof(TKey) == typeof(string))
51-
return GenerateStringInternal((ReadOnlyMemory<string>)(object)keys, (ReadOnlyMemory<TValue>)values, fdCfg, generator, factory);
51+
return GenerateStringInternal(new ReadOnlyMemory<string>((string[])(object)keys), new ReadOnlyMemory<TValue>(values), fdCfg, generator, factory);
5252

5353
return GenerateNumericInternal((ReadOnlyMemory<TKey>)keys, (ReadOnlyMemory<TValue>)values, fdCfg, generator, factory);
5454
}
@@ -60,7 +60,7 @@ public static string Generate(ReadOnlyMemory<string> keys, FastDataConfig fdCfg,
6060

6161
public static string Generate(string[] keys, FastDataConfig fdCfg, ICodeGenerator generator, ILoggerFactory? factory = null)
6262
{
63-
return GenerateStringInternal((ReadOnlyMemory<string>)keys, ReadOnlyMemory<byte>.Empty, fdCfg, generator, factory);
63+
return GenerateStringInternal(new ReadOnlyMemory<string>(keys), ReadOnlyMemory<byte>.Empty, fdCfg, generator, factory);
6464
}
6565

6666
public static string GenerateKeyed<TValue>(ReadOnlyMemory<string> keys, ReadOnlyMemory<TValue> values, FastDataConfig fdCfg, ICodeGenerator generator, ILoggerFactory? factory = null)

0 commit comments

Comments
 (0)