// $G $F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import(
        "fmt";
        "os";
        "utf8";
)

func main() {
	s := "\000\123\x00\xca\xFE\u0123\ubabe\U0000babe\U0010FFFFx";
	expect := []int{ 0, 0123, 0, 0xFFFD, 0xFFFD, 0x123, 0xbabe, 0xbabe, 0x10FFFF, 'x' };
	var rune, size int;
	offset := 0;
	var i, c int;
	ok := true;
	cnum := 0;
	for i, c = range s {
		rune, size := utf8.DecodeRuneInString(s[i:len(s)]);  // check it another way
		if i != offset {
			fmt.Printf("unexpected offset %d not %d\n", i, offset);
			ok = false;
		}
		if rune != expect[cnum] {
			fmt.Printf("unexpected rune %d from DecodeRuneInString: %x not %x\n", i, rune, expect[cnum]);
			ok = false;
		}
		if c != expect[cnum] {
			fmt.Printf("unexpected rune %d from range: %x not %x\n", i, rune, expect[cnum]);
			ok = false;
		}
		offset += size;
		cnum++;
	}
	if i != len(s)-1 {
		fmt.Println("after loop i is", i, "not", len(s)-1);
		ok = false;
	}

	i = 12345;
	c = 23456;
	for i, c = range "" {
	}
	if i != 12345 {
		fmt.Println("range empty string assigned to index:", i);
		ok = false;
	}
	if c != 23456 {
		fmt.Println("range empty string assigned to value:", c);
		ok = false;
	}

	if !ok {
		fmt.Println("BUG: stringrange");
		os.Exit(1)
	}
}
