(root)/
gcc-13.2.0/
gcc/
testsuite/
gdc.test/
runnable/
foreach2.d
/*
RUN_OUTPUT:
---
Success
---
*/

import core.stdc.stdio;

/**************************************************/

void test1()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    foreach (uint u; a)
    {
        i++;
        u++;
    }
    assert(i == 2);
    assert(a["hello"] == 73);
    assert(a["world"] == 82);
}

/**************************************************/

void test2()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    foreach (ref uint u; a)
    {
        i++;
        u++;
    }
    assert(i == 2);
    assert(a["hello"] == 74);
    assert(a["world"] == 83);
}

/**************************************************/

void test3()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    foreach (ref uint u; a)
    {
        i++;
        if (i)
            break;
        u++;
    }
    assert(i == 1);
    assert(a["hello"] == 73);
    assert(a["world"] == 82);
}

/**************************************************/

void test4()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    foreach (ref uint u; a)
    {
        i++;
        if (i == 1)
            continue;
        u++;
    }
    assert(i == 2);
    assert((a["hello"] == 73 && a["world"] == 83) ||
           (a["hello"] == 74 && a["world"] == 82));
}

/**************************************************/

void test5()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

Loop:
    while (1)
    {
        foreach (ref uint u; a)
        {
            i++;
            if (i)
                break Loop;
            u++;
        }
    }
    assert(i == 1);
    assert(a["hello"] == 73);
    assert(a["world"] == 82);
}

/**************************************************/

void test6()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

Loop:
    while (1)
    {
        foreach (ref uint u; a)
        {
            i++;
            if (i == 1)
                continue Loop;
            u++;
        }
        break;
    }
    assert(i == 3);
    assert(a["hello"] == 74);
    assert(a["world"] == 83);
}

/**************************************************/

void test7()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    foreach (ref uint u; a)
    {
        i++;
        if (i)
            goto Label;
        u++;
    }
    assert(0);
Label:
    assert(i == 1);
    assert(a["hello"] == 73);
    assert(a["world"] == 82);
}

/**************************************************/

void test8_x(uint[char[]] a)
{
    int i;
    foreach (ref uint u; a)
    {
        i++;
        if (i)
            return;
        u++;
    }
}

void test8()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    test8_x(a);
    assert(i == 0);
    assert(a["hello"] == 73);
    assert(a["world"] == 82);
}

/**************************************************/

int test9_x(uint[char[]] a)
{
    int i;
    foreach (ref uint u; a)
    {
        i++;
        if (i)
            return 67;
        u++;
    }
    return 23;
}

void test9()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    i = test9_x(a);
    assert(i == 67);
    assert(a["hello"] == 73);
    assert(a["world"] == 82);
}

/**************************************************/

int test10_x(uint[char[]] a)
{
    int i;
    foreach (ref uint u; a)
    {
        i++;
        if (i)
            return i;
        u++;
    }
    return 23;
}

void test10()
{
    uint[char[]] a;
    int i;

    a["hello"] = 73;
    a["world"] = 82;

    i = test10_x(a);
    assert(i == 1);
    assert(a["hello"] == 73);
    assert(a["world"] == 82);
}

/**************************************************/

int main()
{
    test1();
    test2();
    test3();
    test4();
    test5();
    test6();
    test7();
    test8();
    test9();
    test10();

    printf("Success\n");
    return 0;
}