summaryrefslogtreecommitdiff
path: root/tests/suite/foundations/decimal.typ
diff options
context:
space:
mode:
Diffstat (limited to 'tests/suite/foundations/decimal.typ')
-rw-r--r--tests/suite/foundations/decimal.typ79
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/suite/foundations/decimal.typ b/tests/suite/foundations/decimal.typ
new file mode 100644
index 00000000..d5fd9444
--- /dev/null
+++ b/tests/suite/foundations/decimal.typ
@@ -0,0 +1,79 @@
+--- decimal-constructor ---
+#test(decimal(10), decimal("10.0"))
+#test(decimal("-7654.321"), decimal("-7654.321"))
+#test(decimal("\u{2212}7654.321"), decimal("-7654.321"))
+#test(decimal({ 3.141592653 }), decimal("3.141592653000000012752934707"))
+#test(decimal({ -3.141592653 }), decimal("-3.141592653000000012752934707"))
+#test(type(decimal(10)), decimal)
+
+--- decimal-constructor-bad-type ---
+// Error: 10-17 expected integer, float, or string, found type
+#decimal(decimal)
+
+--- decimal-constructor-bad-value ---
+// Error: 10-17 invalid decimal: 1.2.3
+#decimal("1.2.3")
+
+--- decimal-constructor-float-literal ---
+// Warning: 18-25 creating a decimal using imprecise float literal
+// Hint: 18-25 use a string in the decimal constructor to avoid loss of precision: `decimal("1.32523")`
+#let _ = decimal(1.32523)
+
+--- decimal-constructor-float-inf ---
+// Error: 10-19 float is not a valid decimal: float.inf
+#decimal(float.inf)
+
+--- decimal-constructor-float-negative-inf ---
+// Error: 10-20 float is not a valid decimal: -float.inf
+#decimal(-float.inf)
+
+--- decimal-constructor-float-nan ---
+// Error: 10-19 float is not a valid decimal: float.nan
+#decimal(float.nan)
+
+--- decimal-repr ---
+// Test the `repr` function with decimals.
+#test(repr(decimal("12.0")), "decimal(\"12.0\")")
+#test(repr(decimal("3.14")), "decimal(\"3.14\")")
+#test(repr(decimal("1234567890.0")), "decimal(\"1234567890.0\")")
+#test(repr(decimal("0123456789.0")), "decimal(\"123456789.0\")")
+#test(repr(decimal("0.0")), "decimal(\"0.0\")")
+#test(repr(decimal("-0.0")), "decimal(\"0.0\")")
+#test(repr(decimal("-1.0")), "decimal(\"-1.0\")")
+#test(repr(decimal("-9876543210.0")), "decimal(\"-9876543210.0\")")
+#test(repr(decimal("-0987654321.0")), "decimal(\"-987654321.0\")")
+#test(repr(decimal("-3.14")), "decimal(\"-3.14\")")
+#test(repr(decimal("-3.9191919191919191919191919195")), "decimal(\"-3.9191919191919191919191919195\")")
+#test(repr(decimal("5.0000000000")), "decimal(\"5.0000000000\")")
+#test(repr(decimal("4.0") - decimal("8.0")), "decimal(\"-4.0\")")
+
+--- decimal-display ---
+// Test decimals.
+#set page(width: auto)
+#decimal("12.0") \
+#decimal("3.14") \
+#decimal("1234567890.0") \
+#decimal("0123456789.0") \
+#decimal("0.0") \
+#decimal("-0.0") \
+#decimal("-1.0") \
+#decimal("-9876543210.0") \
+#decimal("-0987654321.0") \
+#decimal("-3.14") \
+#decimal("-3.9191919191919191919191919195") \
+#decimal("5.0000000000") \
+#(decimal("4.0") - decimal("8.0"))
+
+--- decimal-display-round ---
+// Display less digits.
+#calc.round(decimal("-3.9191919191919191919191919195"), digits: 4) \
+#calc.round(decimal("5.0000000000"), digits: 4)
+
+--- decimal-expected-float-error ---
+// Error: 11-25 expected integer, float, or angle, found decimal
+// Hint: 11-25 if loss of precision is acceptable, explicitly cast the decimal to a float with `float(value)`
+#calc.sin(decimal("1.1"))
+
+--- decimal-expected-integer-error ---
+// Error: 11-25 expected integer, found decimal
+#calc.odd(decimal("1.1"))