Beispiel #1
0
        public void TestResolveItemsWithJudgements()
        {
            var testInput = new AmericanEmployment();
            var options   = new AmericanDomusOpesOptions
            {
                Inception = DateTime.Today.AddYears(-1),
                SumTotal  = 75000D
            };

            testInput.RandomizeAllItems(options);

            var testSubject = new AmericanDeductions(testInput);

            options.IsPayingChildSupport = true;
            testSubject.RandomizeAllItems(options);

            Assert.IsNotNull(testSubject.MyItems);
            Assert.AreNotEqual(0, testSubject.MyItems.Count);

            var testResultItem = testSubject.MyItems.FirstOrDefault(x => x.Name == "Child Support");

            Assert.IsNotNull(testResultItem);
            Assert.AreNotEqual(0.ToPecuniam(), testResultItem.Value);
            Console.WriteLine(testResultItem.Value);
        }
Beispiel #2
0
        public void TestGetEmploymentDeductionName2Rates()
        {
            var testInput   = new AmericanEmployment();
            var testSubject = new AmericanDeductions(testInput);

            var testOptions =
                new AmericanDomusOpesOptions {
                Inception = DateTime.Today.AddYears(-1)
            };
            var testResult = testSubject.GetEmploymentDeductionName2Rates(testOptions);

            Assert.IsNotNull(testResult);
            Assert.AreNotEqual(0, testResult.Count);

            foreach (var tr in testResult)
            {
                Console.WriteLine(tr);
            }

            var testResultSum = testResult.Select(kv => kv.Value).Sum();

            Assert.AreEqual(1D, Math.Round(testResultSum));

            Assert.IsNotNull(testOptions.SumTotal);
            Assert.AreNotEqual(0D, testOptions.SumTotal);

            Console.WriteLine(testOptions.SumTotal);
        }
Beispiel #3
0
        public void TestDeductionsAllPresent()
        {
            var testInput = new AmericanEmployment();

            var options = new AmericanDomusOpesOptions
            {
                Inception = DateTime.Today.AddYears(-1),
                SumTotal  = 75000D
            };

            testInput.RandomizeAllItems(options);

            //check input is good
            Assert.IsNotNull(testInput.MyItems);
            Assert.AreNotEqual(0, testInput.MyItems.Count);

            var diff = Math.Abs(testInput.Total.ToDouble() - 75000);

            Console.WriteLine(diff);
            Assert.IsTrue(Math.Round(diff) == 0.0D);

            var testSubject = new AmericanDeductions(testInput);

            testSubject.RandomizeAllItems(null);

            var testResults        = testSubject.GetAt(DateTime.Today.AddDays(-182));
            var allDeductionsItesm = WealthBaseTests.GetExpectedNamesFromXml("deduction");

            Assert.IsNotNull(testResults);
            Assert.IsNotNull(allDeductionsItesm);

            Assert.AreEqual(allDeductionsItesm.Count, testResults.Length);
        }
Beispiel #4
0
        public void TestGetGroupNames2Portions()
        {
            var testInput   = new AmericanEmployment();
            var testSubject = new AmericanDeductions(testInput);

            var testResults = testSubject.GetGroupNames2Portions(null);

            Assert.IsTrue(testResults.Any(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.INSURANCE));
            Assert.AreNotEqual(0, testResults.First(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.INSURANCE).Item2);

            Assert.IsTrue(testResults.Any(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.EMPLOYMENT));
            Assert.AreNotEqual(0, testResults.First(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.EMPLOYMENT).Item2);

            Assert.IsTrue(testResults.Any(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.GOVERNMENT));
            Assert.AreNotEqual(0, testResults.First(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.GOVERNMENT).Item2);

            Assert.IsTrue(testResults.Any(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.JUDGMENTS));
            Assert.AreEqual(0, testResults.First(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.JUDGMENTS).Item2);

            var testOptions = new AmericanDomusOpesOptions();

            testOptions.AddGivenDirectly(AmericanDomusOpesBase.DeductionGroupNames.JUDGMENTS, 1000);

            testResults = testSubject.GetGroupNames2Portions(testOptions);
            Assert.IsTrue(testResults.Any(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.JUDGMENTS));
            Assert.AreNotEqual(0, testResults.First(t => t.Item1 == AmericanDomusOpesBase.DeductionGroupNames.JUDGMENTS).Item2);
        }
Beispiel #5
0
        /// <summary>
        /// The reusable\common parts of <see cref="RandomizeAllItems"/>
        /// </summary>
        /// <param name="grp2Rate"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        protected internal virtual NamedTradeline[] GetItemsForRange(Tuple <string, double> grp2Rate, AmericanDomusOpesOptions options)
        {
            options = options ?? AmericanDomusOpesOptions.RandomOpesOptions();

            var itemsout = new List <NamedTradeline>();

            var name2Op = GetItems2Functions();

            var grpName = grp2Rate.Item1;
            var grpRate = grp2Rate.Item2;

            var useFxMapping = name2Op.ContainsKey(grpName);

            var grpRates = useFxMapping
                ? name2Op[grpName](options)
                : GetItemNames2Portions(grpName, options)
                           .ToDictionary(k => k.Item1, k => k.Item2);

            foreach (var item in grpRates.Keys)
            {
                var p = GetNamedReceivableForItemAndGroup(item, grpName, options, grpRates[item] * grpRate);
                itemsout.Add(p);
            }

            return(itemsout.ToArray());
        }
Beispiel #6
0
        public void TestAmericanFinAffidavit()
        {
            var options = AmericanDomusOpesOptions.RandomOpesOptions(
                Domus.US.AmericanUtil.RandomAmericanFirstName(Gender.Female),
                Domus.US.AmericanUtil.RandomAmericanLastName());

            var income = AmericanIncome.RandomIncome(options);

            options.SumTotal = income.Total.ToDouble();
            var assets   = AmericanAssets.RandomAssets(options);
            var expenses = AmericanExpenses.RandomExpenses(options);

            var allItems = income.ToData(KindsOfTextCase.Kabab);

            foreach (var asset in assets.ToData(KindsOfTextCase.Kabab))
            {
                allItems.Add(asset.Key, asset.Value);
            }
            foreach (var expense in expenses.ToData(KindsOfTextCase.Kabab))
            {
                allItems.Add(expense.Key, expense.Value);
            }

            foreach (var key in allItems.Keys)
            {
                Console.WriteLine($"{key}, {allItems[key]}");
            }
        }
Beispiel #7
0
        public void TestGetGroupNames2Portions()
        {
            var testInput = new AmericanDomusOpesOptions();

            testInput.AddGivenDirectly("Real Property", 7800);
            testInput.AddGivenDirectly("Securities", 1000);

            testInput.SumTotal = 12000;
            var testSubject = new AmericanAssets();
            var testResult  = testSubject.GetGroupNames2Portions(testInput);

            Assert.IsNotNull(testResult);
            Assert.AreNotEqual(0, testResult.Count);

            var testResultSum = testResult.Select(i => i.Item2).Sum();

            Assert.IsTrue(Math.Round(testResultSum) == 1.0D);

            var testResult00 = testResult.FirstOrDefault(k => k.Item1 == "Real Property");

            Assert.IsNotNull(testResult00);
            var testResult01 = testResult.FirstOrDefault(k => k.Item1 == "Securities");

            Assert.IsNotNull(testResult01);

            foreach (var tr in testResult)
            {
                System.Diagnostics.Debug.WriteLine(tr);
            }

            Assert.AreEqual(Math.Round(7800.0D / 12000, 3), Math.Round(testResult00.Item2, 3));
            Assert.AreEqual(Math.Round(1000.0D / 12000, 3), Math.Round(testResult01.Item2, 3));
        }
Beispiel #8
0
        /// <summary>
        /// Factory method to get a list of group-name to group-rate using
        /// the given <see cref="options"/>
        /// </summary>
        /// <param name="options"></param>
        /// <returns>
        /// A set of item names to some percent where the sum of all the names is 1 (i.e. 100%).
        /// </returns>
        protected internal virtual List <Tuple <string, double> > GetGroupNames2Portions(AmericanDomusOpesOptions options)
        {
            options = options ?? AmericanDomusOpesOptions.RandomOpesOptions();

            var grpNames = GetGroupNames(DivisionName);

            return(options.GetNames2Portions(grpNames.ToArray()));
        }
Beispiel #9
0
        public void TestGetItemNames2Portions()
        {
            var testInput = new AmericanDomusOpesOptions();
            var grpName   = "Institutional";

            testInput.AddGivenDirectly("Partnerships", grpName, 7800);
            testInput.AddGivenDirectly("Fellowships", grpName, 1000);
            testInput.AddGivenDirectly("Annuity", grpName, 1000);

            testInput.SumTotal = 15000;

            var testSubject = new AmericanIncome();

            var testResults =
                testSubject.GetItemNames2Portions(grpName, testInput);

            Assert.IsNotNull(testResults);
            Assert.AreNotEqual(0, testResults.Count);

            var testResultSum = testResults.Select(kv => kv.Item2).Sum();

            System.Diagnostics.Debug.WriteLine(testResultSum);
            Assert.IsTrue(Math.Round(testResultSum) == 1.0D);

            //expect that when SumTotal is unassigned the ratios align exactly with assigned values
            testInput = new AmericanDomusOpesOptions();
            testInput.AddGivenDirectly("Partnerships", grpName, 7800);
            testInput.AddGivenDirectly("Fellowships", grpName, 1000);
            testInput.AddGivenDirectly("Annuity", grpName, 1000);

            testSubject = new AmericanIncome();
            testResults =
                testSubject.GetItemNames2Portions(grpName, testInput);

            Assert.IsNotNull(testResults);
            Assert.AreNotEqual(0, testResults.Count);

            testResultSum = testResults.Select(kv => kv.Item2).Sum();
            System.Diagnostics.Debug.WriteLine(testResultSum);

            var trWages = testResults.FirstOrDefault(kv => kv.Item1 == "Partnerships");
            var trOt    = testResults.FirstOrDefault(kv => kv.Item1 == "Fellowships");
            var trBonus = testResults.FirstOrDefault(kv => kv.Item1 == "Annuity");

            Assert.IsNotNull(trWages);
            Assert.IsNotNull(trOt);
            Assert.IsNotNull(trBonus);

            Assert.AreEqual(0.796D, Math.Round(trWages.Item2, 3));
            Assert.AreEqual(0.102D, Math.Round(trOt.Item2, 3));
            Assert.AreEqual(0.102D, Math.Round(trBonus.Item2, 3));

            foreach (var tr in testResults)
            {
                System.Diagnostics.Debug.WriteLine(tr);
            }
        }
        public void TestGetClone()
        {
            var testInput = new AmericanDomusOpesOptions
            {
                Inception              = DateTime.Today.AddYears(-1),
                DueFrequency           = new TimeSpan(1, 0, 0, 0),
                Rate                   = RandPortions.DiminishingRate.Fast,
                SumTotal               = 88000,
                IsVehiclePaidOff       = true,
                NumberOfCreditCards    = 3,
                NumberOfVehicles       = 2,
                IsRenting              = true,
                IsPayingChildSupport   = true,
                IsPayingSpousalSupport = true
            };

            testInput.AddPossibleZeroOuts("abc", "xyz");
            testInput.ChildrenDobs.Add(DateTime.Today.AddYears(-2));
            testInput.ChildrenDobs.Add(DateTime.Today.AddYears(-4));
            testInput.AddGivenDirectly("name00", "group00", 9900);
            testInput.AddGivenDirectly("name01", "group00", 1100);

            var testResult = testInput.GetClone();

            Assert.IsNotNull(testResult);
            Assert.AreEqual(testInput.Inception, testResult.Inception);
            Assert.AreEqual(testInput.DueFrequency, testResult.DueFrequency);
            Assert.AreEqual(testInput.Rate, testResult.Rate);
            Assert.AreEqual(testInput.SumTotal, testResult.SumTotal);
            Assert.AreEqual(testInput.IsVehiclePaidOff, testResult.IsVehiclePaidOff);
            Assert.AreEqual(testInput.NumberOfCreditCards, testResult.NumberOfCreditCards);
            Assert.AreEqual(testInput.NumberOfVehicles, testResult.NumberOfVehicles);
            Assert.AreEqual(testInput.IsRenting, testResult.IsRenting);
            Assert.AreEqual(testInput.IsPayingChildSupport, testResult.IsPayingChildSupport);
            Assert.AreEqual(testInput.IsPayingSpousalSupport, testResult.IsPayingSpousalSupport);
            Assert.IsTrue(testResult.IsPayingChildSupport);

            Assert.AreEqual(2, testResult.PossibleZeroOutCount);

            Assert.IsNotNull(testResult.GetChildrenAges());
            Assert.AreEqual(2, testResult.GetChildrenAges().Count);

            Assert.IsTrue(testResult.AnyGivenDirectly());
            Assert.AreEqual(2, testResult.GivenDirectlyCount);

            Assert.IsNotNull(testResult.FactorOptions);

            var testInputFr  = testInput.FactorOptions;
            var testResultFt = testResult.FactorOptions;

            Assert.AreEqual(testInputFr.DateOfBirth, testResultFt.DateOfBirth);
            Assert.AreEqual(testInputFr.EducationLevel, testResultFt.EducationLevel);
            Assert.AreEqual(testInputFr.Gender, testResultFt.Gender);
            Assert.AreEqual(testInputFr.MaritalStatus, testResultFt.MaritalStatus);
            Assert.AreEqual(testInputFr.Race, testResultFt.Race);
            Assert.AreEqual(testInputFr.Region, testResultFt.Region);
        }
Beispiel #11
0
        /// <summary>
        /// While <see cref="GetItemsForRange(AmericanDomusOpesOptions)"/> deals with all the
        /// items of this <see cref="DivisionName"/> this is concerned with one-item-at-a-time.
        /// </summary>
        /// <param name="itemName"></param>
        /// <param name="grpName"></param>
        /// <param name="options"></param>
        /// <param name="rate"></param>
        /// <returns></returns>
        protected internal virtual NamedTradeline GetNamedReceivableForItemAndGroup(string itemName, string grpName, AmericanDomusOpesOptions options, double rate)
        {
            options = options ?? AmericanDomusOpesOptions.RandomOpesOptions();

            var calcValueR = CalcValue((options.SumTotal ?? 0).ToPecuniam(), rate);
            var p          = NamedTradeline.RandomNamedTradelineWithHistoryToSum(itemName, grpName, calcValueR,
                                                                                 options.DueFrequency, options.Inception, options.Terminus);

            return(p);
        }
Beispiel #12
0
        /// <summary>
        /// Factory method to get a list of item-name to item-rate using
        /// the given <see cref="options"/>
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="options"></param>
        /// <returns>
        /// A set of item names to some percent where the sum of all the names is 1 (i.e. 100%).
        /// </returns>
        protected internal virtual List <Tuple <string, double> > GetItemNames2Portions(string groupName, AmericanDomusOpesOptions options)
        {
            options = options ?? AmericanDomusOpesOptions.RandomOpesOptions();

            //get all the item names we are targeting
            var itemNames = GetItemNames(DivisionName).Where(x =>
                                                             String.Equals(x.GetName(KindsOfNames.Group), groupName, StringComparison.OrdinalIgnoreCase)).ToArray();

            return(options.GetNames2Portions(itemNames.Select(k => k.Name).ToArray()));
        }
Beispiel #13
0
        /// <summary>
        /// The reusable\common parts of <see cref="RandomizeAllItems"/>
        /// </summary>
        /// <param name="options"></param>
        /// <returns></returns>
        protected internal virtual NamedTradeline[] GetItemsForRange(AmericanDomusOpesOptions options)
        {
            options = options ?? AmericanDomusOpesOptions.RandomOpesOptions();

            var itemsout = new List <NamedTradeline>();

            var grp2Rates = GetGroupNames2Portions(options);

            foreach (var grp in grp2Rates)
            {
                itemsout.AddRange(GetItemsForRange(grp, options));
            }
            return(itemsout.ToArray());
        }
        public void TestGetPaycheck()
        {
            var options = new AmericanDomusOpesOptions {
                IsRenting = true
            };

            options.FactorOptions.Gender      = Gender.Female;
            options.FactorOptions.DateOfBirth = Etx.RandomAdultBirthDate();

            var testResult = options.GetRandomYearlyIncome(null, 1.0.ToPecuniam());

            Console.WriteLine(testResult);
            Assert.IsNotNull(testResult);
            Assert.IsTrue(testResult.Amount > 0.0M);
        }
Beispiel #15
0
        public void TestResolveItems()
        {
            var testOptions = new AmericanDomusOpesOptions {
                SumTotal = 10000.0D
            };
            var testSubject = new AmericanExpenses();

            testSubject.RandomizeAllItems(testOptions);

            Assert.IsNotNull(testSubject.MyItems);
            Assert.AreNotEqual(0, testSubject.MyItems.Count);

            foreach (var item in testSubject.MyItems)
            {
                Console.WriteLine(item);
            }
        }
Beispiel #16
0
        public void TestDeductionsRatioToIncome()
        {
            var testInput    = new AmericanEmployment();
            var annualIncome = 75000.ToPecuniam();

            var options = new AmericanDomusOpesOptions
            {
                Inception = DateTime.Today.AddYears(-1),
                SumTotal  = annualIncome.ToDouble()
            };

            testInput.RandomizeAllItems(options);

            //check input is good
            Assert.IsNotNull(testInput.MyItems);
            Assert.AreNotEqual(0, testInput.MyItems.Count);

            var diff = Math.Abs(testInput.Total.ToDouble() - annualIncome.ToDouble());

            Console.WriteLine(diff);
            Assert.IsTrue(Math.Round(diff) == 0.0D);

            var testSubject = new AmericanDeductions(testInput);

            testSubject.RandomizeAllItems(null);

            Assert.IsNotNull(testSubject.MyItems);
            Assert.AreNotEqual(0, testSubject.MyItems.Count);

            var totalDeductions = testSubject.Total;

            Assert.AreNotEqual(0.0D.ToPecuniam(), totalDeductions);
            //expect deductions as a negative number
            Assert.IsTrue(totalDeductions.ToDouble() < 0.0D);
            Console.WriteLine(totalDeductions);

            var ratio = Math.Abs(Math.Round(((annualIncome + totalDeductions) / annualIncome).ToDouble(), 2));

            Assert.IsTrue(ratio < 1.0);
            Assert.IsTrue(ratio > 0.5);
            Console.WriteLine(totalDeductions);
        }
        public void TestGetAtLeastOneVehicle()
        {
            var countOfTrue = 0D;
            var total       = 512;

            for (var i = 0; i < total; i++)
            {
                var tr = AmericanDomusOpesOptions.GetAtLeastOneVehicle(UrbanCentric.City | UrbanCentric.Large);
                if (tr)
                {
                    countOfTrue += 1;
                }
            }

            var testResult = Math.Round(countOfTrue / total, 3) * 100;

            Assert.IsTrue(testResult < 39D);
            Assert.IsTrue(testResult > 21D);
            Console.WriteLine(testResult);
        }
Beispiel #18
0
 /// <summary>
 /// Gets all the items of the given Opes type as random values based on the
 /// options.
 /// </summary>
 /// <param name="options"></param>
 protected internal abstract void RandomizeAllItems(AmericanDomusOpesOptions options);