//! > Documentation

//! > test_runner_name
documentation_test_runner

//! > cairo_project.toml
[crate_roots]
hello = "src"

//! > cairo_code
fn main() {}

fn free_function<T, impl TPartialEq: PartialEq<T>, +Drop<T>, +Copy<T>>(
    ref self: Array<T>, item: T,
) -> bool {
    return true;
}

#[derive(Copy, Drop, Serde)]
enum MemberEnum {
    Simple: felt252,
    Complex: Span<MemberStruct>,
}

#[derive(Copy, Drop)]
struct MemberStruct {
    name: felt252,
    ty: MemberEnum,
}

trait Shape<T> {
    const SHAPE_CONST: felt252;
    type ShapePair;

    fn area(self: T) -> u32;
}

struct Circle {
    radius: u32,
}

impl CircleShape of Shape<Circle> {
    type ShapePair = (Circle, Circle);
    const SHAPE_CONST: felt252 = 'xyz';
    fn area(self: Circle) -> u32 {
        3 * self.radius * self.radius
    }
}


trait ATrait {}

struct B<T, G, +ATrait> {
    t: T,
    g: G,
}

impl BCopy<T, G, +ATrait, +Copy<T>, +Copy<G>> of Copy<B<T, G>>;

pub extern type bytes31;

pub extern type Pedersen;

pub extern fn pedersen(a: felt252, b: felt252) -> felt252 implicits(Pedersen) nopanic;

fn this_function_has_a_very_long_signature(
    and_contains_a_linked_parameter: Circle,
    lorem: felt252,
    ipsum: felt252,
    and_another_linked_parameter_in_the_middle: Circle,
    dolor: felt252,
    sit: felt252,
    amet: felt252,
    yet_another_linked_parameter_at_the_end: Circle,
) -> Circle {}

fn test_fixed_size_array(param: [u32; 8]) -> [u32; 8] {
    return param;
}

macro count_idents {
    ($x:ident) => { 1 };

    ($x:ident, $y:ident) => { 2 };

    ($x:ident, $y:ident, $z:ident) => { 3 };

    ($x:ident $y:ident $z:ident) => { 3 };

    ($x:ident | $y:ident | $z:ident) => { 3 };

    (abc {$x:ident, (abc $y:ident) }) => { 2 };
}

macro matcher_star {
    ($($x:expr), *) => { 222 };
}

macro square_brackets_redundant_whitespace {
    [$x:ident  ] => {
        println!("{}", $x)
	};
}

//! > Item signature #1

//! > Item documentation #1

//! > Item documentation tokens #1

//! > Item signature #2
fn main()

//! > Item documentation #2

//! > Item documentation tokens #2

//! > Item signature #3
fn free_function<T, impl TPartialEq: PartialEq<T>, +Drop<T>, +Copy<T>>(
    ref self: Array<T>, item: T,
) -> bool

//! > Item documentation #3

//! > Item documentation tokens #3

//! > Item signature #4
enum MemberEnum {
    Simple: felt252,
    Complex: Span<MemberStruct>,
}

//! > Item documentation #4

//! > Item documentation tokens #4

//! > Item signature #5
Simple: felt252

//! > Item documentation #5

//! > Item documentation tokens #5

//! > Item signature #6
Complex: Span<MemberStruct>

//! > Item documentation #6

//! > Item documentation tokens #6

//! > Item signature #7
#[derive(Copy, Drop)]
struct MemberStruct {
    name: felt252,
    ty: MemberEnum,
}

//! > Item documentation #7

//! > Item documentation tokens #7

//! > Item signature #8
name: felt252

//! > Item documentation #8

//! > Item documentation tokens #8

//! > Item signature #9
ty: MemberEnum

//! > Item documentation #9

//! > Item documentation tokens #9

//! > Item signature #10
trait Shape<T>

//! > Item documentation #10

//! > Item documentation tokens #10

//! > Item signature #11
const SHAPE_CONST: felt252;

//! > Item documentation #11

//! > Item documentation tokens #11

//! > Item signature #12
type ShapePair;

//! > Item documentation #12

//! > Item documentation tokens #12

//! > Item signature #13
fn area(self: T) -> u32

//! > Item documentation #13

//! > Item documentation tokens #13

//! > Item signature #14
struct Circle {
    radius: u32,
}

//! > Item documentation #14

//! > Item documentation tokens #14

//! > Item signature #15
radius: u32

//! > Item documentation #15

//! > Item documentation tokens #15

//! > Item signature #16
impl CircleShape of Shape<Circle>;

//! > Item documentation #16

//! > Item documentation tokens #16

//! > Item signature #17
type ShapePair = (Circle, Circle);

//! > Item documentation #17

//! > Item documentation tokens #17

//! > Item signature #18
const SHAPE_CONST: felt252 = 'xyz';

//! > Item documentation #18

//! > Item documentation tokens #18

//! > Item signature #19
fn area(self: Circle) -> u32

//! > Item documentation #19

//! > Item documentation tokens #19

//! > Item signature #20
trait ATrait

//! > Item documentation #20

//! > Item documentation tokens #20

//! > Item signature #21
struct B<T, G, +ATrait> {
    t: T,
    g: G,
}

//! > Item documentation #21

//! > Item documentation tokens #21

//! > Item signature #22
t: T

//! > Item documentation #22

//! > Item documentation tokens #22

//! > Item signature #23
g: G

//! > Item documentation #23

//! > Item documentation tokens #23

//! > Item signature #24
impl BCopy<T, G, +ATrait, +Copy<T>, +Copy<G>> of Copy<B<T, G, + ATrait>>;

//! > Item documentation #24

//! > Item documentation tokens #24

//! > Item signature #25
pub extern type bytes31;

//! > Item documentation #25

//! > Item documentation tokens #25

//! > Item signature #26
pub extern type Pedersen;

//! > Item documentation #26

//! > Item documentation tokens #26

//! > Item signature #27
pub extern fn pedersen(a: felt252, b: felt252) -> felt252 implicits(Pedersen) nopanic;

//! > Item documentation #27

//! > Item documentation tokens #27

//! > Item signature #28
fn this_function_has_a_very_long_signature(
    and_contains_a_linked_parameter: Circle,
    lorem: felt252,
    ipsum: felt252,
    and_another_linked_parameter_in_the_middle: Circle,
    dolor: felt252,
    sit: felt252,
    amet: felt252,
    yet_another_linked_parameter_at_the_end: Circle,
) -> Circle

//! > Item documentation #28

//! > Item documentation tokens #28

//! > Item signature #29
fn test_fixed_size_array(param: [u32; 8]) -> [u32; 8]

//! > Item documentation #29

//! > Item documentation tokens #29

//! > Item signature #30
macro count_idents {
    ($x:ident) => { ... };
    ($x:ident, $y:ident) => { ... };
    ($x:ident, $y:ident, $z:ident) => { ... };
    ($x:ident $y:ident $z:ident) => { ... };
    ($x:ident | $y:ident | $z:ident) => { ... };
    (abc {$x:ident, (abc $y:ident) }) => { ... };
}

//! > Item documentation #30

//! > Item documentation tokens #30

//! > Item signature #31
macro matcher_star {
    ($($x:expr), *) => { ... };
}

//! > Item documentation #31

//! > Item documentation tokens #31

//! > Item signature #32
macro square_brackets_redundant_whitespace {
    [$x:ident] => { ... };
}

//! > Item documentation #32

//! > Item documentation tokens #32
