1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 inputVal; 2*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed; 3*c8dee2aaSAndroid Build Coastguard Worker 4*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 5*c8dee2aaSAndroid Build Coastguard Worker // Ensure that normalizing zero doesn't trigger a UBSAN divide-by-zero report. 6*c8dee2aaSAndroid Build Coastguard Worker float normalizeZero = normalize(0); 7*c8dee2aaSAndroid Build Coastguard Worker // Ensure that it is harmless to normalize a gigantic value. 8*c8dee2aaSAndroid Build Coastguard Worker float normalizeHuge = normalize(1E34); 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker const half4 constVec = half4(20, 0, 0, 0); 11*c8dee2aaSAndroid Build Coastguard Worker half4 expectedVec = half4(1, 0, 0, 0); 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker return (normalize(inputVal.x) == expectedVec.x && 14*c8dee2aaSAndroid Build Coastguard Worker normalize(inputVal.xy) == expectedVec.xy && 15*c8dee2aaSAndroid Build Coastguard Worker normalize(inputVal.xyz) == expectedVec.xyz && 16*c8dee2aaSAndroid Build Coastguard Worker normalize(inputVal.xyzw) == expectedVec.xyzw && 17*c8dee2aaSAndroid Build Coastguard Worker normalize(constVec.x) == expectedVec.x && 18*c8dee2aaSAndroid Build Coastguard Worker normalize(constVec.yx) == expectedVec.yx && 19*c8dee2aaSAndroid Build Coastguard Worker normalize(constVec.zxy) == expectedVec.zxy && 20*c8dee2aaSAndroid Build Coastguard Worker normalize(constVec.xyzw) == expectedVec.xyzw) ? colorGreen : colorRed; 21*c8dee2aaSAndroid Build Coastguard Worker} 22