superscript / interval
Installs: 14 117
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 1
pkg:composer/superscript/interval
Requires
- php: ^8.3
- brick/math: ^0.12.0 || ^0.13.0
- webmozart/assert: ^1.11
Requires (Dev)
- infection/infection: ^0.29.14
- laravel/pint: ^1.21
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12.0
- robiningelbrecht/phpunit-coverage-tools: ^1.9
This package is not auto-updated.
Last update: 2025-11-06 12:15:00 UTC
README
A PHP library for working with mathematical intervals. It provides an elegant way to create, compare, and work with intervals using standard mathematical notation.
Installation
Install the package via Composer:
composer require superscript/interval
Requirements
- PHP 8.3 or higher
Usage
Creating Intervals
You can create intervals from string notation:
use Superscript\Interval\Interval; // Create from string notation $interval = Interval::fromString('[1,5]'); // Closed interval $interval = Interval::fromString('(1,5)'); // Open interval $interval = Interval::fromString('[1,5)'); // Right-open interval $interval = Interval::fromString('(1,5]'); // Left-open interval $interval = Interval::fromString('[1,)'); // Left-bounded interval (infinite upper bound) $interval = Interval::fromString('(,1]'); // Right-bounded interval (infinite lower bound)
Interval Notation
The library supports four types of interval notation:
[a,b]- Closed interval: includes both endpointsaandb. Example:[1,5]includes all numbers from 1 to 5, including 1 and 5.(a,b)- Open interval: excludes both endpointsaandb. Example:(1,5)includes all numbers greater than 1 and less than 5, but not 1 or 5 themselves.[a,b)- Right-open interval: includesabut notb. Example:[1,5)includes 1 and all values up to (but not including) 5.(a,b]- Left-open interval: excludesabut includesb. Example:(1,5]includes all values greater than 1 up to and including 5.
The inclusion or exclusion of the endpoints determines how comparisons behave. For example, if an interval is (1,5), calling $interval->isGreaterThan(1) will return true because 1 is not part of the interval. However, if the interval is [1,5], then $interval->isGreaterThanOrEqualTo(1) will return true since 1 is included.
Understanding this notation is crucial for interpreting comparison behavior correctly.
The library also supports unbounded intervals using empty endpoints. These are interpreted as extending to infinity:
[a,)- Left-bounded interval: includesaand extends infinitely to the right.(,b]- Right-bounded interval: includesband extends infinitely to the left.(,)- Fully unbounded interval: represents all real numbers.
Internally, unbounded sides are represented using PHP_INT_MIN or PHP_INT_MAX.
Interval Comparisons
$interval = Interval::fromString('[2,5]'); $interval->isGreaterThan(1); // true $interval->isGreaterThanOrEqualTo(2); // true $interval->isLessThan(6); // true $interval->isLessThanOrEqualTo(5); // true
Comparisons such as $interval->isGreaterThan($value) evaluate whether all values within the interval are greater than the given value. So [2,5] is greater than 1 (because every number from 2 to 5 is greater than 1), but not greater than 2 unless the interval is open on the left side (e.g., (2,5)).
Similarly, $interval->isLessThan($value) checks whether all values in the interval are less than the given value. (1,5) is less than 6, but not less than 5 unless the interval excludes 5 (e.g., (1,5) or [1,5).
This logic allows for precise control over numeric comparisons, especially when you want to reason about bounds inclusivity.
Testing
Run the test suite:
composer test
This includes:
- Static analysis (
composer test:types) - Unit tests with coverage (
composer test:unit) - Mutation testing (
composer test:infection)
License
MIT
About
This package is developed and maintained by Superscript.