using System.Linq;
using Xunit;
using ZeroLevel.Services.Semantic;

namespace ZeroLevel.Semantic
{
    public class SemanticTests
    {
        [Fact]
        public void WordTokenizerTest()
        {
            // Arrange            
            var line = "Хорошее понимание проекций, отражений и векторных операций (как в истинном значении скалярного (dot) и векторного (cross) произведений векторов) обычно приходит с растущим чувством беспокойства при использованием тригонометрии. ";
            var test = new string[] {
                "хорошее", "понимание", "проекций", "отражений", "и"
                , "векторных", "операций", "как", "в", "истинном"
                , "значении", "скалярного","dot","и","векторного","cross","произведений"
                ,"векторов","обычно","приходит","с","растущим","чувством","беспокойства"
                ,"при","использованием", "тригонометрии"};
            // Act
            var terms = WordTokenizer.Tokenize(line).ToArray();
            // Assert

            Assert.True(test.Length == terms.Length);
            for (int i = 0; i < terms.Length; i++)
            {
                Assert.True(string.CompareOrdinal(test[i], terms[i]) == 0);
            }

            Assert.False(WordTokenizer.Tokenize(string.Empty).Any());
            Assert.False(WordTokenizer.Tokenize(null).Any());
            Assert.False(WordTokenizer.Tokenize(" ").Any());
            Assert.False(WordTokenizer.Tokenize("                        ").Any());
            Assert.False(WordTokenizer.Tokenize(" 1 ").Any());
            Assert.False(WordTokenizer.Tokenize("1 1").Any());
            Assert.False(WordTokenizer.Tokenize(" 1 1 ").Any());
            // Assert.False(WordTokenizer.Tokenize(" 12aa 1a3 ").Any());
            // Assert.False(WordTokenizer.Tokenize(" __a1 _a1 ").Any());
        }
    }
}
