about summary refs log tree commit diff
path: root/src/test/rustdoc
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-11-12 13:10:07 +0000
committerbors <bors@rust-lang.org>2020-11-12 13:10:07 +0000
commit7f5a42b073dc2bee2aa625052eb066ee07072048 (patch)
treeaa2c47a52e7b3637d4602303b4e9b7890e324da3 /src/test/rustdoc
parent12f0dba618e761c987142474435dff95ab177f3c (diff)
parentcac8ac61dd3918aa771bbc97d2cb9e82901d101d (diff)
downloadrust-7f5a42b073dc2bee2aa625052eb066ee07072048.tar.gz
rust-7f5a42b073dc2bee2aa625052eb066ee07072048.zip
Auto merge of #78976 - GuillaumeGomez:rollup-endkih3, r=GuillaumeGomez
Rollup of 5 pull requests

Successful merges:

 - #78916 (extend const generics test suite)
 - #78921 (Improve the page title switch handling between search and doc)
 - #78933 (Don't print thread ids and names in `tracing` logs)
 - #78960 (Test default values for const parameters.)
 - #78971 (Update books)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'src/test/rustdoc')
-rw-r--r--src/test/rustdoc/const-generics/auxiliary/extern_crate.rs18
-rw-r--r--src/test/rustdoc/const-generics/const-generics-docs.rs130
2 files changed, 148 insertions, 0 deletions
diff --git a/src/test/rustdoc/const-generics/auxiliary/extern_crate.rs b/src/test/rustdoc/const-generics/auxiliary/extern_crate.rs
new file mode 100644
index 00000000000..b8bd040f7a4
--- /dev/null
+++ b/src/test/rustdoc/const-generics/auxiliary/extern_crate.rs
@@ -0,0 +1,18 @@
+// edition:2018
+#![feature(min_const_generics)]
+
+pub fn extern_fn<const N: usize>() -> impl Iterator<Item = [u8; N]> {
+    [[0; N]; N].iter().copied()
+}
+
+pub struct ExternTy<const N: usize> {
+    pub inner: [u8; N],
+}
+
+pub type TyAlias<const N: usize> = ExternTy<N>;
+
+pub trait WTrait<const N: usize, const M: usize> {
+    fn hey<const P: usize>() -> usize {
+        N + M + P
+    }
+}
diff --git a/src/test/rustdoc/const-generics/const-generics-docs.rs b/src/test/rustdoc/const-generics/const-generics-docs.rs
new file mode 100644
index 00000000000..8dcba36600d
--- /dev/null
+++ b/src/test/rustdoc/const-generics/const-generics-docs.rs
@@ -0,0 +1,130 @@
+// edition:2018
+// aux-build: extern_crate.rs
+#![feature(min_const_generics)]
+#![crate_name = "foo"]
+
+extern crate extern_crate;
+// @has foo/fn.extern_fn.html '//pre[@class="rust fn"]' \
+//      'pub fn extern_fn<const N: usize>() -> impl Iterator<Item = [u8; N]>'
+pub use extern_crate::extern_fn;
+// @has foo/struct.ExternTy.html '//pre[@class="rust struct"]' \
+//      'pub struct ExternTy<const N: usize> {'
+pub use extern_crate::ExternTy;
+// @has foo/type.TyAlias.html '//pre[@class="rust typedef"]' \
+//      'type TyAlias<const N: usize> = ExternTy<N>;'
+pub use extern_crate::TyAlias;
+// @has foo/trait.WTrait.html '//pre[@class="rust trait"]' \
+//      'pub trait WTrait<const N: usize, const M: usize>'
+// @has - '//*[@class="rust trait"]' 'fn hey<const P: usize>() -> usize'
+pub use extern_crate::WTrait;
+
+// @has foo/trait.Trait.html '//pre[@class="rust trait"]' \
+//      'pub trait Trait<const N: usize>'
+// @has - '//*[@id="impl-Trait%3C1_usize%3E-for-u8"]//code' 'impl Trait<1_usize> for u8'
+// @has - '//*[@id="impl-Trait%3C2_usize%3E-for-u8"]//code' 'impl Trait<2_usize> for u8'
+// @has - '//*[@id="impl-Trait%3C{1%20+%202}%3E-for-u8"]//code' 'impl Trait<{1 + 2}> for u8'
+// @has - '//*[@id="impl-Trait%3CN%3E-for-%5Bu8%3B%20N%5D"]//code' \
+//      'impl<const N: usize> Trait<N> for [u8; N]'
+pub trait Trait<const N: usize> {}
+impl Trait<1> for u8 {}
+impl Trait<2> for u8 {}
+impl Trait<{1 + 2}> for u8 {}
+impl<const N: usize> Trait<N> for [u8; N] {}
+
+// @has foo/struct.Foo.html '//pre[@class="rust struct"]' \
+//      'pub struct Foo<const N: usize> where u8: Trait<N>'
+pub struct Foo<const N: usize> where u8: Trait<N>;
+// @has foo/struct.Bar.html '//pre[@class="rust struct"]' 'pub struct Bar<T, const N: usize>(_)'
+pub struct Bar<T, const N: usize>([T; N]);
+
+// @has foo/struct.Foo.html '//h3[@id="impl"]/code' 'impl<const M: usize> Foo<M> where u8: Trait<M>'
+impl<const M: usize> Foo<M> where u8: Trait<M> {
+    // @has - '//*[@id="associatedconstant.FOO_ASSOC"]' 'pub const FOO_ASSOC: usize'
+    pub const FOO_ASSOC: usize = M + 13;
+
+    // @has - '//*[@id="method.hey"]' 'pub fn hey<const N: usize>(&self) -> Bar<u8, N>'
+    pub fn hey<const N: usize>(&self) -> Bar<u8, N> {
+        Bar([0; N])
+    }
+}
+
+// @has foo/struct.Bar.html '//h3[@id="impl"]/code' 'impl<const M: usize> Bar<u8, M>'
+impl<const M: usize> Bar<u8, M> {
+    // @has - '//*[@id="method.hey"]' \
+    //      'pub fn hey<const N: usize>(&self) -> Foo<N> where u8: Trait<N>'
+    pub fn hey<const N: usize>(&self) -> Foo<N> where u8: Trait<N> {
+        Foo
+    }
+}
+
+// @has foo/fn.test.html '//pre[@class="rust fn"]' \
+//      'pub fn test<const N: usize>() -> impl Trait<N> where u8: Trait<N>'
+pub fn test<const N: usize>() -> impl Trait<N> where u8: Trait<N> {
+    2u8
+}
+
+// @has foo/fn.a_sink.html '//pre[@class="rust fn"]' \
+//      'pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N>'
+pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N> {
+    v
+}
+
+// @has foo/fn.b_sink.html '//pre[@class="rust fn"]' \
+//      'pub async fn b_sink<const N: usize>(__arg0: impl Trait<N>)'
+// FIXME(const_generics): This should be `_` not `__arg0`.
+pub async fn b_sink<const N: usize>(_: impl Trait<N>) {}
+
+// @has foo/fn.concrete.html '//pre[@class="rust fn"]' \
+//      'pub fn concrete() -> [u8; 22]'
+pub fn concrete() -> [u8; 3 + std::mem::size_of::<u64>() << 1] {
+    Default::default()
+}
+
+// @has foo/type.Faz.html '//pre[@class="rust typedef"]' \
+//      'type Faz<const N: usize> = [u8; N];'
+pub type Faz<const N: usize> = [u8; N];
+// @has foo/type.Fiz.html '//pre[@class="rust typedef"]' \
+//      'type Fiz<const N: usize> = [[u8; N]; 48];'
+pub type Fiz<const N: usize> = [[u8; N]; 3 << 4];
+
+macro_rules! define_me {
+    ($t:tt<$q:tt>) => {
+        pub struct $t<const $q: usize>([u8; $q]);
+    }
+}
+
+// @has foo/struct.Foz.html '//pre[@class="rust struct"]' \
+//      'pub struct Foz<const N: usize>(_);'
+define_me!(Foz<N>);
+
+trait Q {
+    const ASSOC: usize;
+}
+
+impl<const N: usize> Q for [u8; N] {
+    const ASSOC: usize = N;
+}
+
+// @has foo/fn.q_user.html '//pre[@class="rust fn"]' \
+//      'pub fn q_user() -> [u8; 13]'
+pub fn q_user() -> [u8; <[u8; 13] as Q>::ASSOC] {
+    [0; <[u8; 13] as Q>::ASSOC]
+}
+
+// @has foo/union.Union.html '//pre[@class="rust union"]' \
+//      'pub union Union<const N: usize>'
+pub union Union<const N: usize> {
+    // @has - //pre "pub arr: [u8; N]"
+    pub arr: [u8; N],
+    // @has - //pre "pub another_arr: [(); N]"
+    pub another_arr: [(); N],
+}
+
+// @has foo/enum.Enum.html '//pre[@class="rust enum"]' \
+//      'pub enum Enum<const N: usize>'
+pub enum Enum<const N: usize> {
+    // @has - //pre "Variant([u8; N])"
+    Variant([u8; N]),
+    // @has - //pre "EmptyVariant"
+    EmptyVariant,
+}