IntersectMBO / plutus

The Plutus language implementation and tools

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`PlutusTx.Ratio.reduce` allows negative integer in the denominator

SeungheonOh opened this issue · comments

Summary

Documentation on PlutusTx.Ratio.denominator says that the "[denominator] will always be greater than, or equal to, 1, although the type does not describe this." However, using PlutusTx.Ratio.reduce, it is possible to build negative rational with negative integer on the denominator.

Steps to reproduce the behavior

λ> import PlutusTx.Ratio
λ> denominator $ reduce 1 (-1)

Actual Result

-1

Expected Result

1

Describe the approach you would take to fix this

PlutusTx.Ratio.reduce can be deprecated entirely since PlutusTx.Ratio.unsafeRatio serves identical purpose while correctly taking care of negative integer on denominator input.

Also, adding invariant notes to PlutusTx.Ratio.Rational's haddock documentation would be helpful. As it is currently not included in haddock: https://github.com/IntersectMBO/plutus/blob/master/plutus-tx/src/PlutusTx/Ratio.hs#L69-L72

System info

Linux Mars 6.1.41 #1-NixOS SMP PREEMPT_DYNAMIC Mon Jul 24 16:55:35 UTC 2023 x86_64 GNU/Linux
NixOS 23.11.20230727.db8672b (Tapir) x86_64
plutus-tx: 1.7.0.0

Thanks for reporting the bug @SeungheonOh