pub fn progressive_tax_unchecked(
agi: Decimal,
deductions: Decimal,
rate_table: &[(Decimal, Decimal)],
) -> Decimal
Expand description
Progressive Income Tax - Unchecked Version
This is an unchecked version of the progressive_tax
function that skips the rate table validation, may provide
a performance boost in scenarios where the rate table is known to be valid.
§Arguments
agi
- Adjusted Gross Income (AGI) for the tax year, your total income minus any above-the-line deductionsdeductions
- Any below-the-line deductions for the tax year (i.e. standard or itemized deductions)rate_table
- A slice of tuples representing the upper income of each bracket and its rate for the tax year(bracket, rate)
, the last tuple should represent a number to infinity and the highest rate. In practice, the final bracket would the maximum number representable by the Decimal type (Decimal::MAX
).
§Returns
- The total tax owed for the tax year based on the progressive rate table. If AGI is less than deductions, zero is returned (no tax owed).
§Examples
use rust_finprim::amort_dep_tax::progressive_tax;
use rust_decimal_macros::*;
use rust_decimal::Decimal;
let rate_table = vec![
(dec!(9_875), dec!(0.10)),
(dec!(40_125), dec!(0.12)),
(dec!(85_525), dec!(0.22)),
(dec!(163_300), dec!(0.24)),
(dec!(207_350), dec!(0.32)),
(dec!(518_400), dec!(0.35)),
(Decimal::MAX, dec!(0.37))
];
let agi = dec!(100_000);
let deductions = dec!(12_000);
let tax = progressive_tax(agi, deductions, &rate_table);