File indexing completed on 2025-02-02 03:54:48
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 <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">&</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>