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

type s struct
{
	a	bool;
	b	bool;
}

func
main()
{
	var a,b bool;

	a = true;
	b = false;

	if !a { panic 1; }
	if b { panic 2; }
	if !!!a { panic 3; }
	if !!b { panic 4; }

	a = !b;
	if !a { panic 5; }
	if !!!a { panic 6; }

	var x *s;
	x = new(s);
	x.a = true;
	x.b = false;

	if !x.a { panic 7; }
	if x.b { panic 8; }
	if !!!x.a { panic 9; }
	if !!x.b { panic 10; }

	x.a = !x.b;
	if !x.a { panic 11; }
	if !!!x.a { panic 12; }

	/*
	 * test &&
	 */
	a = true;
	b = true;
	if !(a && b) { panic 21; }
	if a && !b { panic 22; }
	if !a && b { panic 23; }
	if !a && !b { panic 24; }

	a = false;
	b = true;
	if !(!a && b) { panic 31; }
	if !a && !b { panic 32; }
	if a && b { panic 33; }
	if a && !b { panic 34; }

	a = true;
	b = false;
	if !(a && !b) { panic 41; }
	if a && b { panic 41; }
	if !a && !b { panic 41; }
	if !a && b { panic 44; }

	a = false;
	b = false;
	if !(!a && !b) { panic 51; }
	if !a && b { panic 52; }
	if a && !b { panic 53; }
	if a && b { panic 54; }

	/*
	 * test ||
	 */
	a = true;
	b = true;
	if !(a || b) { panic 61; }
	if !(a || !b) { panic 62; }
	if !(!a || b) { panic 63; }
	if !a || !b { panic 64; }

	a = false;
	b = true;
	if !(!a || b) { panic 71; }
	if !(!a || !b) { panic 72; }
	if !(a || b) { panic 73; }
	if a || !b { panic 74; }

	a = true;
	b = false;
	if !(a || !b) { panic 81; }
	if !(a || b) { panic 82; }
	if !(!a || !b) { panic 83; }
	if !a || b { panic 84; }

	a = false;
	b = false;
	if !(!a || !b) { panic 91; }
	if !(!a || b) { panic 92; }
	if !(a || !b) { panic 93; }
	if a || b { panic 94; }
}