public void Overlapping_AreNot_NonOverlapping()
        {
            var d1 = DoubleConverter.FromFloatingPointBinaryString("101");
            var d2 = DoubleConverter.FromFloatingPointBinaryString("10");

            Assert.IsFalse(ExpansionExtensions.AreNonOverlapping(d1, d2));
        }
        public void NonOverlapping_Are_NonOverlapping()
        {
            var d1 = DoubleConverter.FromFloatingPointBinaryString("1100");
            var d2 = DoubleConverter.FromFloatingPointBinaryString("-10.1");

            Assert.IsTrue(ExpansionExtensions.AreNonOverlapping(d1, d2));
        }
        public void TwoSum_ResultsNonOverlappingNonAdjacent_Random()
        {
            var rnd       = new RandomDouble(1); // Use a specific seed to ensure repeatability
            int testCount = 1000000;

            for (int i = 0; i < testCount; i++)
            {
                double a = rnd.NextDoubleFullRange();
                double b = rnd.NextDoubleFullRange();
                double x; double y;

                EA.TwoSum(a, b, out x, out y);
                Assert.IsTrue(ExpansionExtensions.AreNonOverlapping(x, y));
                Assert.IsTrue(ExpansionExtensions.AreNonAdjacent(x, y));
            }
        }
        /// <summary>
        /// Parses a HTML table in file to get all the card data listed within.
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static IEnumerable <InvestigatorCard> Parse(string filepath, InvestigatorCardType type)
        {
            List <InvestigatorCard> cards = new List <InvestigatorCard>();
            HtmlDocument            doc   = new HtmlDocument();

            doc.Load(filepath);

            foreach (HtmlNode rowNode in doc.DocumentNode.Descendants("tr"))
            {
                IEnumerable <HtmlNode> cardNodes = rowNode.Descendants("td");
                string   name         = cardNodes.ElementAt(0).InnerText.Trim();
                string   traitsString = cardNodes.ElementAt(1).InnerText.Replace('-', ',').Replace('—', ',');
                HtmlNode expNode      = cardNodes.ElementAt(2);
                HtmlNode expLinkNode  = expNode.SelectSingleNode(".//a");
                string   expString    = "Core";

                if (expLinkNode != null)
                {
                    expString = expLinkNode.GetAttributeValue("title", "Core");
                }

                List <string> traits = new List <string>();
                foreach (string traitRaw in traitsString.Split(','))
                {
                    traits.Add(traitRaw.ToUpper().Trim());
                }

                Expansion        exp = ExpansionExtensions.FromString(expString);
                InvestigatorCard card;

                if (type == InvestigatorCardType.Asset)
                {
                    int cost = int.Parse(cardNodes.ElementAt(3).InnerText);
                    card = new AssetCard(name, type, exp, traits, cost);
                }
                else
                {
                    card = new InvestigatorCard(name, type, exp, traits);
                }

                cards.Add(card);
            }

            return(cards);
        }
        public void FastTwoSum_ResultsNonOverlappingNonAdjacent_Random()
        {
            var rnd            = new RandomDouble(1); // Use a specific seed to ensure repeatability
            int testCount      = 1000000;
            int testsPerformed = 0;

            for (int i = 0; i < testCount; i++)
            {
                double a = rnd.NextDoubleFullRange();
                double b = rnd.NextDoubleFullRange();
                double x; double y;

                if (System.Math.Abs(a) >= System.Math.Abs(b))
                {
                    testsPerformed++;
                    EA.FastTwoSum(a, b, out x, out y);
                    Assert.IsTrue(ExpansionExtensions.AreNonOverlapping(x, y));
                    Assert.IsTrue(ExpansionExtensions.AreNonAdjacent(x, y));
                }
            }

            Debug.Print("FastTwoSum_MaintainsNonOverlapping_Random Tested {0} out of {1} tries", testsPerformed, testCount);
        }