Skip to content

Commit 948d2c4

Browse files
committed
refactor: update examples and tests to range_trait
1 parent 1ced3f3 commit 948d2c4

12 files changed

+121
-93
lines changed

examples/branching_error_reporting.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
// SPDX-License-Identifier: MPL-2.0
22

33
use pubgrub::error::PubGrubError;
4-
use pubgrub::range::Range;
4+
use pubgrub::range_trait::Range;
55
use pubgrub::report::{DefaultStringReporter, Reporter};
66
use pubgrub::solver::{resolve, OfflineDependencyProvider};
7-
use pubgrub::version::SemanticVersion;
7+
use pubgrub::version_trait::{SemanticInterval, SemanticVersion};
88

99
// https://github.com/dart-lang/pub/blob/master/doc/solver.md#branching-error-reporting
1010
fn main() {
11-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
11+
let mut dependency_provider =
12+
OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
1213
#[rustfmt::skip]
1314
// root 1.0.0 depends on foo ^1.0.0
1415
dependency_provider.add_dependencies(

examples/caching_dependency_provider.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,25 @@ use std::cell::RefCell;
44
use std::error::Error;
55

66
use pubgrub::package::Package;
7-
use pubgrub::range::Range;
7+
use pubgrub::range_trait::Range;
88
use pubgrub::solver::{resolve, Dependencies, DependencyProvider, OfflineDependencyProvider};
9-
use pubgrub::version::{NumberVersion, Version};
9+
use pubgrub::version_trait::{Interval, NumberInterval, NumberVersion, Version};
1010

1111
// An example implementing caching dependency provider that will
1212
// store queried dependencies in memory and check them before querying more from remote.
13-
struct CachingDependencyProvider<P: Package, V: Version, DP: DependencyProvider<P, V>> {
13+
struct CachingDependencyProvider<
14+
P: Package,
15+
I: Interval<V>,
16+
V: Version,
17+
DP: DependencyProvider<P, I, V>,
18+
> {
1419
remote_dependencies: DP,
15-
cached_dependencies: RefCell<OfflineDependencyProvider<P, V>>,
20+
cached_dependencies: RefCell<OfflineDependencyProvider<P, I, V>>,
1621
}
1722

18-
impl<P: Package, V: Version, DP: DependencyProvider<P, V>> CachingDependencyProvider<P, V, DP> {
23+
impl<P: Package, I: Interval<V>, V: Version, DP: DependencyProvider<P, I, V>>
24+
CachingDependencyProvider<P, I, V, DP>
25+
{
1926
pub fn new(remote_dependencies_provider: DP) -> Self {
2027
CachingDependencyProvider {
2128
remote_dependencies: remote_dependencies_provider,
@@ -24,10 +31,10 @@ impl<P: Package, V: Version, DP: DependencyProvider<P, V>> CachingDependencyProv
2431
}
2532
}
2633

27-
impl<P: Package, V: Version, DP: DependencyProvider<P, V>> DependencyProvider<P, V>
28-
for CachingDependencyProvider<P, V, DP>
34+
impl<P: Package, I: Interval<V>, V: Version, DP: DependencyProvider<P, I, V>>
35+
DependencyProvider<P, I, V> for CachingDependencyProvider<P, I, V, DP>
2936
{
30-
fn choose_package_version<T: std::borrow::Borrow<P>, U: std::borrow::Borrow<Range<V>>>(
37+
fn choose_package_version<T: std::borrow::Borrow<P>, U: std::borrow::Borrow<Range<I, V>>>(
3138
&self,
3239
packages: impl Iterator<Item = (T, U)>,
3340
) -> Result<(T, Option<V>), Box<dyn Error>> {
@@ -39,7 +46,7 @@ impl<P: Package, V: Version, DP: DependencyProvider<P, V>> DependencyProvider<P,
3946
&self,
4047
package: &P,
4148
version: &V,
42-
) -> Result<Dependencies<P, V>, Box<dyn Error>> {
49+
) -> Result<Dependencies<P, I, V>, Box<dyn Error>> {
4350
let mut cache = self.cached_dependencies.borrow_mut();
4451
match cache.get_dependencies(package, version) {
4552
Ok(Dependencies::Unknown) => {
@@ -65,7 +72,8 @@ impl<P: Package, V: Version, DP: DependencyProvider<P, V>> DependencyProvider<P,
6572

6673
fn main() {
6774
// Simulating remote provider locally.
68-
let mut remote_dependencies_provider = OfflineDependencyProvider::<&str, NumberVersion>::new();
75+
let mut remote_dependencies_provider =
76+
OfflineDependencyProvider::<&str, NumberInterval, NumberVersion>::new();
6977

7078
// Add dependencies as needed. Here only root package is added.
7179
remote_dependencies_provider.add_dependencies("root", 1, Vec::new());

examples/doc_interface.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
// SPDX-License-Identifier: MPL-2.0
22

3-
use pubgrub::range::Range;
3+
use pubgrub::range_trait::Range;
44
use pubgrub::solver::{resolve, OfflineDependencyProvider};
5-
use pubgrub::version::NumberVersion;
5+
use pubgrub::version_trait::{NumberInterval, NumberVersion};
66

77
// `root` depends on `menu` and `icons`
88
// `menu` depends on `dropdown`
99
// `dropdown` depends on `icons`
1010
// `icons` has no dependency
1111
#[rustfmt::skip]
1212
fn main() {
13-
let mut dependency_provider = OfflineDependencyProvider::<&str, NumberVersion>::new();
13+
let mut dependency_provider = OfflineDependencyProvider::<&str, NumberInterval, NumberVersion>::new();
1414
dependency_provider.add_dependencies(
15-
"root", 1, vec![("menu", Range::any()), ("icons", Range::any())],
15+
"root", 1, vec![("menu", Range::full()), ("icons", Range::full())],
1616
);
17-
dependency_provider.add_dependencies("menu", 1, vec![("dropdown", Range::any())]);
18-
dependency_provider.add_dependencies("dropdown", 1, vec![("icons", Range::any())]);
17+
dependency_provider.add_dependencies("menu", 1, vec![("dropdown", Range::full())]);
18+
dependency_provider.add_dependencies("dropdown", 1, vec![("icons", Range::full())]);
1919
dependency_provider.add_dependencies("icons", 1, vec![]);
2020

2121
// Run the algorithm.

examples/doc_interface_error.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// SPDX-License-Identifier: MPL-2.0
22

33
use pubgrub::error::PubGrubError;
4-
use pubgrub::range::Range;
4+
use pubgrub::range_trait::Range;
55
use pubgrub::report::{DefaultStringReporter, Reporter};
66
use pubgrub::solver::{resolve, OfflineDependencyProvider};
7-
use pubgrub::version::SemanticVersion;
7+
use pubgrub::version_trait::{SemanticInterval, SemanticVersion};
88

99
// `root` depends on `menu`, `icons 1.0.0` and `intl 5.0.0`
1010
// `menu 1.0.0` depends on `dropdown < 2.0.0`
@@ -15,12 +15,12 @@ use pubgrub::version::SemanticVersion;
1515
// `intl` has no dependency
1616
#[rustfmt::skip]
1717
fn main() {
18-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
18+
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
1919
// Direct dependencies: menu and icons.
2020
dependency_provider.add_dependencies("root", (1, 0, 0), vec![
21-
("menu", Range::any()),
22-
("icons", Range::exact((1, 0, 0))),
23-
("intl", Range::exact((5, 0, 0))),
21+
("menu", Range::full()),
22+
("icons", Range::singleton((1, 0, 0))),
23+
("intl", Range::singleton((5, 0, 0))),
2424
]);
2525

2626
// Dependencies of the menu lib.
@@ -45,19 +45,19 @@ fn main() {
4545

4646
// Dependencies of the dropdown lib.
4747
dependency_provider.add_dependencies("dropdown", (1, 8, 0), vec![
48-
("intl", Range::exact((3, 0, 0))),
48+
("intl", Range::singleton((3, 0, 0))),
4949
]);
5050
dependency_provider.add_dependencies("dropdown", (2, 0, 0), vec![
51-
("icons", Range::exact((2, 0, 0))),
51+
("icons", Range::singleton((2, 0, 0))),
5252
]);
5353
dependency_provider.add_dependencies("dropdown", (2, 1, 0), vec![
54-
("icons", Range::exact((2, 0, 0))),
54+
("icons", Range::singleton((2, 0, 0))),
5555
]);
5656
dependency_provider.add_dependencies("dropdown", (2, 2, 0), vec![
57-
("icons", Range::exact((2, 0, 0))),
57+
("icons", Range::singleton((2, 0, 0))),
5858
]);
5959
dependency_provider.add_dependencies("dropdown", (2, 3, 0), vec![
60-
("icons", Range::exact((2, 0, 0))),
60+
("icons", Range::singleton((2, 0, 0))),
6161
]);
6262

6363
// Icons have no dependencies.

examples/doc_interface_semantic.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// SPDX-License-Identifier: MPL-2.0
22

33
use pubgrub::error::PubGrubError;
4-
use pubgrub::range::Range;
4+
use pubgrub::range_trait::Range;
55
use pubgrub::report::{DefaultStringReporter, Reporter};
66
use pubgrub::solver::{resolve, OfflineDependencyProvider};
7-
use pubgrub::version::SemanticVersion;
7+
use pubgrub::version_trait::{SemanticInterval, SemanticVersion};
88

99
// `root` depends on `menu` and `icons 1.0.0`
1010
// `menu 1.0.0` depends on `dropdown < 2.0.0`
@@ -14,11 +14,11 @@ use pubgrub::version::SemanticVersion;
1414
// `icons` has no dependency
1515
#[rustfmt::skip]
1616
fn main() {
17-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
17+
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
1818
// Direct dependencies: menu and icons.
1919
dependency_provider.add_dependencies("root", (1, 0, 0), vec![
20-
("menu", Range::any()),
21-
("icons", Range::exact((1, 0, 0))),
20+
("menu", Range::full()),
21+
("icons", Range::singleton((1, 0, 0))),
2222
]);
2323

2424
// Dependencies of the menu lib.
@@ -44,16 +44,16 @@ fn main() {
4444
// Dependencies of the dropdown lib.
4545
dependency_provider.add_dependencies("dropdown", (1, 8, 0), vec![]);
4646
dependency_provider.add_dependencies("dropdown", (2, 0, 0), vec![
47-
("icons", Range::exact((2, 0, 0))),
47+
("icons", Range::singleton((2, 0, 0))),
4848
]);
4949
dependency_provider.add_dependencies("dropdown", (2, 1, 0), vec![
50-
("icons", Range::exact((2, 0, 0))),
50+
("icons", Range::singleton((2, 0, 0))),
5151
]);
5252
dependency_provider.add_dependencies("dropdown", (2, 2, 0), vec![
53-
("icons", Range::exact((2, 0, 0))),
53+
("icons", Range::singleton((2, 0, 0))),
5454
]);
5555
dependency_provider.add_dependencies("dropdown", (2, 3, 0), vec![
56-
("icons", Range::exact((2, 0, 0))),
56+
("icons", Range::singleton((2, 0, 0))),
5757
]);
5858

5959
// Icons has no dependency.

examples/linear_error_reporting.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
// SPDX-License-Identifier: MPL-2.0
22

33
use pubgrub::error::PubGrubError;
4-
use pubgrub::range::Range;
4+
use pubgrub::range_trait::Range;
55
use pubgrub::report::{DefaultStringReporter, Reporter};
66
use pubgrub::solver::{resolve, OfflineDependencyProvider};
7-
use pubgrub::version::SemanticVersion;
7+
use pubgrub::version_trait::{SemanticInterval, SemanticVersion};
88

99
// https://github.com/dart-lang/pub/blob/master/doc/solver.md#linear-error-reporting
1010
fn main() {
11-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
11+
let mut dependency_provider =
12+
OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
1213
#[rustfmt::skip]
1314
// root 1.0.0 depends on foo ^1.0.0 and baz ^1.0.0
1415
dependency_provider.add_dependencies(

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,12 @@
212212
pub mod error;
213213
pub mod package;
214214
pub mod range;
215-
mod range_trait;
215+
pub mod range_trait;
216216
pub mod report;
217217
pub mod solver;
218218
pub mod term;
219219
pub mod type_aliases;
220220
pub mod version;
221-
mod version_trait;
221+
pub mod version_trait;
222222

223223
mod internal;

src/term.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,13 @@ impl<I: Interval<V>, V: Version + fmt::Display> fmt::Display for Term<I, V> {
182182
#[cfg(test)]
183183
pub mod tests {
184184
use super::*;
185-
use crate::version::NumberVersion;
185+
use crate::version_trait::{NumberInterval, NumberVersion};
186186
use proptest::prelude::*;
187187

188-
pub fn strategy() -> impl Strategy<Value = Term<NumberVersion>> {
188+
pub fn strategy() -> impl Strategy<Value = Term<NumberInterval, NumberVersion>> {
189189
prop_oneof![
190-
crate::range::tests::strategy().prop_map(Term::Positive),
191-
crate::range::tests::strategy().prop_map(Term::Negative),
190+
crate::range_trait::tests::strategy().prop_map(Term::Positive),
191+
crate::range_trait::tests::strategy().prop_map(Term::Negative),
192192
]
193193
}
194194

tests/examples.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
// SPDX-License-Identifier: MPL-2.0
22

3-
use pubgrub::range::Range;
3+
use pubgrub::range_trait::Range;
44
use pubgrub::solver::{resolve, OfflineDependencyProvider};
55
use pubgrub::type_aliases::Map;
6-
use pubgrub::version::{NumberVersion, SemanticVersion};
6+
use pubgrub::version_trait::{NumberInterval, NumberVersion, SemanticInterval, SemanticVersion};
77

88
#[test]
99
/// https://github.com/dart-lang/pub/blob/master/doc/solver.md#no-conflicts
1010
fn no_conflict() {
11-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
11+
let mut dependency_provider =
12+
OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
1213
#[rustfmt::skip]
1314
dependency_provider.add_dependencies(
1415
"root", (1, 0, 0),
@@ -38,7 +39,8 @@ fn no_conflict() {
3839
#[test]
3940
/// https://github.com/dart-lang/pub/blob/master/doc/solver.md#avoiding-conflict-during-decision-making
4041
fn avoiding_conflict_during_decision_making() {
41-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
42+
let mut dependency_provider =
43+
OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
4244
#[rustfmt::skip]
4345
dependency_provider.add_dependencies(
4446
"root", (1, 0, 0),
@@ -73,7 +75,8 @@ fn avoiding_conflict_during_decision_making() {
7375
#[test]
7476
/// https://github.com/dart-lang/pub/blob/master/doc/solver.md#performing-conflict-resolution
7577
fn conflict_resolution() {
76-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
78+
let mut dependency_provider =
79+
OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
7780
#[rustfmt::skip]
7881
dependency_provider.add_dependencies(
7982
"root", (1, 0, 0),
@@ -106,7 +109,8 @@ fn conflict_resolution() {
106109
#[test]
107110
/// https://github.com/dart-lang/pub/blob/master/doc/solver.md#conflict-resolution-with-a-partial-satisfier
108111
fn conflict_with_partial_satisfier() {
109-
let mut dependency_provider = OfflineDependencyProvider::<&str, SemanticVersion>::new();
112+
let mut dependency_provider =
113+
OfflineDependencyProvider::<&str, SemanticInterval, SemanticVersion>::new();
110114
#[rustfmt::skip]
111115
// root 1.0.0 depends on foo ^1.0.0 and target ^2.0.0
112116
dependency_provider.add_dependencies(
@@ -171,12 +175,13 @@ fn conflict_with_partial_satisfier() {
171175
///
172176
/// Solution: a0, b0, c0, d0
173177
fn double_choices() {
174-
let mut dependency_provider = OfflineDependencyProvider::<&str, NumberVersion>::new();
175-
dependency_provider.add_dependencies("a", 0, vec![("b", Range::any()), ("c", Range::any())]);
176-
dependency_provider.add_dependencies("b", 0, vec![("d", Range::exact(0))]);
177-
dependency_provider.add_dependencies("b", 1, vec![("d", Range::exact(1))]);
178+
let mut dependency_provider =
179+
OfflineDependencyProvider::<&str, NumberInterval, NumberVersion>::new();
180+
dependency_provider.add_dependencies("a", 0, vec![("b", Range::full()), ("c", Range::full())]);
181+
dependency_provider.add_dependencies("b", 0, vec![("d", Range::singleton(0))]);
182+
dependency_provider.add_dependencies("b", 1, vec![("d", Range::singleton(1))]);
178183
dependency_provider.add_dependencies("c", 0, vec![]);
179-
dependency_provider.add_dependencies("c", 1, vec![("d", Range::exact(2))]);
184+
dependency_provider.add_dependencies("c", 1, vec![("d", Range::singleton(2))]);
180185
dependency_provider.add_dependencies("d", 0, vec![]);
181186

182187
// Solution.

0 commit comments

Comments
 (0)