Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates > by-pkgid > 4e2dbb669434a7691662cb2f0ad38972 > files > 15574

rust-doc-1.28.0-1.mga6.armv7hl.rpm

<!DOCTYPE HTML>
<html lang="en" class="sidebar-visible no-js">
    <head>
        <!-- Book generated using mdBook -->
        <meta charset="UTF-8">
        <title>test - </title>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="theme-color" content="#ffffff" />

        <base href="../">

        <link rel="stylesheet" href="book.css">
        <link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
        <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css">

        <link rel="shortcut icon" href="favicon.png">

        <!-- Font Awesome -->
        <link rel="stylesheet" href="_FontAwesome/css/font-awesome.css">

        <link rel="stylesheet" href="highlight.css">
        <link rel="stylesheet" href="tomorrow-night.css">
        <link rel="stylesheet" href="ayu-highlight.css">

        <!-- Custom theme stylesheets -->
        

        

    </head>
    <body class="light">
        <!-- Work around some values being stored in localStorage wrapped in quotes -->
        <script type="text/javascript">
            try {
                var theme = localStorage.getItem('mdbook-theme');
                var sidebar = localStorage.getItem('mdbook-sidebar');

                if (theme.startsWith('"') && theme.endsWith('"')) {
                    localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
                }

                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
                }
            } catch (e) { }
        </script>

        <!-- Set the theme before any content is loaded, prevents flash -->
        <script type="text/javascript">
            var theme;
            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } 
            if (theme === null || theme === undefined) { theme = 'light'; }
            document.body.className = theme;
            document.querySelector('html').className = theme + ' js';
        </script>

        <!-- Hide / unhide sidebar before it is displayed -->
        <script type="text/javascript">
            var html = document.querySelector('html');
            var sidebar = 'hidden';
            if (document.body.clientWidth >= 1080) {
                try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
                sidebar = sidebar || 'visible';
            }
            html.classList.remove('sidebar-visible');
            html.classList.add("sidebar-" + sidebar);
        </script>

        <nav id="sidebar" class="sidebar" aria-label="Table of contents">
            <ol class="chapter"><li class="affix"><a href="the-unstable-book.html">The Unstable Book</a></li><li><a href="compiler-flags.html"><strong aria-hidden="true">1.</strong> Compiler flags</a></li><li><ol class="section"><li><a href="compiler-flags/linker-flavor.html"><strong aria-hidden="true">1.1.</strong> linker_flavor</a></li><li><a href="compiler-flags/profile.html"><strong aria-hidden="true">1.2.</strong> profile</a></li></ol></li><li><a href="language-features.html"><strong aria-hidden="true">2.</strong> Language features</a></li><li><ol class="section"><li><a href="language-features/aarch64-target-feature.html"><strong aria-hidden="true">2.1.</strong> aarch64_target_feature</a></li><li><a href="language-features/abi-msp430-interrupt.html"><strong aria-hidden="true">2.2.</strong> abi_msp430_interrupt</a></li><li><a href="language-features/abi-ptx.html"><strong aria-hidden="true">2.3.</strong> abi_ptx</a></li><li><a href="language-features/abi-thiscall.html"><strong aria-hidden="true">2.4.</strong> abi_thiscall</a></li><li><a href="language-features/abi-unadjusted.html"><strong aria-hidden="true">2.5.</strong> abi_unadjusted</a></li><li><a href="language-features/abi-vectorcall.html"><strong aria-hidden="true">2.6.</strong> abi_vectorcall</a></li><li><a href="language-features/abi-x86-interrupt.html"><strong aria-hidden="true">2.7.</strong> abi_x86_interrupt</a></li><li><a href="language-features/allocator-internals.html"><strong aria-hidden="true">2.8.</strong> allocator_internals</a></li><li><a href="language-features/allow-fail.html"><strong aria-hidden="true">2.9.</strong> allow_fail</a></li><li><a href="language-features/allow-internal-unsafe.html"><strong aria-hidden="true">2.10.</strong> allow_internal_unsafe</a></li><li><a href="language-features/allow-internal-unstable.html"><strong aria-hidden="true">2.11.</strong> allow_internal_unstable</a></li><li><a href="language-features/arbitrary-self-types.html"><strong aria-hidden="true">2.12.</strong> arbitrary_self_types</a></li><li><a href="language-features/arm-target-feature.html"><strong aria-hidden="true">2.13.</strong> arm_target_feature</a></li><li><a href="language-features/asm.html"><strong aria-hidden="true">2.14.</strong> asm</a></li><li><a href="language-features/associated-type-defaults.html"><strong aria-hidden="true">2.15.</strong> associated_type_defaults</a></li><li><a href="language-features/attr-literals.html"><strong aria-hidden="true">2.16.</strong> attr_literals</a></li><li><a href="language-features/avx512-target-feature.html"><strong aria-hidden="true">2.17.</strong> avx512_target_feature</a></li><li><a href="language-features/box-patterns.html"><strong aria-hidden="true">2.18.</strong> box_patterns</a></li><li><a href="language-features/box-syntax.html"><strong aria-hidden="true">2.19.</strong> box_syntax</a></li><li><a href="language-features/catch-expr.html"><strong aria-hidden="true">2.20.</strong> catch_expr</a></li><li><a href="language-features/cfg-target-has-atomic.html"><strong aria-hidden="true">2.21.</strong> cfg_target_has_atomic</a></li><li><a href="language-features/cfg-target-thread-local.html"><strong aria-hidden="true">2.22.</strong> cfg_target_thread_local</a></li><li><a href="language-features/cfg-target-vendor.html"><strong aria-hidden="true">2.23.</strong> cfg_target_vendor</a></li><li><a href="language-features/compiler-builtins.html"><strong aria-hidden="true">2.24.</strong> compiler_builtins</a></li><li><a href="language-features/concat-idents.html"><strong aria-hidden="true">2.25.</strong> concat_idents</a></li><li><a href="language-features/const-fn.html"><strong aria-hidden="true">2.26.</strong> const_fn</a></li><li><a href="language-features/const-let.html"><strong aria-hidden="true">2.27.</strong> const_let</a></li><li><a href="language-features/crate-in-paths.html"><strong aria-hidden="true">2.28.</strong> crate_in_paths</a></li><li><a href="language-features/crate-visibility-modifier.html"><strong aria-hidden="true">2.29.</strong> crate_visibility_modifier</a></li><li><a href="language-features/custom-attribute.html"><strong aria-hidden="true">2.30.</strong> custom_attribute</a></li><li><a href="language-features/custom-derive.html"><strong aria-hidden="true">2.31.</strong> custom_derive</a></li><li><a href="language-features/decl-macro.html"><strong aria-hidden="true">2.32.</strong> decl_macro</a></li><li><a href="language-features/default-type-parameter-fallback.html"><strong aria-hidden="true">2.33.</strong> default_type_parameter_fallback</a></li><li><a href="language-features/doc-alias.html"><strong aria-hidden="true">2.34.</strong> doc_alias</a></li><li><a href="language-features/doc-cfg.html"><strong aria-hidden="true">2.35.</strong> doc_cfg</a></li><li><a href="language-features/doc-keyword.html"><strong aria-hidden="true">2.36.</strong> doc_keyword</a></li><li><a href="language-features/doc-masked.html"><strong aria-hidden="true">2.37.</strong> doc_masked</a></li><li><a href="language-features/doc-spotlight.html"><strong aria-hidden="true">2.38.</strong> doc_spotlight</a></li><li><a href="language-features/dropck-eyepatch.html"><strong aria-hidden="true">2.39.</strong> dropck_eyepatch</a></li><li><a href="language-features/dropck-parametricity.html"><strong aria-hidden="true">2.40.</strong> dropck_parametricity</a></li><li><a href="language-features/exclusive-range-pattern.html"><strong aria-hidden="true">2.41.</strong> exclusive_range_pattern</a></li><li><a href="language-features/exhaustive-patterns.html"><strong aria-hidden="true">2.42.</strong> exhaustive_patterns</a></li><li><a href="language-features/extern-absolute-paths.html"><strong aria-hidden="true">2.43.</strong> extern_absolute_paths</a></li><li><a href="language-features/extern-in-paths.html"><strong aria-hidden="true">2.44.</strong> extern_in_paths</a></li><li><a href="language-features/extern-prelude.html"><strong aria-hidden="true">2.45.</strong> extern_prelude</a></li><li><a href="language-features/extern-types.html"><strong aria-hidden="true">2.46.</strong> extern_types</a></li><li><a href="language-features/external-doc.html"><strong aria-hidden="true">2.47.</strong> external_doc</a></li><li><a href="language-features/fundamental.html"><strong aria-hidden="true">2.48.</strong> fundamental</a></li><li><a href="language-features/generators.html"><strong aria-hidden="true">2.49.</strong> generators</a></li><li><a href="language-features/generic-associated-types.html"><strong aria-hidden="true">2.50.</strong> generic_associated_types</a></li><li><a href="language-features/global-asm.html"><strong aria-hidden="true">2.51.</strong> global_asm</a></li><li><a href="language-features/hexagon-target-feature.html"><strong aria-hidden="true">2.52.</strong> hexagon_target_feature</a></li><li><a href="language-features/if-while-or-patterns.html"><strong aria-hidden="true">2.53.</strong> if_while_or_patterns</a></li><li><a href="language-features/in-band-lifetimes.html"><strong aria-hidden="true">2.54.</strong> in_band_lifetimes</a></li><li><a href="language-features/infer-outlives-requirements.html"><strong aria-hidden="true">2.55.</strong> infer_outlives_requirements</a></li><li><a href="language-features/intrinsics.html"><strong aria-hidden="true">2.56.</strong> intrinsics</a></li><li><a href="language-features/label-break-value.html"><strong aria-hidden="true">2.57.</strong> label_break_value</a></li><li><a href="language-features/lang-items.html"><strong aria-hidden="true">2.58.</strong> lang_items</a></li><li><a href="language-features/link-args.html"><strong aria-hidden="true">2.59.</strong> link_args</a></li><li><a href="language-features/link-cfg.html"><strong aria-hidden="true">2.60.</strong> link_cfg</a></li><li><a href="language-features/link-llvm-intrinsics.html"><strong aria-hidden="true">2.61.</strong> link_llvm_intrinsics</a></li><li><a href="language-features/linkage.html"><strong aria-hidden="true">2.62.</strong> linkage</a></li><li><a href="language-features/log-syntax.html"><strong aria-hidden="true">2.63.</strong> log_syntax</a></li><li><a href="language-features/macro-at-most-once-rep.html"><strong aria-hidden="true">2.64.</strong> macro_at_most_once_rep</a></li><li><a href="language-features/macro-literal-matcher.html"><strong aria-hidden="true">2.65.</strong> macro_literal_matcher</a></li><li><a href="language-features/macro-vis-matcher.html"><strong aria-hidden="true">2.66.</strong> macro_vis_matcher</a></li><li><a href="language-features/macros-in-extern.html"><strong aria-hidden="true">2.67.</strong> macros_in_extern</a></li><li><a href="language-features/main.html"><strong aria-hidden="true">2.68.</strong> main</a></li><li><a href="language-features/mips-target-feature.html"><strong aria-hidden="true">2.69.</strong> mips_target_feature</a></li><li><a href="language-features/mmx-target-feature.html"><strong aria-hidden="true">2.70.</strong> mmx_target_feature</a></li><li><a href="language-features/naked-functions.html"><strong aria-hidden="true">2.71.</strong> naked_functions</a></li><li><a href="language-features/needs-allocator.html"><strong aria-hidden="true">2.72.</strong> needs_allocator</a></li><li><a href="language-features/needs-panic-runtime.html"><strong aria-hidden="true">2.73.</strong> needs_panic_runtime</a></li><li><a href="language-features/never-type.html"><strong aria-hidden="true">2.74.</strong> never_type</a></li><li><a href="language-features/nll.html"><strong aria-hidden="true">2.75.</strong> nll</a></li><li><a href="language-features/no-core.html"><strong aria-hidden="true">2.76.</strong> no_core</a></li><li><a href="language-features/no-debug.html"><strong aria-hidden="true">2.77.</strong> no_debug</a></li><li><a href="language-features/non-ascii-idents.html"><strong aria-hidden="true">2.78.</strong> non_ascii_idents</a></li><li><a href="language-features/non-exhaustive.html"><strong aria-hidden="true">2.79.</strong> non_exhaustive</a></li><li><a href="language-features/non-modrs-mods.html"><strong aria-hidden="true">2.80.</strong> non_modrs_mods</a></li><li><a href="language-features/omit-gdb-pretty-printer-section.html"><strong aria-hidden="true">2.81.</strong> omit_gdb_pretty_printer_section</a></li><li><a href="language-features/on-unimplemented.html"><strong aria-hidden="true">2.82.</strong> on_unimplemented</a></li><li><a href="language-features/optin-builtin-traits.html"><strong aria-hidden="true">2.83.</strong> optin_builtin_traits</a></li><li><a href="language-features/overlapping-marker-traits.html"><strong aria-hidden="true">2.84.</strong> overlapping_marker_traits</a></li><li><a href="language-features/panic-implementation.html"><strong aria-hidden="true">2.85.</strong> panic_implementation</a></li><li><a href="language-features/panic-runtime.html"><strong aria-hidden="true">2.86.</strong> panic_runtime</a></li><li><a href="language-features/pattern-parentheses.html"><strong aria-hidden="true">2.87.</strong> pattern_parentheses</a></li><li><a href="language-features/platform-intrinsics.html"><strong aria-hidden="true">2.88.</strong> platform_intrinsics</a></li><li><a href="language-features/plugin.html"><strong aria-hidden="true">2.89.</strong> plugin</a></li><li><a href="language-features/plugin-registrar.html"><strong aria-hidden="true">2.90.</strong> plugin_registrar</a></li><li><a href="language-features/powerpc-target-feature.html"><strong aria-hidden="true">2.91.</strong> powerpc_target_feature</a></li><li><a href="language-features/prelude-import.html"><strong aria-hidden="true">2.92.</strong> prelude_import</a></li><li><a href="language-features/proc-macro.html"><strong aria-hidden="true">2.93.</strong> proc_macro</a></li><li><a href="language-features/proc-macro-expr.html"><strong aria-hidden="true">2.94.</strong> proc_macro_expr</a></li><li><a href="language-features/proc-macro-gen.html"><strong aria-hidden="true">2.95.</strong> proc_macro_gen</a></li><li><a href="language-features/proc-macro-mod.html"><strong aria-hidden="true">2.96.</strong> proc_macro_mod</a></li><li><a href="language-features/proc-macro-non-items.html"><strong aria-hidden="true">2.97.</strong> proc_macro_non_items</a></li><li><a href="language-features/proc-macro-path-invoc.html"><strong aria-hidden="true">2.98.</strong> proc_macro_path_invoc</a></li><li><a href="language-features/profiler-runtime.html"><strong aria-hidden="true">2.99.</strong> profiler_runtime</a></li><li><a href="language-features/quote.html"><strong aria-hidden="true">2.100.</strong> quote</a></li><li><a href="language-features/raw-identifiers.html"><strong aria-hidden="true">2.101.</strong> raw_identifiers</a></li><li><a href="language-features/repr-packed.html"><strong aria-hidden="true">2.102.</strong> repr_packed</a></li><li><a href="language-features/repr-simd.html"><strong aria-hidden="true">2.103.</strong> repr_simd</a></li><li><a href="language-features/repr128.html"><strong aria-hidden="true">2.104.</strong> repr128</a></li><li><a href="language-features/rustc-attrs.html"><strong aria-hidden="true">2.105.</strong> rustc_attrs</a></li><li><a href="language-features/rustc-const-unstable.html"><strong aria-hidden="true">2.106.</strong> rustc_const_unstable</a></li><li><a href="language-features/rustc-diagnostic-macros.html"><strong aria-hidden="true">2.107.</strong> rustc_diagnostic_macros</a></li><li><a href="language-features/sanitizer-runtime.html"><strong aria-hidden="true">2.108.</strong> sanitizer_runtime</a></li><li><a href="language-features/simd-ffi.html"><strong aria-hidden="true">2.109.</strong> simd_ffi</a></li><li><a href="language-features/slice-patterns.html"><strong aria-hidden="true">2.110.</strong> slice_patterns</a></li><li><a href="language-features/specialization.html"><strong aria-hidden="true">2.111.</strong> specialization</a></li><li><a href="language-features/sse4a-target-feature.html"><strong aria-hidden="true">2.112.</strong> sse4a_target_feature</a></li><li><a href="language-features/staged-api.html"><strong aria-hidden="true">2.113.</strong> staged_api</a></li><li><a href="language-features/start.html"><strong aria-hidden="true">2.114.</strong> start</a></li><li><a href="language-features/static-nobundle.html"><strong aria-hidden="true">2.115.</strong> static_nobundle</a></li><li><a href="language-features/stmt-expr-attributes.html"><strong aria-hidden="true">2.116.</strong> stmt_expr_attributes</a></li><li><a href="language-features/structural-match.html"><strong aria-hidden="true">2.117.</strong> structural_match</a></li><li><a href="language-features/tbm-target-feature.html"><strong aria-hidden="true">2.118.</strong> tbm_target_feature</a></li><li><a href="language-features/thread-local.html"><strong aria-hidden="true">2.119.</strong> thread_local</a></li><li><a href="language-features/tool-attributes.html"><strong aria-hidden="true">2.120.</strong> tool_attributes</a></li><li><a href="language-features/trace-macros.html"><strong aria-hidden="true">2.121.</strong> trace_macros</a></li><li><a href="language-features/trait-alias.html"><strong aria-hidden="true">2.122.</strong> trait_alias</a></li><li><a href="language-features/trivial-bounds.html"><strong aria-hidden="true">2.123.</strong> trivial_bounds</a></li><li><a href="language-features/type-ascription.html"><strong aria-hidden="true">2.124.</strong> type_ascription</a></li><li><a href="language-features/unboxed-closures.html"><strong aria-hidden="true">2.125.</strong> unboxed_closures</a></li><li><a href="language-features/underscore-imports.html"><strong aria-hidden="true">2.126.</strong> underscore_imports</a></li><li><a href="language-features/unsized-tuple-coercion.html"><strong aria-hidden="true">2.127.</strong> unsized_tuple_coercion</a></li><li><a href="language-features/untagged-unions.html"><strong aria-hidden="true">2.128.</strong> untagged_unions</a></li><li><a href="language-features/unwind-attributes.html"><strong aria-hidden="true">2.129.</strong> unwind_attributes</a></li><li><a href="language-features/use-extern-macros.html"><strong aria-hidden="true">2.130.</strong> use_extern_macros</a></li><li><a href="language-features/used.html"><strong aria-hidden="true">2.131.</strong> used</a></li><li><a href="language-features/wasm-custom-section.html"><strong aria-hidden="true">2.132.</strong> wasm_custom_section</a></li><li><a href="language-features/wasm-import-module.html"><strong aria-hidden="true">2.133.</strong> wasm_import_module</a></li></ol></li><li><a href="library-features.html"><strong aria-hidden="true">3.</strong> Library Features</a></li><li><ol class="section"><li><a href="library-features/align-offset.html"><strong aria-hidden="true">3.1.</strong> align_offset</a></li><li><a href="library-features/alloc.html"><strong aria-hidden="true">3.2.</strong> alloc</a></li><li><a href="library-features/alloc-error-hook.html"><strong aria-hidden="true">3.3.</strong> alloc_error_hook</a></li><li><a href="library-features/alloc-internals.html"><strong aria-hidden="true">3.4.</strong> alloc_internals</a></li><li><a href="library-features/alloc-jemalloc.html"><strong aria-hidden="true">3.5.</strong> alloc_jemalloc</a></li><li><a href="library-features/alloc-system.html"><strong aria-hidden="true">3.6.</strong> alloc_system</a></li><li><a href="library-features/allocator-api.html"><strong aria-hidden="true">3.7.</strong> allocator_api</a></li><li><a href="library-features/array-error-internals.html"><strong aria-hidden="true">3.8.</strong> array_error_internals</a></li><li><a href="library-features/ascii-ctype.html"><strong aria-hidden="true">3.9.</strong> ascii_ctype</a></li><li><a href="library-features/atomic-min-max.html"><strong aria-hidden="true">3.10.</strong> atomic_min_max</a></li><li><a href="library-features/box-into-raw-non-null.html"><strong aria-hidden="true">3.11.</strong> box_into_raw_non_null</a></li><li><a href="library-features/bufreader-buffer.html"><strong aria-hidden="true">3.12.</strong> bufreader_buffer</a></li><li><a href="library-features/bufreader-is-empty.html"><strong aria-hidden="true">3.13.</strong> bufreader_is_empty</a></li><li><a href="library-features/bufreader-seek-relative.html"><strong aria-hidden="true">3.14.</strong> bufreader_seek_relative</a></li><li><a href="library-features/c-void-variant.html"><strong aria-hidden="true">3.15.</strong> c_void_variant</a></li><li><a href="library-features/cell-update.html"><strong aria-hidden="true">3.16.</strong> cell_update</a></li><li><a href="library-features/char-error-internals.html"><strong aria-hidden="true">3.17.</strong> char_error_internals</a></li><li><a href="library-features/coerce-unsized.html"><strong aria-hidden="true">3.18.</strong> coerce_unsized</a></li><li><a href="library-features/compiler-builtins-lib.html"><strong aria-hidden="true">3.19.</strong> compiler_builtins_lib</a></li><li><a href="library-features/concat-idents-macro.html"><strong aria-hidden="true">3.20.</strong> concat_idents_macro</a></li><li><a href="library-features/const-int-ops.html"><strong aria-hidden="true">3.21.</strong> const_int_ops</a></li><li><a href="library-features/const-manually-drop-new.html"><strong aria-hidden="true">3.22.</strong> const_manually_drop_new</a></li><li><a href="library-features/const-slice-as-ptr.html"><strong aria-hidden="true">3.23.</strong> const_slice_as_ptr</a></li><li><a href="library-features/const-slice-len.html"><strong aria-hidden="true">3.24.</strong> const_slice_len</a></li><li><a href="library-features/const-str-as-bytes.html"><strong aria-hidden="true">3.25.</strong> const_str_as_bytes</a></li><li><a href="library-features/const-str-as-ptr.html"><strong aria-hidden="true">3.26.</strong> const_str_as_ptr</a></li><li><a href="library-features/const-str-len.html"><strong aria-hidden="true">3.27.</strong> const_str_len</a></li><li><a href="library-features/const-string-new.html"><strong aria-hidden="true">3.28.</strong> const_string_new</a></li><li><a href="library-features/const-type-id.html"><strong aria-hidden="true">3.29.</strong> const_type_id</a></li><li><a href="library-features/const-vec-new.html"><strong aria-hidden="true">3.30.</strong> const_vec_new</a></li><li><a href="library-features/core-intrinsics.html"><strong aria-hidden="true">3.31.</strong> core_intrinsics</a></li><li><a href="library-features/core-panic.html"><strong aria-hidden="true">3.32.</strong> core_panic</a></li><li><a href="library-features/core-panic-info.html"><strong aria-hidden="true">3.33.</strong> core_panic_info</a></li><li><a href="library-features/core-private-bignum.html"><strong aria-hidden="true">3.34.</strong> core_private_bignum</a></li><li><a href="library-features/core-private-diy-float.html"><strong aria-hidden="true">3.35.</strong> core_private_diy_float</a></li><li><a href="library-features/deadline-api.html"><strong aria-hidden="true">3.36.</strong> deadline_api</a></li><li><a href="library-features/dec2flt.html"><strong aria-hidden="true">3.37.</strong> dec2flt</a></li><li><a href="library-features/decode-utf8.html"><strong aria-hidden="true">3.38.</strong> decode_utf8</a></li><li><a href="library-features/derive-clone-copy.html"><strong aria-hidden="true">3.39.</strong> derive_clone_copy</a></li><li><a href="library-features/derive-eq.html"><strong aria-hidden="true">3.40.</strong> derive_eq</a></li><li><a href="library-features/drain-filter.html"><strong aria-hidden="true">3.41.</strong> drain_filter</a></li><li><a href="library-features/duration-as-u128.html"><strong aria-hidden="true">3.42.</strong> duration_as_u128</a></li><li><a href="library-features/duration-getters.html"><strong aria-hidden="true">3.43.</strong> duration_getters</a></li><li><a href="library-features/error-type-id.html"><strong aria-hidden="true">3.44.</strong> error_type_id</a></li><li><a href="library-features/euclidean-division.html"><strong aria-hidden="true">3.45.</strong> euclidean_division</a></li><li><a href="library-features/exact-chunks.html"><strong aria-hidden="true">3.46.</strong> exact_chunks</a></li><li><a href="library-features/exact-size-is-empty.html"><strong aria-hidden="true">3.47.</strong> exact_size_is_empty</a></li><li><a href="library-features/extra-log-consts.html"><strong aria-hidden="true">3.48.</strong> extra_log_consts</a></li><li><a href="library-features/fd.html"><strong aria-hidden="true">3.49.</strong> fd</a></li><li><a href="library-features/fd-read.html"><strong aria-hidden="true">3.50.</strong> fd_read</a></li><li><a href="library-features/fixed-size-array.html"><strong aria-hidden="true">3.51.</strong> fixed_size_array</a></li><li><a href="library-features/flt2dec.html"><strong aria-hidden="true">3.52.</strong> flt2dec</a></li><li><a href="library-features/fmt-internals.html"><strong aria-hidden="true">3.53.</strong> fmt_internals</a></li><li><a href="library-features/fn-traits.html"><strong aria-hidden="true">3.54.</strong> fn_traits</a></li><li><a href="library-features/fnbox.html"><strong aria-hidden="true">3.55.</strong> fnbox</a></li><li><a href="library-features/future-atomic-orderings.html"><strong aria-hidden="true">3.56.</strong> future_atomic_orderings</a></li><li><a href="library-features/futures-api.html"><strong aria-hidden="true">3.57.</strong> futures_api</a></li><li><a href="library-features/generator-trait.html"><strong aria-hidden="true">3.58.</strong> generator_trait</a></li><li><a href="library-features/get-type-id.html"><strong aria-hidden="true">3.59.</strong> get_type_id</a></li><li><a href="library-features/hashmap-internals.html"><strong aria-hidden="true">3.60.</strong> hashmap_internals</a></li><li><a href="library-features/int-error-internals.html"><strong aria-hidden="true">3.61.</strong> int_error_internals</a></li><li><a href="library-features/int-to-from-bytes.html"><strong aria-hidden="true">3.62.</strong> int_to_from_bytes</a></li><li><a href="library-features/integer-atomics.html"><strong aria-hidden="true">3.63.</strong> integer_atomics</a></li><li><a href="library-features/io.html"><strong aria-hidden="true">3.64.</strong> io</a></li><li><a href="library-features/io-error-internals.html"><strong aria-hidden="true">3.65.</strong> io_error_internals</a></li><li><a href="library-features/ip.html"><strong aria-hidden="true">3.66.</strong> ip</a></li><li><a href="library-features/ip-constructors.html"><strong aria-hidden="true">3.67.</strong> ip_constructors</a></li><li><a href="library-features/iterator-find-map.html"><strong aria-hidden="true">3.68.</strong> iterator_find_map</a></li><li><a href="library-features/iterator-flatten.html"><strong aria-hidden="true">3.69.</strong> iterator_flatten</a></li><li><a href="library-features/libstd-io-internals.html"><strong aria-hidden="true">3.70.</strong> libstd_io_internals</a></li><li><a href="library-features/libstd-sys-internals.html"><strong aria-hidden="true">3.71.</strong> libstd_sys_internals</a></li><li><a href="library-features/libstd-thread-internals.html"><strong aria-hidden="true">3.72.</strong> libstd_thread_internals</a></li><li><a href="library-features/linked-list-extras.html"><strong aria-hidden="true">3.73.</strong> linked_list_extras</a></li><li><a href="library-features/map-entry-replace.html"><strong aria-hidden="true">3.74.</strong> map_entry_replace</a></li><li><a href="library-features/map-get-key-value.html"><strong aria-hidden="true">3.75.</strong> map_get_key_value</a></li><li><a href="library-features/mpsc-select.html"><strong aria-hidden="true">3.76.</strong> mpsc_select</a></li><li><a href="library-features/n16.html"><strong aria-hidden="true">3.77.</strong> n16</a></li><li><a href="library-features/no-more-cas.html"><strong aria-hidden="true">3.78.</strong> no_more_cas</a></li><li><a href="library-features/no-panic-pow.html"><strong aria-hidden="true">3.79.</strong> no_panic_pow</a></li><li><a href="library-features/offset-to.html"><strong aria-hidden="true">3.80.</strong> offset_to</a></li><li><a href="library-features/once-poison.html"><strong aria-hidden="true">3.81.</strong> once_poison</a></li><li><a href="library-features/option-xor.html"><strong aria-hidden="true">3.82.</strong> option_xor</a></li><li><a href="library-features/panic-abort.html"><strong aria-hidden="true">3.83.</strong> panic_abort</a></li><li><a href="library-features/panic-info-message.html"><strong aria-hidden="true">3.84.</strong> panic_info_message</a></li><li><a href="library-features/panic-internals.html"><strong aria-hidden="true">3.85.</strong> panic_internals</a></li><li><a href="library-features/panic-unwind.html"><strong aria-hidden="true">3.86.</strong> panic_unwind</a></li><li><a href="library-features/pattern.html"><strong aria-hidden="true">3.87.</strong> pattern</a></li><li><a href="library-features/pin.html"><strong aria-hidden="true">3.88.</strong> pin</a></li><li><a href="library-features/print-internals.html"><strong aria-hidden="true">3.89.</strong> print_internals</a></li><li><a href="library-features/proc-macro-internals.html"><strong aria-hidden="true">3.90.</strong> proc_macro_internals</a></li><li><a href="library-features/process-exitcode-placeholder.html"><strong aria-hidden="true">3.91.</strong> process_exitcode_placeholder</a></li><li><a href="library-features/process-internals.html"><strong aria-hidden="true">3.92.</strong> process_internals</a></li><li><a href="library-features/profiler-runtime-lib.html"><strong aria-hidden="true">3.93.</strong> profiler_runtime_lib</a></li><li><a href="library-features/ptr-internals.html"><strong aria-hidden="true">3.94.</strong> ptr_internals</a></li><li><a href="library-features/ptr-offset-from.html"><strong aria-hidden="true">3.95.</strong> ptr_offset_from</a></li><li><a href="library-features/ptr-wrapping-offset-from.html"><strong aria-hidden="true">3.96.</strong> ptr_wrapping_offset_from</a></li><li><a href="library-features/range-contains.html"><strong aria-hidden="true">3.97.</strong> range_contains</a></li><li><a href="library-features/range-is-empty.html"><strong aria-hidden="true">3.98.</strong> range_is_empty</a></li><li><a href="library-features/raw.html"><strong aria-hidden="true">3.99.</strong> raw</a></li><li><a href="library-features/rc-downcast.html"><strong aria-hidden="true">3.100.</strong> rc_downcast</a></li><li><a href="library-features/read-initializer.html"><strong aria-hidden="true">3.101.</strong> read_initializer</a></li><li><a href="library-features/refcell-map-split.html"><strong aria-hidden="true">3.102.</strong> refcell_map_split</a></li><li><a href="library-features/refcell-replace-swap.html"><strong aria-hidden="true">3.103.</strong> refcell_replace_swap</a></li><li><a href="library-features/repeat-generic-slice.html"><strong aria-hidden="true">3.104.</strong> repeat_generic_slice</a></li><li><a href="library-features/reverse-bits.html"><strong aria-hidden="true">3.105.</strong> reverse_bits</a></li><li><a href="library-features/rt.html"><strong aria-hidden="true">3.106.</strong> rt</a></li><li><a href="library-features/rustc-private.html"><strong aria-hidden="true">3.107.</strong> rustc_private</a></li><li><a href="library-features/rustc-stack-internals.html"><strong aria-hidden="true">3.108.</strong> rustc_stack_internals</a></li><li><a href="library-features/sanitizer-runtime-lib.html"><strong aria-hidden="true">3.109.</strong> sanitizer_runtime_lib</a></li><li><a href="library-features/set-stdio.html"><strong aria-hidden="true">3.110.</strong> set_stdio</a></li><li><a href="library-features/shrink-to.html"><strong aria-hidden="true">3.111.</strong> shrink_to</a></li><li><a href="library-features/slice-align-to.html"><strong aria-hidden="true">3.112.</strong> slice_align_to</a></li><li><a href="library-features/slice-concat-ext.html"><strong aria-hidden="true">3.113.</strong> slice_concat_ext</a></li><li><a href="library-features/slice-index-methods.html"><strong aria-hidden="true">3.114.</strong> slice_index_methods</a></li><li><a href="library-features/slice-internals.html"><strong aria-hidden="true">3.115.</strong> slice_internals</a></li><li><a href="library-features/slice-sort-by-cached-key.html"><strong aria-hidden="true">3.116.</strong> slice_sort_by_cached_key</a></li><li><a href="library-features/sort-internals.html"><strong aria-hidden="true">3.117.</strong> sort_internals</a></li><li><a href="library-features/std-internals.html"><strong aria-hidden="true">3.118.</strong> std_internals</a></li><li><a href="library-features/stdsimd.html"><strong aria-hidden="true">3.119.</strong> stdsimd</a></li><li><a href="library-features/step-trait.html"><strong aria-hidden="true">3.120.</strong> step_trait</a></li><li><a href="library-features/str-escape.html"><strong aria-hidden="true">3.121.</strong> str_escape</a></li><li><a href="library-features/str-internals.html"><strong aria-hidden="true">3.122.</strong> str_internals</a></li><li><a href="library-features/termination-trait-lib.html"><strong aria-hidden="true">3.123.</strong> termination_trait_lib</a></li><li><a href="library-features/test.html" class="active"><strong aria-hidden="true">3.124.</strong> test</a></li><li><a href="library-features/thread-local-internals.html"><strong aria-hidden="true">3.125.</strong> thread_local_internals</a></li><li><a href="library-features/toowned-clone-into.html"><strong aria-hidden="true">3.126.</strong> toowned_clone_into</a></li><li><a href="library-features/transpose-result.html"><strong aria-hidden="true">3.127.</strong> transpose_result</a></li><li><a href="library-features/trusted-len.html"><strong aria-hidden="true">3.128.</strong> trusted_len</a></li><li><a href="library-features/try-from.html"><strong aria-hidden="true">3.129.</strong> try_from</a></li><li><a href="library-features/try-reserve.html"><strong aria-hidden="true">3.130.</strong> try_reserve</a></li><li><a href="library-features/try-trait.html"><strong aria-hidden="true">3.131.</strong> try_trait</a></li><li><a href="library-features/unicode.html"><strong aria-hidden="true">3.132.</strong> unicode</a></li><li><a href="library-features/unicode-internals.html"><strong aria-hidden="true">3.133.</strong> unicode_internals</a></li><li><a href="library-features/unicode-version.html"><strong aria-hidden="true">3.134.</strong> unicode_version</a></li><li><a href="library-features/unsize.html"><strong aria-hidden="true">3.135.</strong> unsize</a></li><li><a href="library-features/update-panic-count.html"><strong aria-hidden="true">3.136.</strong> update_panic_count</a></li><li><a href="library-features/vec-remove-item.html"><strong aria-hidden="true">3.137.</strong> vec_remove_item</a></li><li><a href="library-features/vec-resize-default.html"><strong aria-hidden="true">3.138.</strong> vec_resize_default</a></li><li><a href="library-features/vec-resize-with.html"><strong aria-hidden="true">3.139.</strong> vec_resize_with</a></li><li><a href="library-features/wait-timeout-until.html"><strong aria-hidden="true">3.140.</strong> wait_timeout_until</a></li><li><a href="library-features/wait-until.html"><strong aria-hidden="true">3.141.</strong> wait_until</a></li><li><a href="library-features/windows-c.html"><strong aria-hidden="true">3.142.</strong> windows_c</a></li><li><a href="library-features/windows-file-type-ext.html"><strong aria-hidden="true">3.143.</strong> windows_file_type_ext</a></li><li><a href="library-features/windows-handle.html"><strong aria-hidden="true">3.144.</strong> windows_handle</a></li><li><a href="library-features/windows-net.html"><strong aria-hidden="true">3.145.</strong> windows_net</a></li><li><a href="library-features/windows-stdio.html"><strong aria-hidden="true">3.146.</strong> windows_stdio</a></li><li><a href="library-features/wrapping-int-impl.html"><strong aria-hidden="true">3.147.</strong> wrapping_int_impl</a></li><li><a href="library-features/wrapping-next-power-of-two.html"><strong aria-hidden="true">3.148.</strong> wrapping_next_power_of_two</a></li></ol></li></ol>
        </nav>

        <div id="page-wrapper" class="page-wrapper">

            <div class="page">
                
                <div id="menu-bar" class="menu-bar">
                    <div id="menu-bar-sticky-container">
                        <div class="left-buttons">
                            <button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
                                <i class="fa fa-bars"></i>
                            </button>
                            <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
                                <i class="fa fa-paint-brush"></i>
                            </button>
                            <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
                                <li role="none"><button role="menuitem" class="theme" id="light">Light <span class="default">(default)</span></button></li>
                                <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
                                <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
                                <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
                                <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
                            </ul>
                            
                            <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
                                <i class="fa fa-search"></i>
                            </button>
                            
                        </div>

                        <h1 class="menu-title"></h1> 

                        <div class="right-buttons">
                            <a href="print.html" title="Print this book" aria-label="Print this book">
                                <i id="print-button" class="fa fa-print"></i>
                            </a>
                        </div>
                    </div>
                </div>

                
                <div id="search-wrapper" class="hidden">
                    <form id="searchbar-outer" class="searchbar-outer">
                        <input type="search" name="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
                    </form>
                    <div id="searchresults-outer" class="searchresults-outer hidden">
                        <div id="searchresults-header" class="searchresults-header"></div>
                        <ul id="searchresults">
                        </ul>
                    </div>
                </div>
                

                <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
                <script type="text/javascript">
                    document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
                    document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
                    Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
                        link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
                    });
                </script>

                <div id="content" class="content">
                    <main>
                        <a class="header" href="library-features/test.html#test" id="test"><h1><code>test</code></h1></a>
<p>The tracking issue for this feature is: None.</p>
<hr />
<p>The internals of the <code>test</code> crate are unstable, behind the <code>test</code> flag.  The
most widely used part of the <code>test</code> crate are benchmark tests, which can test
the performance of your code.  Let's make our <code>src/lib.rs</code> look like this
(comments elided):</p>
<pre><code class="language-rust ignore">#![feature(test)]

extern crate test;

pub fn add_two(a: i32) -&gt; i32 {
    a + 2
}

#[cfg(test)]
mod tests {
    use super::*;
    use test::Bencher;

    #[test]
    fn it_works() {
        assert_eq!(4, add_two(2));
    }

    #[bench]
    fn bench_add_two(b: &amp;mut Bencher) {
        b.iter(|| add_two(2));
    }
}
</code></pre>
<p>Note the <code>test</code> feature gate, which enables this unstable feature.</p>
<p>We've imported the <code>test</code> crate, which contains our benchmarking support.
We have a new function as well, with the <code>bench</code> attribute. Unlike regular
tests, which take no arguments, benchmark tests take a <code>&amp;mut Bencher</code>. This
<code>Bencher</code> provides an <code>iter</code> method, which takes a closure. This closure
contains the code we'd like to benchmark.</p>
<p>We can run benchmark tests with <code>cargo bench</code>:</p>
<pre><code class="language-bash">$ cargo bench
   Compiling adder v0.0.1 (file:///home/steve/tmp/adder)
     Running target/release/adder-91b3e234d4ed382a

running 2 tests
test tests::it_works ... ignored
test tests::bench_add_two ... bench:         1 ns/iter (+/- 0)

test result: ok. 0 passed; 0 failed; 1 ignored; 1 measured
</code></pre>
<p>Our non-benchmark test was ignored. You may have noticed that <code>cargo bench</code>
takes a bit longer than <code>cargo test</code>. This is because Rust runs our benchmark
a number of times, and then takes the average. Because we're doing so little
work in this example, we have a <code>1 ns/iter (+/- 0)</code>, but this would show
the variance if there was one.</p>
<p>Advice on writing benchmarks:</p>
<ul>
<li>Move setup code outside the <code>iter</code> loop; only put the part you want to measure inside</li>
<li>Make the code do &quot;the same thing&quot; on each iteration; do not accumulate or change state</li>
<li>Make the outer function idempotent too; the benchmark runner is likely to run
it many times</li>
<li>Make the inner <code>iter</code> loop short and fast so benchmark runs are fast and the
calibrator can adjust the run-length at fine resolution</li>
<li>Make the code in the <code>iter</code> loop do something simple, to assist in pinpointing
performance improvements (or regressions)</li>
</ul>
<a class="header" href="library-features/test.html#gotcha-optimizations" id="gotcha-optimizations"><h2>Gotcha: optimizations</h2></a>
<p>There's another tricky part to writing benchmarks: benchmarks compiled with
optimizations activated can be dramatically changed by the optimizer so that
the benchmark is no longer benchmarking what one expects. For example, the
compiler might recognize that some calculation has no external effects and
remove it entirely.</p>
<pre><code class="language-rust ignore">#![feature(test)]

extern crate test;
use test::Bencher;

#[bench]
fn bench_xor_1000_ints(b: &amp;mut Bencher) {
    b.iter(|| {
        (0..1000).fold(0, |old, new| old ^ new);
    });
}
</code></pre>
<p>gives the following results</p>
<pre><code class="language-text">running 1 test
test bench_xor_1000_ints ... bench:         0 ns/iter (+/- 0)

test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
</code></pre>
<p>The benchmarking runner offers two ways to avoid this. Either, the closure that
the <code>iter</code> method receives can return an arbitrary value which forces the
optimizer to consider the result used and ensures it cannot remove the
computation entirely. This could be done for the example above by adjusting the
<code>b.iter</code> call to</p>
<pre><pre class="playpen"><code class="language-rust">
# #![allow(unused_variables)]
#fn main() {
# struct X;
# impl X { fn iter&lt;T, F&gt;(&amp;self, _: F) where F: FnMut() -&gt; T {} } let b = X;
b.iter(|| {
    // Note lack of `;` (could also use an explicit `return`).
    (0..1000).fold(0, |old, new| old ^ new)
});
#}</code></pre></pre>
<p>Or, the other option is to call the generic <code>test::black_box</code> function, which
is an opaque &quot;black box&quot; to the optimizer and so forces it to consider any
argument as used.</p>
<pre><pre class="playpen"><code class="language-rust">#![feature(test)]

extern crate test;

# fn main() {
# struct X;
# impl X { fn iter&lt;T, F&gt;(&amp;self, _: F) where F: FnMut() -&gt; T {} } let b = X;
b.iter(|| {
    let n = test::black_box(1000);

    (0..n).fold(0, |a, b| a ^ b)
})
# }
</code></pre></pre>
<p>Neither of these read or modify the value, and are very cheap for small values.
Larger values can be passed indirectly to reduce overhead (e.g.
<code>black_box(&amp;huge_struct)</code>).</p>
<p>Performing either of the above changes gives the following benchmarking results</p>
<pre><code class="language-text">running 1 test
test bench_xor_1000_ints ... bench:       131 ns/iter (+/- 3)

test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
</code></pre>
<p>However, the optimizer can still modify a testcase in an undesirable manner
even when using either of the above.</p>

                    </main>

                    <nav class="nav-wrapper" aria-label="Page navigation">
                        <!-- Mobile navigation buttons -->
                        
                            <a rel="prev" href="library-features/termination-trait-lib.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                                <i class="fa fa-angle-left"></i>
                            </a>
                        

                        
                            <a rel="next" href="library-features/thread-local-internals.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                                <i class="fa fa-angle-right"></i>
                            </a>
                        

                        <div style="clear: both"></div>
                    </nav>
                </div>
            </div>

            <nav class="nav-wide-wrapper" aria-label="Page navigation">
                
                    <a href="library-features/termination-trait-lib.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                        <i class="fa fa-angle-left"></i>
                    </a>
                

                
                    <a href="library-features/thread-local-internals.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                        <i class="fa fa-angle-right"></i>
                    </a>
                
            </nav>

        </div>

        

        

        

        

        
        <script src="searchindex.js" type="text/javascript" charset="utf-8"></script>
        
        
        <script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="mark.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="searcher.js" type="text/javascript" charset="utf-8"></script>
        

        <script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="highlight.js" type="text/javascript" charset="utf-8"></script>
        <script src="book.js" type="text/javascript" charset="utf-8"></script>

        <!-- Custom JS scripts -->
        

    </body>
</html>