[package]
edition = "2024"
rust-version = "1.85"
name = "decimal-scaled"
version = "0.2.3"
build = "build.rs"
exclude = [
".github/",
"bash.exe.stackdump",
"research/",
"tarpaulin.toml",
"scripts/",
"docs/benchmarks*.draft",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Const-generic base-10 fixed-point decimals (D9/D18/D38/D76/D153/D307) with integer-only transcendentals correctly rounded to within 0.5 ULP — exact at the type's last representable place. Deterministic across every platform; no_std-friendly."
homepage = "https://github.com/mootable/decimal-scaled"
documentation = "https://docs.rs/decimal-scaled/"
readme = "README.md"
keywords = [
"decimal",
"fixed-point",
"deterministic",
"no-std",
"precision",
]
categories = [
"mathematics",
"no-std",
"science",
"finance",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/mootable/decimal-scaled"
[package.metadata.docs.rs]
features = [
"std",
"serde",
"strict",
"macros",
"wide",
"x-wide",
]
rustdoc-args = [
"--cfg",
"docsrs",
]
[features]
alloc = []
bench-alt = []
d153 = []
d307 = []
d76 = []
default = [
"std",
"serde",
"strict",
]
experimental-floats = []
fast = []
macros = ["dep:decimal_scaled_macros"]
rounding-ceiling = []
rounding-floor = []
rounding-half-away-from-zero = []
rounding-half-toward-zero = []
rounding-trunc = []
serde = ["dep:serde"]
std = ["alloc"]
strict = []
wide = [
"d76",
"d153",
]
x-wide = ["d307"]
[lib]
name = "decimal_scaled"
path = "src/lib.rs"
[[test]]
name = "arithmetic_mode_aware"
path = "tests/arithmetic_mode_aware.rs"
[[test]]
name = "bitwise"
path = "tests/bitwise.rs"
[[test]]
name = "conversion_error_display"
path = "tests/conversion_error_display.rs"
[[test]]
name = "conversions"
path = "tests/conversions.rs"
[[test]]
name = "decimal_trait_default_methods"
path = "tests/decimal_trait_default_methods.rs"
[[test]]
name = "decimal_trait_generic_surface"
path = "tests/decimal_trait_generic_surface.rs"
[[test]]
name = "edge_cases"
path = "tests/edge_cases.rs"
[[test]]
name = "equalities"
path = "tests/equalities.rs"
[[test]]
name = "equalities_wide_branches"
path = "tests/equalities_wide_branches.rs"
[[test]]
name = "macros"
path = "tests/macros.rs"
[[test]]
name = "macros_bitwise_and_overflow"
path = "tests/macros_bitwise_and_overflow.rs"
[[test]]
name = "macros_int_and_conversions"
path = "tests/macros_int_and_conversions.rs"
[[test]]
name = "macros_num_traits"
path = "tests/macros_num_traits.rs"
[[test]]
name = "macros_pow"
path = "tests/macros_pow.rs"
[[test]]
name = "macros_surface"
path = "tests/macros_surface.rs"
[[test]]
name = "narrow_fast_transcendentals"
path = "tests/narrow_fast_transcendentals.rs"
[[test]]
name = "narrow_strict_transcendentals"
path = "tests/narrow_strict_transcendentals.rs"
[[test]]
name = "num_traits"
path = "tests/num_traits.rs"
[[test]]
name = "parse_errors"
path = "tests/parse_errors.rs"
[[test]]
name = "precision_strict_05_ulp"
path = "tests/precision_strict_05_ulp.rs"
[[test]]
name = "precision_wide_baseline"
path = "tests/precision_wide_baseline.rs"
[[test]]
name = "rescale"
path = "tests/rescale.rs"
[[test]]
name = "rescale_modes"
path = "tests/rescale_modes.rs"
[[test]]
name = "routing_surface"
path = "tests/routing_surface.rs"
[[test]]
name = "serde_surface"
path = "tests/serde_surface.rs"
[[test]]
name = "wide_constants_all_six"
path = "tests/wide_constants_all_six.rs"
[[test]]
name = "wide_constants_high_scale"
path = "tests/wide_constants_high_scale.rs"
[[test]]
name = "wide_roots_dispatcher_and_hypot"
path = "tests/wide_roots_dispatcher_and_hypot.rs"
[[test]]
name = "wide_strict_transcendentals"
path = "tests/wide_strict_transcendentals.rs"
[[test]]
name = "widen_narrow_default"
path = "tests/widen_narrow_default.rs"
[[bench]]
name = "agm_vs_taylor"
path = "benches/agm_vs_taylor.rs"
harness = false
required-features = ["x-wide"]
[[bench]]
name = "all_functions"
path = "benches/all_functions.rs"
harness = false
[[bench]]
name = "d_w128_mul_div_paths"
path = "benches/d_w128_mul_div_paths.rs"
harness = false
required-features = ["wide"]
[[bench]]
name = "decimal_backends"
path = "benches/decimal_backends.rs"
harness = false
required-features = ["wide"]
[[bench]]
name = "full_matrix"
path = "benches/full_matrix.rs"
harness = false
required-features = [
"wide",
"x-wide",
]
[[bench]]
name = "g_math_comparison"
path = "benches/g_math_comparison.rs"
harness = false
required-features = ["wide"]
[[bench]]
name = "mul_div_candidates"
path = "benches/mul_div_candidates.rs"
harness = false
[[bench]]
name = "wide_int_backends"
path = "benches/wide_int_backends.rs"
harness = false
required-features = ["wide"]
[dependencies.decimal_scaled_macros]
version = "0.2.3"
optional = true
default-features = false
[dependencies.num-traits]
version = "0.2"
default-features = false
[dependencies.serde]
version = "1"
features = ["derive"]
optional = true
[dev-dependencies.bnum]
version = "0.14"
default-features = false
[dev-dependencies.criterion]
version = "0.8"
features = [
"cargo_bench_support",
"html_reports",
]
default-features = false
[dev-dependencies.fixed]
version = "1"
[dev-dependencies.g_math]
version = "0.4"
[dev-dependencies.i256]
version = "0.2"
default-features = false
[dev-dependencies.postcard]
version = "1"
features = ["alloc"]
default-features = false
[dev-dependencies.ruint]
version = "1"
default-features = false
[dev-dependencies.rust_decimal]
version = "1"
features = ["maths"]
default-features = false
[dev-dependencies.serde_json]
version = "1"
[lints.clippy]
assertions_on_constants = "allow"
bool_assert_comparison = "allow"
bool_to_int_with_if = "allow"
cast_lossless = "allow"
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
collapsible_if = "allow"
comparison_chain = "allow"
doc_lazy_continuation = "allow"
doc_markdown = "allow"
empty_line_after_outer_attr = "allow"
float_cmp = "allow"
format_push_string = "allow"
inline_always = "allow"
items_after_statements = "allow"
manual_assert = "allow"
manual_let_else = "allow"
many_single_char_names = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
must_use_candidate = "allow"
nonminimal_bool = "allow"
result_unit_err = "allow"
return_self_not_must_use = "allow"
semicolon_if_nothing_returned = "allow"
should_panic_without_expect = "allow"
similar_names = "allow"
too_many_lines = "allow"
uninlined_format_args = "allow"
unreadable_literal = "allow"
[lints.rust]
dead_code = "allow"
unused_variables = "allow"