File indexing completed on 2024-05-12 04:02:10

0001 <!DOCTYPE html>
0002 <html><head>
0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
0004 <title>test.zig</title>
0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (Zig) - Theme (Breeze Dark)"/>
0006 </head><body style="background-color:#232629;color:#cfcfc2"><pre>
0007 <span style="color:#2980b9">const</span> std <span style="color:#3f8058">=</span> <span style="color:#7f8c8d">@import</span>(<span style="color:#f44f4f">"std"</span>);
0008 
0009 <span style="color:#7a7c7d">/// This is a doc comment</span>
0010 <span style="color:#7a7c7d">// This is a comment</span>
0011 <span style="font-weight:bold">fn</span> getData() <span style="color:#3f8058">!</span><span style="color:#2980b9">u32</span> {
0012     <span style="color:#fdbc4b;font-weight:bold">return</span> <span style="color:#f67400">666</span>;
0013 }
0014 
0015 <span style="color:#7a7c7d">// multiline string</span>
0016 <span style="color:#2980b9">const</span> hello_world_in_c <span style="color:#3f8058">=</span>
0017     <span style="color:#f44f4f">\\#include &lt;stdio.h></span>
0018     <span style="color:#f44f4f">\\</span>
0019     <span style="color:#f44f4f">\\int main(int argc, char **argv) {</span>
0020     <span style="color:#f44f4f">\\    printf("hello world\n");</span>
0021     <span style="color:#f44f4f">\\    return 0;</span>
0022     <span style="color:#f44f4f">\\}</span>
0023 ;
0024 
0025 <span style="color:#7a7c7d">// Top-level declarations are order-independent:</span>
0026 <span style="color:#2980b9">const</span> print <span style="color:#3f8058">=</span> <span style="color:#7f8c8d">@import</span>(<span style="color:#f44f4f">"std"</span>)<span style="color:#3f8058">.</span>debug<span style="color:#3f8058">.</span>print;
0027 
0028 <span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> main() <span style="color:#3f8058">!</span><span style="color:#2980b9">void</span> {
0029     <span style="font-weight:bold">inline</span> <span style="color:#fdbc4b;font-weight:bold">for</span> (values) <span style="color:#3f8058">|</span>v<span style="color:#3f8058">,</span> i<span style="color:#3f8058">|</span> {
0030         <span style="color:#fdbc4b;font-weight:bold">if</span> (i <span style="color:#3f8058">!=</span> <span style="color:#f67400">2</span>) <span style="color:#fdbc4b;font-weight:bold">continue</span>;
0031         <span style="color:#fdbc4b;font-weight:bold">try</span> expect(v);
0032     }
0033 
0034     <span style="color:#7a7c7d">// error union</span>
0035     <span style="color:#2980b9">var</span> number_or_error<span style="color:#3f8058">:</span> <span style="color:#2980b9">anyerror</span><span style="color:#3f8058">!</span><span style="color:#2980b9">i32</span> <span style="color:#3f8058">=</span> <span style="font-weight:bold">error</span><span style="color:#3f8058">.</span>ArgNotFound;
0036 
0037     print(<span style="color:#f44f4f">"</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">error union 2</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">type: {}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">value: {!}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{
0038         <span style="color:#7f8c8d">@TypeOf</span>(number_or_error)<span style="color:#3f8058">,</span> number_or_error<span style="color:#3f8058">,</span>
0039     });
0040 
0041     <span style="color:#2980b9">const</span> stdout <span style="color:#3f8058">=</span> std<span style="color:#3f8058">.</span>io<span style="color:#3f8058">.</span>getStdOut()<span style="color:#3f8058">.</span>writer();
0042     <span style="color:#fdbc4b;font-weight:bold">try</span> stdout<span style="color:#3f8058">.</span>print(<span style="color:#f44f4f">"Hello, {s}!</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{<span style="color:#f44f4f">"world"</span>});
0043     <span style="color:#2980b9">const</span> bytes <span style="color:#3f8058">=</span> <span style="color:#f44f4f">"hello"</span>;
0044     print(<span style="color:#f44f4f">"{}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{<span style="color:#7f8c8d">@TypeOf</span>(bytes)}); <span style="color:#7a7c7d">// *const [5:0]u8</span>
0045     print(<span style="color:#f44f4f">"{d}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{bytes[<span style="color:#f67400">5</span>]}); <span style="color:#7a7c7d">// 0</span>
0046     print(<span style="color:#f44f4f">"{}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{<span style="color:#3daee9">'e'</span> <span style="color:#3f8058">==</span> <span style="color:#3daee9">'</span><span style="color:#3daee9">\x65</span><span style="color:#3daee9">'</span>}); <span style="color:#7a7c7d">// true</span>
0047     print(<span style="color:#f44f4f">"{d}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{<span style="color:#3daee9">'</span><span style="color:#3daee9">\u{1f4a9}</span><span style="color:#3daee9">'</span>});                     <span style="color:#7a7c7d">// 128169</span>
0048     print(<span style="color:#f44f4f">"{d}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{<span style="color:#3daee9">'💯'</span>});                            <span style="color:#7a7c7d">// 128175</span>
0049     print(<span style="color:#f44f4f">"{}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{mem<span style="color:#3f8058">.</span>eql(<span style="color:#2980b9">u8</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"hello"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"h</span><span style="color:#3daee9">\x65</span><span style="color:#f44f4f">llo"</span>)}); <span style="color:#7a7c7d">// true</span>
0050     print(<span style="color:#f44f4f">"0x{x}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{<span style="color:#f44f4f">"</span><span style="color:#3daee9">\xff</span><span style="color:#f44f4f">"</span>[<span style="color:#f67400">0</span>]}); <span style="color:#7a7c7d">// non-UTF-8 strings are possible with \xNN notation.</span>
0051     print(<span style="color:#f44f4f">"{u}</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{<span style="color:#3daee9">'âš¡'</span>});
0052 
0053     _ <span style="color:#3f8058">=</span> <span style="color:#7f8c8d">@import</span>(<span style="color:#f44f4f">"introducing_zig_test.zig"</span>);
0054 }
0055 
0056 <span style="color:#7a7c7d">// Declare an enum.</span>
0057 <span style="color:#2980b9">const</span> Type <span style="color:#3f8058">=</span> <span style="font-weight:bold">enum</span> {
0058     ok<span style="color:#3f8058">,</span>
0059     not_ok<span style="color:#3f8058">,</span>
0060 };
0061 
0062 <span style="font-weight:bold">test</span> <span style="color:#f44f4f">"async skip test"</span> {
0063     <span style="color:#2980b9">var</span> frame <span style="color:#3f8058">=</span> <span style="color:#2980b9">async</span> func();
0064     <span style="color:#2980b9">const</span> result <span style="color:#3f8058">=</span> <span style="color:#2980b9">await</span> frame;
0065     <span style="color:#fdbc4b;font-weight:bold">try</span> std<span style="color:#3f8058">.</span>testing<span style="color:#3f8058">.</span>expect(result <span style="color:#3f8058">==</span> <span style="color:#f67400">1</span>);
0066 }
0067 
0068 <span style="font-weight:bold">fn</span> func() <span style="color:#2980b9">i32</span> {
0069     <span style="font-weight:bold">suspend</span> {
0070         <span style="font-weight:bold">resume</span> @frame();
0071     }
0072     <span style="color:#fdbc4b;font-weight:bold">return</span> <span style="color:#f67400">1</span>;
0073 }
0074 
0075 <span style="font-weight:bold">pub</span> <span style="color:#2980b9">extern</span> <span style="color:#f44f4f">"c"</span> <span style="font-weight:bold">fn</span> @<span style="color:#f44f4f">"error"</span>() <span style="color:#2980b9">void</span>;
0076 <span style="font-weight:bold">pub</span> <span style="color:#2980b9">extern</span> <span style="color:#f44f4f">"c"</span> <span style="font-weight:bold">fn</span> @<span style="color:#f44f4f">"fstat$INODE64"</span>(fd<span style="color:#3f8058">:</span> c<span style="color:#3f8058">.</span>fd_t<span style="color:#3f8058">,</span> buf<span style="color:#3f8058">:</span> <span style="color:#3f8058">*</span>c<span style="color:#3f8058">.</span>Stat) <span style="color:#2980b9">c_int</span>;
0077 
0078 <span style="color:#2980b9">const</span> Color <span style="color:#3f8058">=</span> <span style="font-weight:bold">enum</span> {
0079   red<span style="color:#3f8058">,</span>
0080   @<span style="color:#f44f4f">"really red"</span><span style="color:#3f8058">,</span>
0081 };
0082 <span style="color:#2980b9">const</span> color<span style="color:#3f8058">:</span> Color <span style="color:#3f8058">=</span> <span style="color:#3f8058">.</span>@<span style="color:#f44f4f">"really red"</span>;
0083 
0084 <span style="color:#2980b9">var</span> y<span style="color:#3f8058">:</span> <span style="color:#2980b9">i32</span> <span style="color:#3f8058">=</span> add(<span style="color:#f67400">10</span><span style="color:#3f8058">,</span> x);
0085 <span style="color:#2980b9">const</span> x<span style="color:#3f8058">:</span> <span style="color:#2980b9">i32</span> <span style="color:#3f8058">=</span> add(<span style="color:#f67400">12</span><span style="color:#3f8058">,</span> <span style="color:#f67400">34</span>);
0086 
0087 <span style="font-weight:bold">test</span> <span style="color:#f44f4f">"comptime vars"</span> {
0088     <span style="color:#2980b9">var</span> x<span style="color:#3f8058">:</span> <span style="color:#2980b9">i32</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>;
0089     <span style="color:#2980b9">comptime</span> <span style="color:#2980b9">var</span> y<span style="color:#3f8058">:</span> <span style="color:#2980b9">i32</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>;
0090 
0091     x <span style="color:#3f8058">+=</span> <span style="color:#f67400">1</span>;
0092     y <span style="color:#3f8058">+=</span> <span style="color:#f67400">1</span>;
0093 
0094     <span style="color:#fdbc4b;font-weight:bold">try</span> expect(x <span style="color:#3f8058">==</span> <span style="color:#f67400">2</span>);
0095     <span style="color:#fdbc4b;font-weight:bold">try</span> expect(y <span style="color:#3f8058">==</span> <span style="color:#f67400">2</span>);
0096 
0097     <span style="color:#fdbc4b;font-weight:bold">if</span> (y <span style="color:#3f8058">!=</span> <span style="color:#f67400">2</span>) {
0098         <span style="color:#7a7c7d">// This compile error never triggers because y is a comptime variable,</span>
0099         <span style="color:#7a7c7d">// and so `y != 2` is a comptime value, and this if is statically evaluated.</span>
0100         <span style="color:#7f8c8d">@compileError</span>(<span style="color:#f44f4f">"wrong y value"</span>);
0101     }
0102 }
0103 
0104 <span style="color:#2980b9">const</span> decimal_int <span style="color:#3f8058">=</span> <span style="color:#f67400">98222</span>;
0105 <span style="color:#2980b9">const</span> hex_int <span style="color:#3f8058">=</span> <span style="color:#f67400">0xff</span>;
0106 <span style="color:#2980b9">const</span> another_hex_int <span style="color:#3f8058">=</span> <span style="color:#f67400">0xFF</span>;
0107 <span style="color:#2980b9">const</span> octal_int <span style="color:#3f8058">=</span> <span style="color:#f67400">0o755</span>;
0108 <span style="color:#2980b9">const</span> binary_int <span style="color:#3f8058">=</span> <span style="color:#f67400">0b11110000</span>;
0109 
0110 <span style="color:#7a7c7d">// underscores may be placed between two digits as a visual separator</span>
0111 <span style="color:#2980b9">const</span> one_billion <span style="color:#3f8058">=</span> <span style="color:#f67400">1_000_000_000</span>;
0112 <span style="color:#2980b9">const</span> binary_mask <span style="color:#3f8058">=</span> <span style="color:#f67400">0b1_1111_1111</span>;
0113 <span style="color:#2980b9">const</span> permissions <span style="color:#3f8058">=</span> <span style="color:#f67400">0o7_5_5</span>;
0114 <span style="color:#2980b9">const</span> big_address <span style="color:#3f8058">=</span> <span style="color:#f67400">0xFF80_0000_0000_0000</span>;
0115 
0116 <span style="color:#2980b9">const</span> floating_point <span style="color:#3f8058">=</span> <span style="color:#f67400">123.0E+77</span>;
0117 <span style="color:#2980b9">const</span> another_float <span style="color:#3f8058">=</span> <span style="color:#f67400">123.0</span>;
0118 <span style="color:#2980b9">const</span> yet_another <span style="color:#3f8058">=</span> <span style="color:#f67400">123.0e+77</span>;
0119 
0120 <span style="color:#2980b9">const</span> hex_floating_point <span style="color:#3f8058">=</span> <span style="color:#f67400">0x103.70p-5</span>;
0121 <span style="color:#2980b9">const</span> another_hex_float <span style="color:#3f8058">=</span> <span style="color:#f67400">0x103.70</span>;
0122 <span style="color:#2980b9">const</span> yet_another_hex_float <span style="color:#3f8058">=</span> <span style="color:#f67400">0x103.70P-5</span>;
0123 
0124 <span style="color:#7a7c7d">// underscores may be placed between two digits as a visual separator</span>
0125 <span style="color:#2980b9">const</span> lightspeed <span style="color:#3f8058">=</span> <span style="color:#f67400">299_792_458.000_000</span>;
0126 <span style="color:#2980b9">const</span> nanosecond <span style="color:#3f8058">=</span> <span style="color:#f67400">0.000_000_001</span>;
0127 <span style="color:#2980b9">const</span> more_hex <span style="color:#3f8058">=</span> <span style="color:#f67400">0x1234_5678.9ABC_CDEFp-10</span>;
0128 
0129 <span style="color:#2980b9">const</span> A <span style="color:#3f8058">=</span> <span style="font-weight:bold">error</span>{One};
0130 <span style="color:#2980b9">const</span> B <span style="color:#3f8058">=</span> <span style="font-weight:bold">error</span>{Two};
0131 (A <span style="color:#3f8058">||</span> B) <span style="color:#3f8058">==</span> <span style="font-weight:bold">error</span>{One<span style="color:#3f8058">,</span> Two}
0132 
0133 <span style="color:#2980b9">const</span> x<span style="color:#3f8058">:</span> <span style="color:#2980b9">u32</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">1234</span>;
0134 <span style="color:#2980b9">const</span> ptr <span style="color:#3f8058">=</span> <span style="color:#3f8058">&amp;</span>x;
0135 ptr<span style="color:#3f8058">.*</span> <span style="color:#3f8058">==</span> <span style="color:#f67400">1234</span>
0136 
0137 <span style="color:#7a7c7d">// get the size of an array</span>
0138 <span style="color:#2980b9">comptime</span> {
0139     assert(message<span style="color:#3f8058">.</span>len <span style="color:#3f8058">==</span> <span style="color:#f67400">5</span>);
0140 }
0141 
0142 <span style="font-weight:bold">test</span> <span style="color:#f44f4f">"iterate over an array"</span> {
0143     <span style="color:#2980b9">var</span> sum<span style="color:#3f8058">:</span> <span style="color:#2980b9">usize</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>;
0144     <span style="color:#fdbc4b;font-weight:bold">for</span> (message) <span style="color:#3f8058">|</span>byte<span style="color:#3f8058">|</span> {
0145         sum <span style="color:#3f8058">+=</span> byte;
0146     }
0147     <span style="color:#fdbc4b;font-weight:bold">try</span> expect(sum <span style="color:#3f8058">==</span> <span style="color:#3daee9">'h'</span> <span style="color:#3f8058">+</span> <span style="color:#3daee9">'e'</span> <span style="color:#3f8058">+</span> <span style="color:#3daee9">'l'</span> <span style="color:#3f8058">*</span> <span style="color:#f67400">2</span> <span style="color:#3f8058">+</span> <span style="color:#3daee9">'o'</span>);
0148 }
0149 
0150 <span style="color:#7a7c7d">// use compile-time code to initialize an array</span>
0151 <span style="color:#2980b9">var</span> fancy_array <span style="color:#3f8058">=</span> init<span style="color:#3f8058">:</span> {
0152     <span style="color:#2980b9">var</span> initial_value<span style="color:#3f8058">:</span> [<span style="color:#f67400">10</span>]Point <span style="color:#3f8058">=</span> <span style="color:#27aeae;font-weight:bold">undefined</span>;
0153     <span style="color:#fdbc4b;font-weight:bold">for</span> (initial_value) <span style="color:#3f8058">|*</span>pt<span style="color:#3f8058">,</span> i<span style="color:#3f8058">|</span> {
0154         pt<span style="color:#3f8058">.*</span> <span style="color:#3f8058">=</span> Point{
0155             <span style="color:#3f8058">.</span>x <span style="color:#3f8058">=</span> <span style="color:#7f8c8d">@intCast</span>(<span style="color:#2980b9">i32</span><span style="color:#3f8058">,</span> i)<span style="color:#3f8058">,</span>
0156             <span style="color:#3f8058">.</span>y <span style="color:#3f8058">=</span> <span style="color:#7f8c8d">@intCast</span>(<span style="color:#2980b9">i32</span><span style="color:#3f8058">,</span> i) <span style="color:#3f8058">*</span> <span style="color:#f67400">2</span><span style="color:#3f8058">,</span>
0157         };
0158     }
0159     <span style="color:#fdbc4b;font-weight:bold">break</span> <span style="color:#3f8058">:</span>init initial_value;
0160 };
0161 
0162 <span style="font-weight:bold">test</span> <span style="color:#f44f4f">"switch on non-exhaustive enum"</span> {
0163     <span style="color:#fdbc4b;font-weight:bold">try</span> expect(result);
0164     <span style="color:#2980b9">const</span> is_one <span style="color:#3f8058">=</span> <span style="color:#fdbc4b;font-weight:bold">switch</span> (number) {
0165         <span style="color:#3f8058">.</span>one <span style="color:#3f8058">=></span> <span style="color:#27aeae;font-weight:bold">true</span><span style="color:#3f8058">,</span>
0166         <span style="color:#fdbc4b;font-weight:bold">else</span> <span style="color:#3f8058">=></span> <span style="color:#27aeae;font-weight:bold">false</span><span style="color:#3f8058">,</span>
0167     };
0168     <span style="color:#fdbc4b;font-weight:bold">try</span> expect(is_one);
0169 
0170     <span style="color:#fdbc4b;font-weight:bold">if</span> (a <span style="color:#3f8058">!=</span> b) {
0171         <span style="color:#fdbc4b;font-weight:bold">try</span> expect(<span style="color:#27aeae;font-weight:bold">true</span>);
0172     } <span style="color:#fdbc4b;font-weight:bold">else</span> <span style="color:#fdbc4b;font-weight:bold">if</span> (a <span style="color:#3f8058">==</span> <span style="color:#f67400">9</span>) {
0173         <span style="font-weight:bold">unreachable</span>;
0174     } <span style="color:#fdbc4b;font-weight:bold">else</span> {
0175         <span style="font-weight:bold">unreachable</span>;
0176     }
0177 }
0178 
0179 <span style="font-weight:bold">fn</span> deferErrorExample(is_error<span style="color:#3f8058">:</span> <span style="color:#2980b9">bool</span>) <span style="color:#3f8058">!</span><span style="color:#2980b9">void</span> {
0180     print(<span style="color:#f44f4f">"</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">start of function</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{});
0181 
0182     <span style="color:#7a7c7d">// This will always be executed on exit</span>
0183     <span style="color:#fdbc4b;font-weight:bold">defer</span> {
0184         print(<span style="color:#f44f4f">"end of function</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{});
0185     }
0186 
0187     <span style="color:#fdbc4b;font-weight:bold">errdefer</span> {
0188         print(<span style="color:#f44f4f">"encountered an error!</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">.</span>{});
0189     }
0190 }
0191 
0192 <span style="font-weight:bold">pub</span> <span style="font-weight:bold">fn</span> syscall3(number<span style="color:#3f8058">:</span> <span style="color:#2980b9">usize</span><span style="color:#3f8058">,</span> arg1<span style="color:#3f8058">:</span> <span style="color:#2980b9">usize</span><span style="color:#3f8058">,</span> arg2<span style="color:#3f8058">:</span> <span style="color:#2980b9">usize</span><span style="color:#3f8058">,</span> arg3<span style="color:#3f8058">:</span> <span style="color:#2980b9">usize</span>) <span style="color:#2980b9">usize</span> {
0193     <span style="color:#fdbc4b;font-weight:bold">return</span> <span style="font-weight:bold">asm</span> <span style="color:#2980b9">volatile</span> (<span style="color:#f44f4f">"syscall"</span>
0194         <span style="color:#3f8058">:</span> [ret] <span style="color:#f44f4f">"={rax}"</span> (<span style="color:#3f8058">-></span> <span style="color:#2980b9">usize</span>)
0195         <span style="color:#3f8058">:</span> [number] <span style="color:#f44f4f">"{rax}"</span> (number)<span style="color:#3f8058">,</span>
0196           [arg1] <span style="color:#f44f4f">"{rdi}"</span> (arg1)<span style="color:#3f8058">,</span>
0197           [arg2] <span style="color:#f44f4f">"{rsi}"</span> (arg2)<span style="color:#3f8058">,</span>
0198           [arg3] <span style="color:#f44f4f">"{rdx}"</span> (arg3)
0199         <span style="color:#3f8058">:</span> <span style="color:#f44f4f">"rcx"</span><span style="color:#3f8058">,</span> <span style="color:#f44f4f">"r11"</span>
0200     );
0201 }
0202 </pre></body></html>