Exemplo n.º 1
0
        public void Similarity()
        {
            string text1 = "asldbcv3o9322lif;owq4o-u-4hf3fn4ofwh094f4qq43fqldadsa2GSUACUVAoo32g3f";
            string text2 = "xsbadkvivuvsd;ojve;rieorqro8@O*ho848oq34floowahoOAGAGAODOWWOoq38aqo3af";

            LettersDiffer differ = new LettersDiffer();

            differ.AddTask(text1, 0);
            differ.AddTask(text2, 0);
            double diffSimilarity = differ.DoDiff();
            double aseSimilarity  = ASESimilarityAlgorithm.CalculateSimilarity(text1, text2);

            Assert.AreEqual(aseSimilarity, diffSimilarity, 0.05, "Incorrect similarity factor");
        }
Exemplo n.º 2
0
        public void LettersDiff()
        {
            string text1 = "abcdefg;1";
            string text2 = "xabcdfg1!";

            LettersDiffer differ = new LettersDiffer();

            DiffResult             result      = differ.DoDiff(text1, text2);
            IDiffObjectsCollection firstDiffs  = result.DifferencesForFirst;
            IDiffObjectsCollection secondDiffs = result.DifferencesForSecond;

            Assert.IsTrue(firstDiffs[0].ValueEquals(new LetterDiffObject(0, 0, "e")));
            Assert.IsTrue(firstDiffs[1].ValueEquals(new LetterDiffObject(0, 0, ";")));
            Assert.IsTrue(secondDiffs[0].ValueEquals(new LetterDiffObject(0, 0, "x")));
            Assert.IsTrue(secondDiffs[1].ValueEquals(new LetterDiffObject(0, 0, "!")));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Checks is the value is equal. If not where applicable a collection of granular differences is outputed
        /// </summary>
        /// <param name="diffObject"></param>
        /// <param name="diffsForSelf"></param>
        /// <param name="diffsForArgument"></param>
        /// <param name="commonElements"></param>
        /// <returns></returns>
        public bool ValueMatches(IDiffObject diffObject, out IDiffObjectsCollection diffsForSelf, out IDiffObjectsCollection diffsForArgument, out IDiffObjectsCollection commonElements)
        {
            BaseTextDiffObject otherObject = diffObject as BaseTextDiffObject;

            diffsForSelf     = null;
            diffsForArgument = null;
            commonElements   = null;
            bool matches = false;

            if (otherObject != null)
            {
                matches = this.ValueHash == otherObject.ValueHash;

                if (!matches)
                {
                    double simFactor = ASESimilarityAlgorithm.CalculateSimilarity(this.Value, otherObject.Value);

                    LettersDiffer granularDiffer = InitGranularDiffer();

                    if (simFactor > 0 && granularDiffer != null)
                    {
                        //calculate granular differences
                        granularDiffer.AddTask(Value, Position);                         //imports the current word into a letters collection starting from the position of the current element
                        granularDiffer.AddTask(otherObject.Value, otherObject.Position);

                        double diffRatio = granularDiffer.DoDiff(0, 1);

                        diffsForSelf     = granularDiffer.GetResultingDifferences(0);
                        diffsForArgument = granularDiffer.GetResultingDifferences(1);
                        commonElements   = granularDiffer.GetResultingCommonElements(0);

                        matches = diffRatio >= this.SimilarityFactor;
                    }
                }
            }

            return(matches);
        }
Exemplo n.º 4
0
        //[TestMethod]
        public void LargeDiffTask()
        {
            //generate two large chars strings
            string first  = Utils.RandomString(10010, 12000);
            string second = Utils.RandomString(9000, 12000);

            DateTime start = DateTime.Now;

            LettersDiffer lettersDiffer = new LettersDiffer();

            DiffResult res = lettersDiffer.DoDiff(first, second);

            DateTime end = DateTime.Now;

            TimeSpan delta = end.Subtract(start);

            Assert.IsTrue(delta.Minutes == 0 && delta.Seconds < 20,
                          String.Format("Diff time was {0}", delta));

            //generate two large word strings
            first  = GenerateWordsSequence(900);
            second = GenerateWordsSequence(1020);

            WordsDiffer wordsDiffer = new WordsDiffer();

            start = DateTime.Now;

            res = wordsDiffer.DoDiff(first, second);

            end = DateTime.Now;

            delta = end.Subtract(start);

            Assert.IsTrue(delta.Minutes == 0 && delta.Seconds < 20,
                          String.Format("Diff time was {0}", delta));
        }
Exemplo n.º 5
0
        /// <summary>
        /// Executes a diff operation
        /// </summary>
        /// <param name="firstRequestId"></param>
        /// <param name="secondRequestId"></param>
        /// <param name="source"></param>
        /// <returns></returns>
        public RequestsDifferResult Diff(int firstRequestId, int secondRequestId, ITrafficDataAccessor source)
        {
            RequestsDifferResult result = null;

            if (source.ContainsId(firstRequestId) && source.ContainsId(secondRequestId))
            {
                //first retrieve the requests

                byte [] bytes1 = source.LoadRequestData(firstRequestId);
                byte [] bytes2 = source.LoadRequestData(secondRequestId);

                string firstRequest  = String.Empty;
                string secondRequest = String.Empty;

                if (bytes1 != null)
                {
                    firstRequest = GetString(bytes1);
                }

                if (bytes2 != null)
                {
                    secondRequest = GetString(bytes2);
                }

                result = new RequestsDifferResult();

                try                 //try to diff the request components
                {
                    //diff the request line
                    result = DiffFirstLine(result, firstRequest, secondRequest, 0, 0);

                    //diff the request headers
                    result = DiffHeaders(result, firstRequest, secondRequest, 0, 0);

                    //next compare POST data if available
                    result = DiffPostData(result, firstRequest, secondRequest);
                }
                catch (DiffException)                 //if the request are malformed use a regular letters differ
                {
                    LettersDiffer lettersDiffer = new LettersDiffer();
                    DiffResult    lettersResult = lettersDiffer.DoDiff(firstRequest, secondRequest);

                    result.DiffsForFirst  = lettersResult.DifferencesForFirst;
                    result.DiffsForSecond = lettersResult.DifferencesForSecond;
                }

                //done with the requests calculate the base position for the response
                result.FirstText  = firstRequest + "\n\n";
                result.SecondText = secondRequest + "\n\n";

                int firstRespBasePos  = result.FirstText.Length;
                int secondRespBasePos = result.SecondText.Length;

                //load the responses
                bytes1 = source.LoadResponseData(firstRequestId);
                bytes2 = source.LoadResponseData(secondRequestId);

                string firstResponse  = String.Empty;
                string secondResponse = String.Empty;

                if (bytes1 != null)
                {
                    firstResponse = GetString(bytes1);
                }

                if (bytes2 != null)
                {
                    secondResponse = GetString(bytes2);
                }

                try
                {
                    //diff the status line
                    result = DiffFirstLine(result, firstResponse, secondResponse, firstRespBasePos, secondRespBasePos);

                    //diff the request headers
                    result = DiffHeaders(result, firstResponse, secondResponse, firstRespBasePos, secondRespBasePos);

                    //diff the response body
                    result = DiffResponseBody(result, firstResponse, secondResponse, firstRespBasePos, secondRespBasePos);
                }
                catch (DiffException)
                {
                    //if the responses are missing the headers use a regular lines differ
                    LinesDiffer linesDiffer = new LinesDiffer();
                    linesDiffer.AddTask(firstResponse, firstRespBasePos);
                    linesDiffer.AddTask(secondResponse, secondRespBasePos);

                    linesDiffer.DoDiff();

                    result.DiffsForFirst  = linesDiffer.GetResultingDifferences(0);
                    result.DiffsForSecond = linesDiffer.GetResultingDifferences(1);
                }


                //append the responses to the result text
                result.FirstText  += firstResponse;
                result.SecondText += secondResponse;

                //sort and merge the resulting differences
                result.DiffsForFirst.MergeAll();
                result.DiffsForSecond.MergeAll();
            }

            return(result);
        }