update readme and lib.rs with added notes for discreteness and finiteness

This commit is contained in:
ripytide
2023-04-21 14:19:40 +01:00
parent 901cecb172
commit cd6927211c
3 changed files with 76 additions and 24 deletions
+36 -12
View File
@@ -87,7 +87,30 @@ assert_eq!(
);
```
## Key Definitions:
## Key Understandings and Philosophies:
### Discrete-ness
This crate is designed to work with [`Discrete`] types as compared to
[`Continuous`] types. For example, `u8` is a `Discrete` type, but
`String` is a `Continuous` if you try to parse it as a decimal value.
The reason for this is that common [`interval-Mathematics`] operations
differ depending on wether the underlying type is `Discrete` or
`Continuous`. For example `5..=6` touches `7..=8` since integers are
`Discrete` but `5.0..=6.0` does **not** touch `7.0..=8.0` since the
value `6.5` exists.
### Finite-ness
This crate is also designed to work with [`Finite`] types since it is
much easy to implement and it is not restrictive to users since you
can still represent `Infinite` numbers in `Finite` types paradoxically.
For example you could define `Infinite` for `u8` as `u8::MAX` or if
you still want to use `u8::MAX` as a `Finite` number you could define
a wrapper type for `u8` that adds an [`Actual Infinity`] value to the
`u8` set.
### Invalid Ranges
@@ -104,17 +127,14 @@ values are greater than their end values. such as `5..2` or
Here are a few examples of ranges and whether they are valid:
| range | valid |
| -------------- | ----- |
| 0..=0 | YES |
| 0..0 | NO |
| 0..1 | YES |
| 9..8 | NO |
| (0.4)..=(-0.2) | NO |
| ..(-3) | YES |
| 0.0003.. | YES |
| .. | YES |
| 400..=400 | YES |
| range | valid |
| -------------------------------------- | ----- |
| 0..=0 | YES |
| 0..0 | NO |
| 0..1 | YES |
| 9..8 | NO |
| (Bound::Exluded(3), Bound::Exluded(4)) | NO |
| 400..=400 | YES |
### Overlap
@@ -201,3 +221,7 @@ topic area:
[`rangeboundsmap`]: https://docs.rs/range_bounds_map/latest/range_bounds_map/range_bounds_map/struct.RangeBoundsMap.html
[`rangeboundsset`]: https://docs.rs/range_bounds_map/latest/range_bounds_map/range_bounds_set/struct.RangeBoundsSet.html
[`copse`]: https://github.com/eggyal/copse
[`discrete`]: https://en.wikipedia.org/wiki/Discrete_mathematics
[`continuous`]: https://en.wikipedia.org/wiki/List_of_continuity-related_mathematical_topics
[`interval-mathematics`]: https://en.wikipedia.org/wiki/Interval_(mathematics)
[`actual infinity`]: https://en.wikipedia.org/wiki/Actual_infinity
+4
View File
@@ -1,4 +1,8 @@
# todo put back to normal
# - rename RangeBounds{Set,Map} to DiscreteRange{Set,Map}
# - rename crate too
# - add link to previous crate on readme
# - update shared descriptions to note the discreteness
hard_tabs=true
imports_granularity="Module"
group_imports="StdExternalCrate"
+36 -12
View File
@@ -95,7 +95,30 @@ along with range_bounds_map. If not, see <https://www.gnu.org/licenses/>.
//! );
//! ```
//!
//! ## Key Definitions:
//! ## Key Understandings and Philosophies:
//!
//! ### Discrete-ness
//!
//! This crate is designed to work with [`Discrete`] types as compared to
//! [`Continuous`] types. For example, `u8` is a `Discrete` type, but
//! `String` is a `Continuous` if you try to parse it as a decimal value.
//!
//! The reason for this is that common [`interval-Mathematics`] operations
//! differ depending on wether the underlying type is `Discrete` or
//! `Continuous`. For example `5..=6` touches `7..=8` since integers are
//! `Discrete` but `5.0..=6.0` does **not** touch `7.0..=8.0` since the
//! value `6.5` exists.
//!
//! ### Finite-ness
//!
//! This crate is also designed to work with [`Finite`] types since it is
//! much easy to implement and it is not restrictive to users since you
//! can still represent `Infinite` numbers in `Finite` types paradoxically.
//!
//! For example you could define `Infinite` for `u8` as `u8::MAX` or if
//! you still want to use `u8::MAX` as a `Finite` number you could define
//! a wrapper type for `u8` that adds an [`Actual Infinity`] value to the
//! `u8` set.
//!
//! ### Invalid Ranges
//!
@@ -112,17 +135,14 @@ along with range_bounds_map. If not, see <https://www.gnu.org/licenses/>.
//!
//! Here are a few examples of ranges and whether they are valid:
//!
//! | range | valid |
//! | -------------- | ----- |
//! | 0..=0 | YES |
//! | 0..0 | NO |
//! | 0..1 | YES |
//! | 9..8 | NO |
//! | (0.4)..=(-0.2) | NO |
//! | ..(-3) | YES |
//! | 0.0003.. | YES |
//! | .. | YES |
//! | 400..=400 | YES |
//! | range | valid |
//! | -------------------------------------- | ----- |
//! | 0..=0 | YES |
//! | 0..0 | NO |
//! | 0..1 | YES |
//! | 9..8 | NO |
//! | (Bound::Exluded(3), Bound::Exluded(4)) | NO |
//! | 400..=400 | YES |
//!
//! ### Overlap
//!
@@ -209,6 +229,10 @@ along with range_bounds_map. If not, see <https://www.gnu.org/licenses/>.
//! [`rangeboundsmap`]: https://docs.rs/range_bounds_map/latest/range_bounds_map/range_bounds_map/struct.RangeBoundsMap.html
//! [`rangeboundsset`]: https://docs.rs/range_bounds_map/latest/range_bounds_map/range_bounds_set/struct.RangeBoundsSet.html
//! [`copse`]: https://github.com/eggyal/copse
//! [`discrete`]: https://en.wikipedia.org/wiki/Discrete_mathematics
//! [`continuous`]: https://en.wikipedia.org/wiki/List_of_continuity-related_mathematical_topics
//! [`interval-mathematics`]: https://en.wikipedia.org/wiki/Interval_(mathematics)
//! [`actual infinity`]: https://en.wikipedia.org/wiki/Actual_infinity
#![feature(let_chains)]
#![feature(btree_cursors)]