// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Dart test program testing top-level variables.


class TopLevelFuncTest {
  static testMain() {
    var z = [1, 10, 100, 1000];
    Expect.equals(Sum(z), 1111);

    var w = Window;
    Expect.equals(w, "window");

    Expect.equals(null, rgb);
    Color = "ff0000";
    Expect.equals(rgb, "#ff0000");
    CheckColor("#ff0000");

    Expect.equals("5", digits[5]);

    var e1 = Enumerator;
    var e2 = Enumerator;
    Expect.equals(0, e1());
    Expect.equals(1, e1());
    Expect.equals(2, e1());
    Expect.equals(0, e2());
  }
}

void CheckColor(String expected) {
  Expect.equals(expected, rgb);
}

int Sum(List<int> v) {
  int s = 0;
  for (int i = 0; i < v.length; i++) {
    s += v[i];
  }
  return s;
}

get Window { return "win" "dow"; }

String rgb;

void set Color(col) { rgb = "#$col"; }

List<String> get digits {
  return ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
}

Function get Enumerator {
  int k = 0;
  return () => k++;
}

main() {
  TopLevelFuncTest.testMain();
}
