Skip to content

Commit

Permalink
Performance test for the merge method.
Browse files Browse the repository at this point in the history
  • Loading branch information
rodoufu committed Nov 15, 2018
1 parent 6e5bc05 commit 8bd3515
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 2 deletions.
14 changes: 14 additions & 0 deletions NeoDataStructure/StringTools.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
namespace com.github.neoresearch.NeoDataStructure
{
using System;
using System.Linq;
using System.Text;

/// <summary>
Expand Down Expand Up @@ -56,5 +58,17 @@ public static string Hash(this string[] node)
/// <param name="text">Hex string to be converted.</param>
/// <returns>The integer value.</returns>
public static int FromHex(this string text) => int.Parse(text, System.Globalization.NumberStyles.HexNumber);

/// <summary>
/// Generates a random string.
/// </summary>
/// <param name="length">The required size.</param>
/// <returns>The generated string</returns>
public static string RandomString(int length)
{
var random = new Random();
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
}
}
}
4 changes: 2 additions & 2 deletions NeoDataStructureTest/MerklePatriciaMergeTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,8 @@ public void Merge()
["zza"] = "zza".CompactEncodeString()
};
Assert.True(mpD.Validade());
System.Console.WriteLine($"C:{mpC}");
System.Console.WriteLine($"merge:{mpMerge}");
// System.Console.WriteLine($"C:{mpC}");
// System.Console.WriteLine($"merge:{mpMerge}");
Assert.Equal(mpC, mpD);

Assert.Equal(mpC, mpMerge);
Expand Down
95 changes: 95 additions & 0 deletions NeoDataStructureTest/MerklePatriciaParallelTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
namespace com.github.neoresearch.NeoDataStructureTest
{
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using NeoDataStructure;
using Xunit;

public class MerklePatriciaParallelTest
{
private MerklePatricia mpA = new MerklePatricia();
private MerklePatricia mpB = new MerklePatricia();
private MerklePatricia mpC = new MerklePatricia();
private MerklePatricia mpD = new MerklePatricia();
private List<string> listaA = new List<string>();
private List<string> listaB = new List<string>();
private List<string> listaC = new List<string>();
private List<string> listaD = new List<string>();

[Fact]
public void ParallelThreds()
{
var amount = 10000;
var prefixSize = 20;
var size = 40;
var prefixA = StringTools.RandomString(prefixSize);
var prefixB = StringTools.RandomString(prefixSize);
var prefixC = StringTools.RandomString(prefixSize);
var prefixD = StringTools.RandomString(prefixSize);
for (var i = 0; i < amount; i++)
{
listaA.Add(prefixA + StringTools.RandomString(size));
listaB.Add(prefixB + StringTools.RandomString(size));
listaC.Add(prefixC + StringTools.RandomString(size));
listaD.Add(prefixD + StringTools.RandomString(size));
}

var threadA = new Thread(RunThreadA);
var threadB = new Thread(RunThreadB);
var threadC = new Thread(RunThreadC);
var threadD = new Thread(RunThreadD);
var timeThreds = Stopwatch.StartNew();
var timeThredsAndMerge = Stopwatch.StartNew();
threadA.Start();
threadB.Start();
threadC.Start();
threadD.Start();

System.Console.WriteLine("Começou");

threadA.Join();
threadB.Join();
threadC.Join();
threadD.Join();

timeThreds.Stop();
var mpMerged = mpA.Merge(mpB);
mpMerged = mpMerged.Merge(mpC);
mpMerged = mpMerged.Merge(mpD);
timeThredsAndMerge.Stop();

var timeNoThred = Stopwatch.StartNew();
var mpNoThread = new MerklePatricia();
RunThread(mpNoThread, listaA);
RunThread(mpNoThread, listaB);
RunThread(mpNoThread, listaC);
RunThread(mpNoThread, listaD);
timeNoThred.Stop();

System.Console.WriteLine($"time using threds: {timeThreds.ElapsedMilliseconds}ms");
System.Console.WriteLine(
$"time using threds: {timeThredsAndMerge.ElapsedMilliseconds}ms (with merge time)");
System.Console.WriteLine($"time using no thred: {timeNoThred.ElapsedMilliseconds}ms");
System.Console.WriteLine(
$"{timeThreds.ElapsedMilliseconds},{timeThredsAndMerge.ElapsedMilliseconds},{timeNoThred.ElapsedMilliseconds}");
System.Console.WriteLine(
$"{timeNoThred.ElapsedMilliseconds}/{timeThredsAndMerge.ElapsedMilliseconds}={(double) timeNoThred.ElapsedMilliseconds / timeThredsAndMerge.ElapsedMilliseconds}");

Assert.Equal(mpMerged, mpNoThread);
}

private void RunThread(MerklePatricia mp, IEnumerable<string> lista)
{
foreach (var it in lista)
{
mp[it] = it;
}
}

private void RunThreadA() => RunThread(mpA, listaA);
private void RunThreadB() => RunThread(mpB, listaB);
private void RunThreadC() => RunThread(mpC, listaC);
private void RunThreadD() => RunThread(mpD, listaD);
}
}
6 changes: 6 additions & 0 deletions NeoDataStructureTest/StringToolsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,11 @@ public void ToHex()
Assert.Equal(15, "f".FromHex());
Assert.Equal(16, "10".FromHex());
}

[Fact]
public void RandomString()
{
Assert.Equal(10, StringTools.RandomString(10).Length);
}
}
}

0 comments on commit 8bd3515

Please sign in to comment.