// $G $D/$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

func
main()
{
	var c string;

	a := `abc`;
	b := `xyz`;

	/* print a literal */
	print(`abc`);

	/* print a variable */
	print(b, "-");

	/* catenate literals */
	print(`abc` + `xyz`, "-");

	/* catenate variables */
	print(a+b, "-");

	/* compare literals */
	if `abc` == `xyz` || `abc` != "abc" || `abc` > `xyz` {
		panic("compare literals");
	}

	/* compare variables */
	if a == b || a != a || a > b {
		panic("compare variables");
	}

	/* cat */
	c = a+b;
	print(c, "-");

	/* catequal */
	c = a;
	c += b;
	print(c, "-");

	/* clumsy evaluation */
	c = b;
	c = a + c;
	print(c, "-");

	/* len */
	if len(c) != 6 {
		panic("len ", len(c));
	}

	/* index strings */
	for i:=0; i<len(c); i=i+1 {
		if c[i] != (a+b)[i] {
			panic("index ", i, " ", c[i], " ", (a+b)[i]);
		}
	}

	/* slice strings */
	print(c[0:3], c[3:6]);

	print("\n");

	/* create string with integer constant */
	c = string('x');
	if c != "x" {
		panic("create int ", c);
	}

	/* create string with integer variable */
	v := 'x';
	c = string(v);
	if c != "x" {
		panic("create int ", c);
	}

	/* create string with byte array */
	var z1 [3]byte;
	z1[0] = 'a';
	z1[1] = 'b';
	z1[2] = 'c';
	c = string(&z1);
	if c != "abc" {
		panic("create byte array ", c);
	}

	/* create string with int array */
	var z2 [3]int;
	z2[0] = 'a';
	z2[1] = '\u1234';
	z2[2] = 'c';
	c = string(&z2);
	if c != "a\u1234c" {
		panic("create int array ", c);
	}

	/* create string with byte array pointer */
	z3 := new([3]byte);
	z3[0] = 'a';
	z3[1] = 'b';
	z3[2] = 'c';
	c = string(z3);
	if c != "abc" {
		panic("create array pointer ", c);
	}
}
