tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

scoping.test (12172B)


      1 group valid "Valid scoping and name redeclaration cases"
      2 
      3 	case local_variable_hides_global_variable
      4 		version 100 es
      5 		values
      6 		{
      7 			input int in0 = [ 1 | 2 | 3 ];
      8 			output int out0 = [ 1 | 2 | 3 ];
      9 		}
     10 
     11 		both ""
     12 			#version 100
     13 			precision mediump float;
     14 			${DECLARATIONS}
     15 
     16 			int a = -1;
     17 
     18 			void main()
     19 			{
     20 				${SETUP}
     21 				int a = in0;
     22 
     23 				out0 = a;
     24 				${OUTPUT}
     25 			}
     26 		""
     27 	end
     28 
     29 	case block_variable_hides_local_variable
     30 		version 100 es
     31 		values
     32 		{
     33 			input int in0 = [ 1 | 2 | 3 ];
     34 			output int out0 = [ 1 | 2 | 3 ];
     35 		}
     36 
     37 		both ""
     38 			#version 100
     39 			precision mediump float;
     40 			${DECLARATIONS}
     41 			void main()
     42 			{
     43 				${SETUP}
     44 				int a = in0;
     45 				{
     46 					int a = -1;
     47 				}
     48 				out0 = a;
     49 				${OUTPUT}
     50 			}
     51 		""
     52 	end
     53 
     54 	case block_variable_hides_global_variable
     55 		version 100 es
     56 		values
     57 		{
     58 			input int in0 = [ 1 | 2 | 3 ];
     59 			output int out0 = [ 1 | 2 | 3 ];
     60 		}
     61 
     62 		both ""
     63 			#version 100
     64 			precision mediump float;
     65 			${DECLARATIONS}
     66 
     67 			int a = -1;
     68 
     69 			void main()
     70 			{
     71 				${SETUP}
     72 				{
     73 					int a = in0;
     74 
     75 					out0 = a;
     76 				}
     77 				${OUTPUT}
     78 			}
     79 		""
     80 	end
     81 
     82 	case for_init_statement_variable_hides_local_variable
     83 		version 100 es
     84 		values
     85 		{
     86 			input int in0 = [ 1 | 2 | 3 ];
     87 			output int out0 = [ 1 | 2 | 3 ];
     88 		}
     89 
     90 		both ""
     91 			#version 100
     92 			precision mediump float;
     93 			${DECLARATIONS}
     94 			void main()
     95 			{
     96 				${SETUP}
     97 				int a = in0;
     98 				for (int a = 0; a < 10; a++)
     99 				{
    100 				}
    101 				out0 = a;
    102 				${OUTPUT}
    103 			}
    104 		""
    105 	end
    106 
    107 	case for_init_statement_variable_hides_global_variable
    108 		version 100 es
    109 		values
    110 		{
    111 			input int in0 = [ 1 | 2 | 3 ];
    112 			output int out0 = [ 1 | 2 | 3 ];
    113 		}
    114 
    115 		both ""
    116 			#version 100
    117 			precision mediump float;
    118 			${DECLARATIONS}
    119 
    120 			int a = 5;
    121 
    122 			void main()
    123 			{
    124 				${SETUP}
    125 				for (int a = 0; a < 10; a++)
    126 				{
    127 				}
    128 				out0 = in0 + a - 5;
    129 				${OUTPUT}
    130 			}
    131 		""
    132 	end
    133 
    134 	case variable_in_if_hides_global_variable
    135 		version 100 es
    136 		values
    137 		{
    138 			input int in0 = [ 1 | 2 | 3 ];
    139 			output int out0 = [ 1 | 2 | 3 ];
    140 		}
    141 
    142 		both ""
    143 			#version 100
    144 			precision mediump float;
    145 			${DECLARATIONS}
    146 
    147 			int a = 1;
    148 
    149 			void main()
    150 			{
    151 				${SETUP}
    152 				if (true)
    153 					int a = 42;
    154 				out0 = a*in0;
    155 				${OUTPUT}
    156 			}
    157 		""
    158 	end
    159 
    160 	case variable_from_outer_scope_visible_in_initializer
    161 		version 100 es
    162 		values
    163 		{
    164 			input int in0 = [ 1 | 2 | 3 ];
    165 			output int out0 = [ 1 | 2 | 3 ];
    166 		}
    167 
    168 		both ""
    169 			#version 100
    170 			precision mediump float;
    171 			${DECLARATIONS}
    172 			void main()
    173 			{
    174 				${SETUP}
    175 				int a = in0;
    176 				{
    177 					int a = a+5, b = a-5;
    178 					out0 = b;
    179 					a = 42;
    180 				}
    181 				out0 = out0 + a - in0;
    182 				${OUTPUT}
    183 			}
    184 		""
    185 	end
    186 
    187 	case local_int_variable_hides_struct_type
    188 		version 100 es
    189 		values
    190 		{
    191 			input int in0 = [ 1 | 2 | 3 ];
    192 			output int out0 = [ 1 | 2 | 3 ];
    193 		}
    194 
    195 		both ""
    196 			#version 100
    197 			precision mediump float;
    198 			${DECLARATIONS}
    199 
    200 			struct S { int val; };
    201 
    202 			void main()
    203 			{
    204 				${SETUP}
    205 				int S = S(in0).val;
    206 				out0 = S;
    207 				${OUTPUT}
    208 			}
    209 		""
    210 	end
    211 
    212 	case local_struct_variable_hides_struct_type
    213 		version 100 es
    214 		values
    215 		{
    216 			input int in0 = [ 1 | 2 | 3 ];
    217 			output int out0 = [ 1 | 2 | 3 ];
    218 		}
    219 
    220 		both ""
    221 			#version 100
    222 			precision mediump float;
    223 			${DECLARATIONS}
    224 
    225 			struct S { int val; };
    226 
    227 			void main()
    228 			{
    229 				${SETUP}
    230 				S S = S(in0);
    231 				out0 = S.val;
    232 				${OUTPUT}
    233 			}
    234 		""
    235 	end
    236 
    237 	case local_variable_hides_function
    238 		version 100 es
    239 		values
    240 		{
    241 			input int in0 = [ 1 | 2 | 3 ];
    242 			output int out0 = [ 1 | 2 | 3 ];
    243 		}
    244 
    245 		both ""
    246 			#version 100
    247 			precision mediump float;
    248 			${DECLARATIONS}
    249 
    250 			int foo (int x) { return x; }
    251 
    252 			void main()
    253 			{
    254 				${SETUP}
    255 				int foo = in0;
    256 				out0 = foo;
    257 				${OUTPUT}
    258 			}
    259 		""
    260 	end
    261 
    262 	case function_parameter_hides_global_variable
    263 		version 100 es
    264 		values
    265 		{
    266 			input int in0 = [ 1 | 2 | 3 ];
    267 			output int out0 = [ 1 | 2 | 3 ];
    268 		}
    269 
    270 		both ""
    271 			#version 100
    272 			precision mediump float;
    273 			${DECLARATIONS}
    274 
    275 			int a = -1;
    276 
    277 			int func (int a) { return a; }
    278 
    279 			void main()
    280 			{
    281 				${SETUP}
    282 				out0 = func(in0);
    283 				${OUTPUT}
    284 			}
    285 		""
    286 	end
    287 
    288 	case function_parameter_hides_struct_type
    289 		version 100 es
    290 		values
    291 		{
    292 			input int in0 = [ 1 | 2 | 3 ];
    293 			output int out0 = [ 1 | 2 | 3 ];
    294 		}
    295 
    296 		both ""
    297 			#version 100
    298 			precision mediump float;
    299 			${DECLARATIONS}
    300 
    301 			struct S { int x; };
    302 
    303 			int func (int S) { return S; }
    304 
    305 			void main()
    306 			{
    307 				${SETUP}
    308 				out0 = func(in0);
    309 				${OUTPUT}
    310 			}
    311 		""
    312 	end
    313 
    314 	case function_parameter_hides_function
    315 		version 100 es
    316 		values
    317 		{
    318 			input int in0 = [ 1 | 2 | 3 ];
    319 			output int out0 = [ 1 | 2 | 3 ];
    320 		}
    321 
    322 		both ""
    323 			#version 100
    324 			precision mediump float;
    325 			${DECLARATIONS}
    326 
    327 			int func (int func) { return func; }
    328 
    329 			void main()
    330 			{
    331 				${SETUP}
    332 				out0 = func(in0);
    333 				${OUTPUT}
    334 			}
    335 		""
    336 	end
    337 
    338 	case local_variable_in_inner_scope_hides_function_parameter
    339 		version 100 es
    340 		values
    341 		{
    342 			input int in0 = [ 1 | 2 | 3 ];
    343 			output int out0 = [ 1 | 2 | 3 ];
    344 		}
    345 
    346 		both ""
    347 			#version 100
    348 			precision mediump float;
    349 			${DECLARATIONS}
    350 			int func (int inp, int x) { { int x = 5; return inp + x - 5; } }
    351 
    352 			void main()
    353 			{
    354 				${SETUP}
    355 				out0 = func(in0, 42);
    356 				${OUTPUT}
    357 			}
    358 		""
    359 	end
    360 
    361 end
    362 
    363 group invalid "Invalid scoping behavior"
    364 
    365 	case redeclare_global_variable
    366 		version 100 es
    367 		expect compile_fail
    368 		both ""
    369 			#version 100
    370 			precision mediump float;
    371 			${DECLARATIONS}
    372 
    373 			int a;
    374 			float a;
    375 
    376 			void main()
    377 			{
    378 				a = 1.0;
    379 				${POSITION_FRAG_COLOR} = vec4(a);
    380 			}
    381 		""
    382 	end
    383 
    384 	case redeclare_local_variable
    385 		version 100 es
    386 		expect compile_fail
    387 		both ""
    388 			#version 100
    389 			precision mediump float;
    390 			${DECLARATIONS}
    391 
    392 			void main()
    393 			{
    394 				int a;
    395 				float a;
    396 				a = 1.0;
    397 				${POSITION_FRAG_COLOR} = vec4(a);
    398 			}
    399 		""
    400 	end
    401 
    402 	case redeclare_for_init_statement_variable
    403 		version 100 es
    404 		expect compile_fail
    405 		both ""
    406 			#version 100
    407 			precision mediump float;
    408 			${DECLARATIONS}
    409 
    410 			void main()
    411 			{
    412 				for (int i = 0; i < 10; i++)
    413 				{
    414 					int i = 11;
    415 				}
    416 				${POSITION_FRAG_COLOR} = vec4(0.0);
    417 			}
    418 		""
    419 	end
    420 
    421 	case redeclare_for_condition_variable
    422 		version 100 es
    423 		expect compile_fail
    424 		both ""
    425 			#version 100
    426 			precision mediump float;
    427 			${DECLARATIONS}
    428 
    429 			void main()
    430 			{
    431 				for (int i = 0; int a = (i < 10); i++)
    432 				{
    433 					int a = 0;
    434 				}
    435 				${POSITION_FRAG_COLOR} = vec4(0.0);
    436 			}
    437 		""
    438 	end
    439 
    440 	case redeclare_for_init_statement_variable_in_for_condition
    441 		version 100 es
    442 		expect compile_fail
    443 		both ""
    444 			#version 100
    445 			precision mediump float;
    446 			${DECLARATIONS}
    447 
    448 			void main()
    449 			{
    450 				float a;
    451 				for (int i = 0; int i = (i < 10); i++)
    452 				{
    453 					a = sin(i);
    454 				}
    455 				${POSITION_FRAG_COLOR} = vec4(a);
    456 			}
    457 		""
    458 	end
    459 
    460 	case redeclare_while_condition_variable
    461 		version 100 es
    462 		expect compile_fail
    463 		both ""
    464 			#version 100
    465 			precision mediump float;
    466 			${DECLARATIONS}
    467 
    468 			void main()
    469 			{
    470 				int a = 0;
    471 				while (int i = (a < 5))
    472 				{
    473 					int i = 11;
    474 					a += i;
    475 				}
    476 				${POSITION_FRAG_COLOR} = vec4(0.0);
    477 			}
    478 		""
    479 	end
    480 
    481 	case redeclare_function
    482 		version 100 es
    483 		expect compile_fail
    484 		both ""
    485 			#version 100
    486 			precision mediump float;
    487 			${DECLARATIONS}
    488 
    489 			float func(float x);
    490 			float func(float x);
    491 
    492 			float func(float x) { return x + 1.0; }
    493 
    494 			void main()
    495 			{
    496 				${POSITION_FRAG_COLOR} = vec4(func(1.0));
    497 			}
    498 		""
    499 	end
    500 
    501 	case redefine_function
    502 		version 100 es
    503 		expect compile_fail
    504 		both ""
    505 			#version 100
    506 			precision mediump float;
    507 			${DECLARATIONS}
    508 
    509 			float func(float x);
    510 
    511 			float func(float x) { return x + 1.0; }
    512 			float func(float x) { return x + 2.0; }
    513 
    514 			void main()
    515 			{
    516 				${POSITION_FRAG_COLOR} = vec4(func(1.0));
    517 			}
    518 		""
    519 	end
    520 
    521 	case redeclare_builtin
    522 		version 100 es
    523 		expect compile_fail
    524 		both ""
    525 			#version 100
    526 			precision mediump float;
    527 			${DECLARATIONS}
    528 
    529 			float sin(float x);
    530 
    531 			void main()
    532 			{
    533 				${POSITION_FRAG_COLOR} = vec4(sin(1.0));
    534 			}
    535 		""
    536 	end
    537 
    538 	case redefine_builtin
    539 		version 100 es
    540 		expect compile_fail
    541 		both ""
    542 			#version 100
    543 			precision mediump float;
    544 			${DECLARATIONS}
    545 
    546 			float sin(float x) { return x + 1.0; }
    547 
    548 			void main()
    549 			{
    550 				${POSITION_FRAG_COLOR} = vec4(sin(1.0));
    551 			}
    552 		""
    553 	end
    554 
    555 	case conflict_function_struct
    556 		version 100 es
    557 		expect compile_fail
    558 		both ""
    559 			#version 100
    560 			precision mediump float;
    561 			${DECLARATIONS}
    562 
    563 			void f(int x);
    564 			struct f { int x; };
    565 
    566 			void main()
    567 			{
    568 				${POSITION_FRAG_COLOR} = vec4(1);
    569 			}
    570 		""
    571 	end
    572 
    573 	case conflict_function_variable
    574 		version 100 es
    575 		expect compile_fail
    576 		both ""
    577 			#version 100
    578 			precision mediump float;
    579 			${DECLARATIONS}
    580 
    581 			void f(int x);
    582 			float f;
    583 
    584 			void main()
    585 			{
    586 				f = 1.0;
    587 				${POSITION_FRAG_COLOR} = vec4(f);
    588 			}
    589 		""
    590 	end
    591 
    592 	case use_global_variable_before_declaration
    593 		version 100 es
    594 		expect compile_fail
    595 		both ""
    596 			#version 100
    597 			precision mediump float;
    598 			${DECLARATIONS}
    599 
    600 			void func()
    601 			{
    602 				a = 2.0;
    603 			}
    604 
    605 			float a;
    606 
    607 			void main()
    608 			{
    609 				func();
    610 				${POSITION_FRAG_COLOR} = vec4(a);
    611 			}
    612 		""
    613 	end
    614 
    615 	case use_local_variable_before_declaration
    616 		version 100 es
    617 		expect compile_fail
    618 		both ""
    619 			#version 100
    620 			precision mediump float;
    621 			${DECLARATIONS}
    622 
    623 			void main()
    624 			{
    625 				float a = 1.0;
    626 				a = b;
    627 				float b = 2.0;
    628 
    629 				${POSITION_FRAG_COLOR} = vec4(a);
    630 			}
    631 		""
    632 	end
    633 
    634 	case use_struct_type_before_declaration
    635 		version 100 es
    636 		expect compile_fail
    637 		both ""
    638 			#version 100
    639 			precision mediump float;
    640 			${DECLARATIONS}
    641 
    642 			float func (float x) { return S(x).val; }
    643 			struct S { float val; };
    644 
    645 			void main()
    646 			{
    647 				${POSITION_FRAG_COLOR} = vec4(func(1.0));
    648 			}
    649 		""
    650 	end
    651 
    652 	case use_function_before_declaration
    653 		version 100 es
    654 		expect compile_fail
    655 		both ""
    656 			#version 100
    657 			precision mediump float;
    658 			${DECLARATIONS}
    659 
    660 			float func (float x) { return bar(x); }
    661 			float bar (float x) { return x; }
    662 
    663 			void main()
    664 			{
    665 				${POSITION_FRAG_COLOR} = vec4(func(1.0));
    666 			}
    667 		""
    668 	end
    669 
    670 	case use_variable_from_block_in_outer_scope
    671 		version 100 es
    672 		expect compile_fail
    673 		both ""
    674 			#version 100
    675 			precision mediump float;
    676 			${DECLARATIONS}
    677 
    678 			void main()
    679 			{
    680 				{
    681 					float a = 1.0;
    682 				}
    683 				${POSITION_FRAG_COLOR} = vec4(a);
    684 			}
    685 		""
    686 	end
    687 
    688 	case use_variable_from_if_in_outer_scope
    689 		version 100 es
    690 		expect compile_fail
    691 		both ""
    692 			#version 100
    693 			precision mediump float;
    694 			${DECLARATIONS}
    695 
    696 			void main()
    697 			{
    698 				if (true)
    699 					float a = 1.0;
    700 				${POSITION_FRAG_COLOR} = vec4(a);
    701 			}
    702 		""
    703 	end
    704 
    705 	case use_variable_from_else_in_outer_scope
    706 		version 100 es
    707 		expect compile_fail
    708 		both ""
    709 			#version 100
    710 			precision mediump float;
    711 			${DECLARATIONS}
    712 
    713 			void main()
    714 			{
    715 				if (false)
    716 					float a = 1.0;
    717 				else
    718 					float b = 2.0;
    719 				${POSITION_FRAG_COLOR} = vec4(b);
    720 			}
    721 		""
    722 	end
    723 
    724 	case use_variable_from_if_in_else
    725 		version 100 es
    726 		expect compile_fail
    727 		both ""
    728 			#version 100
    729 			precision mediump float;
    730 			${DECLARATIONS}
    731 
    732 			void main()
    733 			{
    734 				float a = 1.0;
    735 				if (true)
    736 				{
    737 					float b = 2.0;
    738 				}
    739 				else
    740 				{
    741 					a = b;
    742 				}
    743 				${POSITION_FRAG_COLOR} = vec4(a);
    744 			}
    745 		""
    746 	end
    747 
    748 	case use_variable_from_for_init_statement_in_outer_scope
    749 		version 100 es
    750 		expect compile_fail
    751 		both ""
    752 			#version 100
    753 			precision mediump float;
    754 			${DECLARATIONS}
    755 
    756 			void main()
    757 			{
    758 				float x = 0.0;
    759 				for (int i = 0; i < 10; i++)
    760 				{
    761 					x += sin(i);
    762 				}
    763 				${POSITION_FRAG_COLOR} = vec4(float(i));
    764 			}
    765 		""
    766 	end
    767 
    768 	case use_variable_from_while_condition_in_outer_scope
    769 		version 100 es
    770 		expect compile_fail
    771 		both ""
    772 			#version 100
    773 			precision mediump float;
    774 			${DECLARATIONS}
    775 
    776 			void main()
    777 			{
    778 				int a = 1;
    779 				while (bool b = (a == 1))
    780 				{
    781 					a++;
    782 				}
    783 				${POSITION_FRAG_COLOR} = vec4(float(b));
    784 			}
    785 		""
    786 	end
    787 
    788 	case use_parameter_names_from_function_declaration
    789 		version 100 es
    790 		expect compile_fail
    791 		both ""
    792 			#version 100
    793 			precision mediump float;
    794 			${DECLARATIONS}
    795 
    796 			float func(float a, float b);
    797 
    798 			float func(float x, float y) { return a+b; }
    799 
    800 			void main()
    801 			{
    802 				${POSITION_FRAG_COLOR} = vec4(func(1.0, 2.0));
    803 			}
    804 		""
    805 	end
    806 
    807 	case variable_not_visible_in_own_initializer
    808 		version 100 es
    809 		expect compile_fail
    810 		both ""
    811 			#version 100
    812 			precision mediump float;
    813 			${DECLARATIONS}
    814 
    815 			void main()
    816 			{
    817 				float x = x;
    818 				${POSITION_FRAG_COLOR} = vec4(x);
    819 			}
    820 		""
    821 	end
    822 
    823 end # invalid