private static async Task PrintVector <T>(FdbVector <T> vector, IFdbReadOnlyTransaction tr) { bool first = true; var sb = new StringBuilder(); await tr.GetRange(vector.Subspace.Keys.ToRange()).ForEachAsync((kvp) => { if (!first) { sb.Append(", "); } else { first = false; } sb.Append(vector.Subspace.Keys.DecodeLast <long>(kvp.Key) + ":" + kvp.Value.ToAsciiOrHexaString()); }); Console.WriteLine("> Vector: (" + sb.ToString() + ")"); }
private static async Task PrintVector <T>(FdbVector <T> .State vector, IFdbReadOnlyTransaction tr) { bool first = true; var sb = new StringBuilder(); await tr.GetRange(vector.Subspace.ToRange()).ForEachAsync((kvp) => { if (!first) { sb.Append(", "); } else { first = false; } sb.Append($"{vector.Subspace.DecodeLast<long>(kvp.Key)}:{kvp.Value:P}"); }); Log("> Vector: (" + sb.ToString() + ")"); }
public async Task Test_Vector_Fast() { using (var db = await OpenTestPartitionAsync()) { var location = await GetCleanDirectory(db, "vector"); var vector = new FdbVector <Slice>(location, Slice.Empty, KeyValueEncoders.Values.BinaryEncoder); using (var tr = db.BeginTransaction(this.Cancellation)) { Console.WriteLine("Clearing any previous values in the vector"); vector.Clear(tr); Console.WriteLine(); Console.WriteLine("MODIFIERS"); // Set + Push vector.Set(tr, 0, Slice.FromInt32(1)); vector.Set(tr, 1, Slice.FromInt32(2)); await vector.PushAsync(tr, Slice.FromInt32(3)); await PrintVector(vector, tr); // Swap await vector.SwapAsync(tr, 0, 2); await PrintVector(vector, tr); // Pop Console.WriteLine("> Popped: " + await vector.PopAsync(tr)); await PrintVector(vector, tr); // Clear vector.Clear(tr); Console.WriteLine("> Pop empty: " + await vector.PopAsync(tr)); await PrintVector(vector, tr); await vector.PushAsync(tr, Slice.FromAscii("foo")); Console.WriteLine("> Pop size 1: " + await vector.PopAsync(tr)); await PrintVector(vector, tr); Console.WriteLine(); Console.WriteLine("CAPACITY OPERATIONS"); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("> Empty: " + await vector.EmptyAsync(tr)); Console.WriteLine("> Resizing to length 5"); await vector.ResizeAsync(tr, 5); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("Settings values"); vector.Set(tr, 0, Slice.FromAscii("Portez")); vector.Set(tr, 1, Slice.FromAscii("ce vieux")); vector.Set(tr, 2, Slice.FromAscii("whisky")); vector.Set(tr, 3, Slice.FromAscii("au juge")); vector.Set(tr, 4, Slice.FromAscii("blond qui")); vector.Set(tr, 5, Slice.FromAscii("fume")); await PrintVector(vector, tr); Console.WriteLine("FRONT"); Console.WriteLine("> " + await vector.FrontAsync(tr)); Console.WriteLine("BACK"); Console.WriteLine("> " + await vector.BackAsync(tr)); Console.WriteLine(); Console.WriteLine("ELEMENT ACCESS"); Console.WriteLine("> Index 0: " + await vector.GetAsync(tr, 0)); Console.WriteLine("> Index 5: " + await vector.GetAsync(tr, 5)); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine(); Console.WriteLine("RESIZING"); Console.WriteLine("> Resizing to 3"); await vector.ResizeAsync(tr, 3); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("> Resizing to 3 again"); await vector.ResizeAsync(tr, 3); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("> Resizing to 6"); await vector.ResizeAsync(tr, 6); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine(); Console.WriteLine("SPARSE TEST"); Console.WriteLine("> Popping sparse vector"); await vector.PopAsync(tr); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("> Resizing to 4"); await vector.ResizeAsync(tr, 4); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("> Adding 'word' to index 10, resize to 25"); vector.Set(tr, 10, Slice.FromAscii("word")); await vector.ResizeAsync(tr, 25); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("> Swapping with sparse element"); await vector.SwapAsync(tr, 10, 15); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); Console.WriteLine("> Swapping sparse elements"); await vector.SwapAsync(tr, 12, 13); await PrintVector(vector, tr); Console.WriteLine("> Size: " + await vector.SizeAsync(tr)); } } }