1cb93a386Sopenharmony_ci 2cb93a386Sopenharmony_ciout vec4 sk_FragColor; 3cb93a386Sopenharmony_ciuniform vec4 colorGreen; 4cb93a386Sopenharmony_ciuniform vec4 colorRed; 5cb93a386Sopenharmony_civec4 main() { 6cb93a386Sopenharmony_ci vec4 value = vec4(2.5, -2.5, 8.0, -0.125); 7cb93a386Sopenharmony_ci const vec4 expectedWhole = vec4(2.0, -2.0, 8.0, 0.0); 8cb93a386Sopenharmony_ci const vec4 expectedFraction = vec4(0.5, -0.5, 0.0, -0.125); 9cb93a386Sopenharmony_ci bvec4 ok = bvec4(false); 10cb93a386Sopenharmony_ci vec4 whole; 11cb93a386Sopenharmony_ci vec4 fraction; 12cb93a386Sopenharmony_ci fraction.x = modf(value.x, whole.x); 13cb93a386Sopenharmony_ci ok.x = whole.x == 2.0 && fraction.x == 0.5; 14cb93a386Sopenharmony_ci fraction.xy = modf(value.xy, whole.xy); 15cb93a386Sopenharmony_ci ok.y = whole.xy == vec2(2.0, -2.0) && fraction.xy == vec2(0.5, -0.5); 16cb93a386Sopenharmony_ci fraction.xyz = modf(value.xyz, whole.xyz); 17cb93a386Sopenharmony_ci ok.z = whole.xyz == vec3(2.0, -2.0, 8.0) && fraction.xyz == vec3(0.5, -0.5, 0.0); 18cb93a386Sopenharmony_ci fraction = modf(value, whole); 19cb93a386Sopenharmony_ci ok.w = whole == expectedWhole && fraction == expectedFraction; 20cb93a386Sopenharmony_ci return all(ok) ? colorGreen : colorRed; 21cb93a386Sopenharmony_ci} 22