2019-12-11 16:59:44 +08:00

75 lines
2.6 KiB
C#

using System;
using System.Threading.Tasks;
using Xunit;
namespace IP2Region.Test.xUnit
{
public class SearchTest : IDisposable
{
private readonly DbSearcher _search;
public String GetRandomIP()
{
return new Random(Guid.NewGuid().GetHashCode()).Next(0, 255).ToString() + "."
+ new Random(Guid.NewGuid().GetHashCode()).Next(0, 255).ToString() + "."
+ new Random(Guid.NewGuid().GetHashCode()).Next(0, 255).ToString() + "."
+ new Random(Guid.NewGuid().GetHashCode()).Next(0, 255).ToString();
}
public SearchTest()
{
_search = new DbSearcher(Environment.CurrentDirectory + @"\DB\ip2region.db");
}
[Fact]
public void Search_Test()
{
string memResult = _search.MemorySearch("223.104.246.20").Region;
string binarySearchResult = _search.BinarySearch("223.104.246.20").Region;
string binaryTreeSearchResult = _search.BtreeSearch("223.104.246.20").Region;
Assert.NotNull(memResult);
Assert.NotNull(binarySearchResult);
Assert.NotNull(binaryTreeSearchResult);
Assert.Equal(memResult, binarySearchResult);
Assert.Equal(binaryTreeSearchResult, memResult);
}
[Fact]
public void Search_Correct_Test()
{
for (int i = 0; i < 1000000; i++)
{
var newIp=GetRandomIP();
string memResult = _search.MemorySearch(newIp).Region;
string binarySearchResult = _search.BinarySearch(newIp).Region;
string binaryTreeSearchResult = _search.BtreeSearch(newIp).Region;
Assert.True(memResult == binarySearchResult && memResult == binaryTreeSearchResult);
}
}
[Fact]
public async Task SearchAsync_Test()
{
// We don't need the synchronizeContext, so just set to false
var memResult = await _search.MemorySearchAsync("183.192.62.65").ConfigureAwait(false);
var binarySearchResult = await _search.BinarySearchAsync("183.192.62.65").ConfigureAwait(false);
var bTreeSearchResult = await _search.BtreeSearchAsync("183.192.62.65").ConfigureAwait(false);
Assert.NotNull(memResult.Region);
Assert.NotNull(binarySearchResult.Region);
Assert.NotNull(bTreeSearchResult.Region);
Assert.Equal(memResult.Region, binarySearchResult.Region);
Assert.Equal(bTreeSearchResult.Region, memResult.Region);
}
public void Dispose()
{
_search.Dispose();
}
}
}