/*
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;
}
