dependency graph
This commit is contained in:
parent
e9cf323ca2
commit
28f28b8298
src
@ -1,4 +1,4 @@
|
|||||||
Make `test_covariance` compile by making `BoolStream<'a>` covariant `'a`.
|
Make `test_covariance` compile by making `BoolStream<'a>` covariant `'a`. Restrictions:
|
||||||
- Can only change implementation details of `BoolStream` and its methods and add extra items outside of what's given, i.e. no signature/test change.
|
- Can only change implementation details of `BoolStream` and its methods and add extra items outside of what's given, i.e. no signature/test change.
|
||||||
- Changed version must behave the same way.
|
- Changed version must behave the same way.
|
||||||
```rust
|
```rust
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
Make this compile.
|
Make this compile with the following restrictions:
|
||||||
- `A1` doesn't know about/depend on `A2`.
|
- `A1` doesn't know about/depend on `A2`.
|
||||||
- `A2` doesn't know about/depend on `A1`.
|
- `A2` doesn't know about/depend on `A1`.
|
||||||
- `A1` doesn't know about/depend on `A`.
|
- `A1` doesn't know about/depend on `A`.
|
||||||
- `A2` doesn't know about/depend on `A`.
|
- `A2` doesn't know about/depend on `A`.
|
||||||
- Some types are `A1` but not `A2`.
|
- **Some types are `A1` but not `A2`.**
|
||||||
- Some types are `A2` but not `A1`.
|
- **Some types are `A2` but not `A1`.**
|
||||||
- Some types are `A` but not `A2`.
|
- Some types are `A` but not `A2`.
|
||||||
- Some types are `A` but not `A1`.
|
- Some types are `A` but not `A1`.
|
||||||
- Can't edit definitions of `A`, `test`, `tes1`, `test2`; can only add code outside of those items.
|
- **Can't edit definitions of `A`, `test`, `tes1`, `test2`; can only add code outside of those items.**
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
trait A {
|
trait A {
|
||||||
fn a_ref(&self) -> u64;
|
fn a_ref(&self) -> u64;
|
||||||
@ -72,3 +73,31 @@ fn test2(x: impl A2) {
|
|||||||
# fn ap_move(t: Self::T) -> Self::T { t.a2_move() }
|
# fn ap_move(t: Self::T) -> Self::T { t.a2_move() }
|
||||||
# }
|
# }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You may assume that `A`, `A1`, `A2` can be in separate crates with a dependency graph equivalent to this:
|
||||||
|
```rust
|
||||||
|
# mod __ {
|
||||||
|
mod a1 {
|
||||||
|
pub trait A1 { /* ... */ }
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
mod a2 {
|
||||||
|
pub trait A2 { /* ... */ }
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
mod a {
|
||||||
|
use super::{a1, a2};
|
||||||
|
pub trait A { /* ... */ }
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
mod external {
|
||||||
|
use super::{a::A, a1::A1, a2::A2};
|
||||||
|
fn test(x: impl A) { /* ... */ }
|
||||||
|
fn test1(x: impl A1) { /* ... */ }
|
||||||
|
fn test2(x: impl A2) { /* ... */ }
|
||||||
|
}
|
||||||
|
# }
|
||||||
|
```
|
||||||
|
@ -5,7 +5,7 @@ Random Rust exercises.
|
|||||||
# Solutions
|
# Solutions
|
||||||
|
|
||||||
Currently solutions are only provided in a non-human-readable form in the page source.
|
Currently solutions are only provided in a non-human-readable form in the page source.
|
||||||
Those are mostly inteded for testing that the exercise is even possible to solve.
|
Those are mostly intended for testing that the exercise is even possible to solve.
|
||||||
```rust
|
```rust
|
||||||
# /*
|
# /*
|
||||||
fn fix_me() { // Greyed out because the solution changes this line.
|
fn fix_me() { // Greyed out because the solution changes this line.
|
||||||
|
Loading…
Reference in New Issue
Block a user