diff options
Diffstat (limited to 'crates/ra_hir_ty/src')
-rw-r--r-- | crates/ra_hir_ty/src/tests/traits.rs | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/crates/ra_hir_ty/src/tests/traits.rs b/crates/ra_hir_ty/src/tests/traits.rs index 0419bc751..e8778d419 100644 --- a/crates/ra_hir_ty/src/tests/traits.rs +++ b/crates/ra_hir_ty/src/tests/traits.rs | |||
@@ -2665,7 +2665,6 @@ fn test() { | |||
2665 | Enum::Variant.test(); | 2665 | Enum::Variant.test(); |
2666 | } | 2666 | } |
2667 | "#, true), | 2667 | "#, true), |
2668 | // wrong result, because the built-in Copy impl for fn defs doesn't exist in Chalk yet | ||
2669 | @r###" | 2668 | @r###" |
2670 | 42..44 '{}': () | 2669 | 42..44 '{}': () |
2671 | 61..62 'T': {unknown} | 2670 | 61..62 'T': {unknown} |
@@ -2674,13 +2673,13 @@ fn test() { | |||
2674 | 146..150 'self': &Self | 2673 | 146..150 'self': &Self |
2675 | 202..282 '{ ...t(); }': () | 2674 | 202..282 '{ ...t(); }': () |
2676 | 208..211 'foo': fn foo() | 2675 | 208..211 'foo': fn foo() |
2677 | 208..218 'foo.test()': {unknown} | 2676 | 208..218 'foo.test()': bool |
2678 | 224..227 'bar': fn bar<{unknown}>({unknown}) -> {unknown} | 2677 | 224..227 'bar': fn bar<{unknown}>({unknown}) -> {unknown} |
2679 | 224..234 'bar.test()': {unknown} | 2678 | 224..234 'bar.test()': bool |
2680 | 240..246 'Struct': Struct(usize) -> Struct | 2679 | 240..246 'Struct': Struct(usize) -> Struct |
2681 | 240..253 'Struct.test()': {unknown} | 2680 | 240..253 'Struct.test()': bool |
2682 | 259..272 'Enum::Variant': Variant(usize) -> Enum | 2681 | 259..272 'Enum::Variant': Variant(usize) -> Enum |
2683 | 259..279 'Enum::...test()': {unknown} | 2682 | 259..279 'Enum::...test()': bool |
2684 | "### | 2683 | "### |
2685 | ); | 2684 | ); |
2686 | } | 2685 | } |
@@ -2754,3 +2753,48 @@ fn test() { | |||
2754 | "### | 2753 | "### |
2755 | ); | 2754 | ); |
2756 | } | 2755 | } |
2756 | |||
2757 | #[test] | ||
2758 | fn integer_range_iterate() { | ||
2759 | let t = type_at( | ||
2760 | r#" | ||
2761 | //- /main.rs crate:main deps:std | ||
2762 | fn test() { | ||
2763 | for x in 0..100 { x<|>; } | ||
2764 | } | ||
2765 | |||
2766 | //- /std.rs crate:std | ||
2767 | pub mod ops { | ||
2768 | pub struct Range<Idx> { | ||
2769 | pub start: Idx, | ||
2770 | pub end: Idx, | ||
2771 | } | ||
2772 | } | ||
2773 | |||
2774 | pub mod iter { | ||
2775 | pub trait Iterator { | ||
2776 | type Item; | ||
2777 | } | ||
2778 | |||
2779 | pub trait IntoIterator { | ||
2780 | type Item; | ||
2781 | type IntoIter: Iterator<Item = Self::Item>; | ||
2782 | } | ||
2783 | |||
2784 | impl<T> IntoIterator for T where T: Iterator { | ||
2785 | type Item = <T as Iterator>::Item; | ||
2786 | type IntoIter = Self; | ||
2787 | } | ||
2788 | } | ||
2789 | |||
2790 | trait Step {} | ||
2791 | impl Step for i32 {} | ||
2792 | impl Step for i64 {} | ||
2793 | |||
2794 | impl<A: Step> iter::Iterator for ops::Range<A> { | ||
2795 | type Item = A; | ||
2796 | } | ||
2797 | "#, | ||
2798 | ); | ||
2799 | assert_eq!(t, "i32"); | ||
2800 | } | ||