private static AmountOfStockSubmited GetAmountOfStockSubmittedFor(List <KeyValuePair <bool, FractionLong> > checkAndVotesPairs, FractionLong allowedVotesAmount) { if (checkAndVotesPairs.Where(p => p.Key == true).All(p => p.Value == FractionLong.Zero)) { return(AmountOfStockSubmited.VotesArentSubmited); } FractionLong value = FractionLong.Zero; checkAndVotesPairs.ForEach(pair => { if (pair.Key == true) { value += AmountOfStockCalculatorsCommon.GetVotesFor(pair.Value, allowedVotesAmount); } }); if (value <= allowedVotesAmount) { return(AmountOfStockSubmited.LessOrEqualThanThereIsOnPack); } else { return(AmountOfStockSubmited.MoreThanThereIsOnPack); } }
public void QCumulativeCandidateVoteTests(bool yesCheck, long yesVotes, long expectedResultLong) { const bool doesntMatter2 = false; const long doesntMatter3 = 0; const int doesntMatter4 = 0; const int doesntMatter5 = 1; var candidatePoint = new QCumCandidatePoint(doesntMatter5, Fields.VotesDocField(yesVotes.FL())); var qCum = new QCumulative(doesntMatter5, new List <QCumCandidatePoint> { candidatePoint }, new QCumulativeAdditionalMarks(Fields.CheckBoxDocField(yesCheck), Fields.CheckBoxDocField(doesntMatter2), Fields.VotesDocField(doesntMatter3.FL()), Fields.CheckBoxDocField(doesntMatter2), Fields.VotesDocField(doesntMatter3.FL(), doesntMatter4))); var result = _calculator.GetVotesForCandidateField(qCum, candidatePoint); var expected = new FractionLong(expectedResultLong); Assert.That(result, Is.EqualTo(expected)); }
public void QCumulativeTests(bool yesCheck, int firstVote, int secondVote, int thirdVote, bool noCheck, int noVotes, bool absCheck, int absVotes, AmountOfStockSubmited expected) { var allowedVotesAmount = new FractionLong(100); var qCum = new QCumulative(1, new List <QCumCandidatePoint> { new QCumCandidatePoint(1, Fields.VotesDocField(firstVote)), new QCumCandidatePoint(2, Fields.VotesDocField(secondVote)), new QCumCandidatePoint(3, Fields.VotesDocField(thirdVote)), }, new QCumulativeAdditionalMarks( Fields.CheckBoxDocField(yesCheck), Fields.CheckBoxDocField(noCheck), Fields.VotesDocField(noVotes), Fields.CheckBoxDocField(absCheck), Fields.VotesDocField(absVotes)) ) { PositionsCount = 10 }; var result = _calculator.GetAmountOfStockSubmited(qCum, allowedVotesAmount); Assert.That(result, Is.EqualTo(expected)); }
public static VotesDocField VotesDocField(FractionLong value, ErrorLevel errorLevel) { return(new VotesDocField(null, Page, value) { ErrorLevel = errorLevel }); }
private static QCumulative GetQCumulative(int positionsCount, FractionLong assigned) { var qCumulative = new QCumulative(1, GetCandidatePoints(assigned), GetAdditionalMarks()); qCumulative.AdditionalMarks.YesCheckBoxField.Value = true; qCumulative.PositionsCount = positionsCount; return(qCumulative); }
public void Test2(int assignedIntegral, int assignedNumerator, int assignedDenominator, bool expectedResult) { var checker = new AdrQuestionValidityChecker(); const int positionsCount = 3; var assigned = new FractionLong(assignedIntegral, assignedNumerator, assignedDenominator); var result = checker.QCumulativeIsValid(GetQCumulative(positionsCount, assigned), new FractionLong(7, 1, 2)); Assert.That(result, Is.EqualTo(expectedResult)); }
public void BaseYesNoAbsPointTests(bool yesCheck, long yesVotes, bool hasInstructions, bool hasTrust, bool notWholeStockWasPassed, long expectedResultLong) { var allowedVotesAmount = new FractionLong(100); var point = TestBulletinModel.GetFreshBaseYesNoAbsPoint(yesVotes: yesVotes.FL(), yesCheck: yesCheck); var additionalMarks = TestBulletinModel.GetAdditionalMarks(hasInstructions, hasTrust, notWholeStockWasPassed); var result = _calculator.GetVotesForYesField(point, allowedVotesAmount, additionalMarks); var expected = new FractionLong(expectedResultLong); Assert.That(result, Is.EqualTo(expected)); }
public AmountOfStockSubmited GetAmountOfStockSubmited(QCumulative qCum, FractionLong allowedVotesAmount) { if (qCum.AdditionalMarks.YesCheckBoxField.Value == true && qCum.CandidatePoints.Sum(c => c.VotesDocField.Value) == FractionLong.Zero) { return(AmountOfStockSubmited.VotesArentSubmited); } var pairs = new List <KeyValuePair <bool, FractionLong> > { new KeyValuePair <bool, FractionLong>(qCum.AdditionalMarks.YesCheckBoxField.Value, qCum.CandidatePoints.Sum(c => c.VotesDocField.Value)), new KeyValuePair <bool, FractionLong>(qCum.AdditionalMarks.NoCheckBoxField.Value, qCum.AdditionalMarks.NoVotesField.Value), new KeyValuePair <bool, FractionLong>(qCum.AdditionalMarks.AbstainedCheckBoxField.Value, qCum.AdditionalMarks.AbstainedVotesField.Value), }; return(GetAmountOfStockSubmittedFor(pairs, allowedVotesAmount)); }
public void BaseYesNoAbsPointTests(bool yesCheck, int yesVotes, bool noCheck, int noVotes, bool absCheck, int absVotes, AmountOfStockSubmited expected) { var allowedVotesAmount = new FractionLong(100); var baseYesNoAbstainedPoint = new BaseYesNoAbsPoint( Fields.CheckBoxDocField(yesCheck), Fields.CheckBoxDocField(noCheck), Fields.CheckBoxDocField(absCheck), Fields.VotesDocField(yesVotes), Fields.VotesDocField(noVotes), Fields.VotesDocField(absVotes)); var result = _calculator.GetAmountOfStockSubmited(baseYesNoAbstainedPoint, allowedVotesAmount); Assert.That(result, Is.EqualTo(expected)); }
public AmountOfStockSubmited GetAmountOfStockSubmited(BaseYesNoAbsPoint point, FractionLong allowedVotesAmount) { var pairs = new List <KeyValuePair <bool, FractionLong> > { new KeyValuePair <bool, FractionLong>(point.YesCheckBoxField.Value, point.YesVotesField.Value), new KeyValuePair <bool, FractionLong>(point.NoCheckBoxField.Value, point.NoVotesField.Value), new KeyValuePair <bool, FractionLong>(point.AbstainedCheckBoxField.Value, point.AbstainedVotesField.Value), }; return(GetAmountOfStockSubmittedFor(pairs, allowedVotesAmount)); }
private static List <QCumCandidatePoint> GetCandidatePoints(FractionLong assigned) { return(Enumerable.Range(1, 10).Select(x => new QCumCandidatePoint(x, VotesDocField(x == 1 ? assigned : (FractionLong?)null))).ToList()); }
private static RuleNode GetQCumulativeTableRule(BulletinScreenModelBase bulletin, QCumulative qCum, FractionLong allowedVotesAmount) { return(GetQCumulativeTableRule(qCum, bulletin.AdditionalMarks, () => bulletin.PackStatus, () => bulletin.TrustExists, () => AmountOfStockSubmitedCalculator.GetAmountOfStockSubmited(qCum, allowedVotesAmount), () => GetNumberOfChecks(qCum), () => BulletinAdditionalMarksToAdditionalChecksEnumConverter.ConvertToAdditionalChecksEnum(bulletin.AdditionalMarks), () => qCum.AdditionalMarks.YesCheckBoxField.Value ? CumYesIs.Checked : CumYesIs.NotChecked)); }
private static RuleNode GetQSimpleQSepAndHierSubQTableRuleChain(BaseYesNoAbsPoint point, BulletinScreenModelBase bulletin, FractionLong amountOfStock, bool isQSimpWithPrivDividends = false) { var additionalMarks = bulletin.AdditionalMarks; Func <PackStatus> packStatus = () => bulletin.PackStatus; Func <NumberOfChecks> numberOfChecks = () => GetNumberOfChecks(point); Func <AdditionalChecks> additionalChecks = () => BulletinAdditionalMarksToAdditionalChecksEnumConverter.ConvertToAdditionalChecksEnum(bulletin.AdditionalMarks); Func <bool> trustExists = () => bulletin.TrustExists; Func <AmountOfStockSubmited> amountOfStockSubmited = () => AmountOfStockSubmitedCalculator.GetAmountOfStockSubmited(point, amountOfStock); Func <bool> isQSimpWithPrivDividendsFunc = () => isQSimpWithPrivDividends; return(GetQSimpleQSepAndHierSubQTableRuleChain(point, additionalMarks, packStatus, trustExists, amountOfStockSubmited, numberOfChecks, additionalChecks, isQSimpWithPrivDividendsFunc)); }
private static RuleNode GetRuleForBaseYesNoAbstainedPoint(BaseYesNoAbsPoint qsp, BulletinScreenModelBase bulletin, FractionLong amountOfStock, bool isQSimpWithPrivDividends = false) { return(RuleBuilder. RootRule(new PointShouldHaveAtLeastOneSelectionRule(qsp)) .AddRule(GetQSimpleQSepAndHierSubQTableRuleChain(qsp, bulletin, amountOfStock, isQSimpWithPrivDividends)) .GetRoot()); }
private static bool FieldCanHoldBasketValue(FractionLong field, FractionLong basketValue) { return(field.FractionPart == basketValue.FractionPart && field >= basketValue); }
private static void RemoveMatchingFieldFrom(List <FractionLong> fieldsRemaining, FractionLong basketValue) { var orderedFields = fieldsRemaining.OrderBy(x => x.Numerator); var matchingField = orderedFields.First(x => FieldCanHoldBasketValue(x, basketValue)); fieldsRemaining.Remove(matchingField); }
private static bool ThereIsMatchingFieldIn(List <FractionLong> fieldsRemaining, FractionLong basketValue) { var orderedFields = fieldsRemaining.OrderBy(x => x.Numerator); return(orderedFields.Where(x => FieldCanHoldBasketValue(x, basketValue)).Count() > 0); }
public static VotesDocField VotesDocField(FractionLong value, Page page = null) { return(new VotesDocField(null, page ?? Page, value)); }