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