view j2se/test/tools/javac/AccessMethods/AccessMethodsLHS.java @ 7:807dfe9c366c trunk

[svn] Load openjdk/jdk7/b19 into jdk/trunk.
author xiomara
date Fri, 31 Aug 2007 00:44:13 +0000
parents a4ed3fb96592
children
line wrap: on
line source

/*
 * Copyright 1998 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */

/*
 * @test
 * @bug 4102566
 * @summary Test access methods for assignment targets.
 * @author William Maddox (maddox)
 *
 * @compile AccessMethodsLHS.java
 * @run main AccessMethodsLHS
 */

public class AccessMethodsLHS {

    static void fail(String msg) throws Exception {
	throw new Exception("FAIL: " + msg);
    }

    static int arg = 123456;

    private int i;
    private double d;

    private void m(int x) throws Exception {
	System.out.println("called AccessMethodsLHS.m");
	if (x != 123456)
	    AccessMethodsLHS.fail("bad argument");
    }

    public static class Bar {
        private int i;
	private double d;
	private String s;

	private void m(int x) throws Exception {
	    System.out.println("called AccessMethodsLHS.Bar.m");
	    if (x != 123456)
		AccessMethodsLHS.fail("bad argument");
	}

	// Static members are permitted in a static inner class.

	static private int si;
	static private double sd;
	static private String ss;

	static private void sm(int x) throws Exception {
	    System.out.println("called AccessMethodsLHS.Bar.sm");
	    if (x != 123456)
		AccessMethodsLHS.fail("bad argument");
	}
    }

    public static class Baz {
        private int i;
	private double d;
	private String s;

	private void m(int x) throws Exception {
	    System.out.println("called Baz.m");
	    if (x != 123456)
		AccessMethodsLHS.fail("bad argument");
	}

	// Compiler rejects static members here correctly.
	
	// static private int si;
	// static private double sd;
	// static private String ss;
    }

    public class Quux {
	void DoIt () throws Exception {
	    m(arg);
	    i = 1;
	    d = 1.0;
	    i += 5;
	    i--;
	}
	void DoMore(AccessMethodsLHS f) throws Exception {
	    f.m(arg);
	}
    }

    public static class Quem {
	void DoIt () {
	    // Illegal static refs to non-static vars
	    // i = 1;
	    // d = 1.0;
	    // i += 5;
	    // i--;
	}
    }

    static int effects = 0;

    static Bar iBar(Bar x) { effects++; return x; }

    static Baz iBaz(Baz x) { effects++; return x; }

    static void checkEffects(int i) throws Exception {
	if (effects != 1) {
	    AccessMethodsLHS.fail("incorrect side-effect behavior (" + effects + "): " + i);
	}
	effects = 0;
    }
 
    static public void main(String args[]) throws Exception {

        Bar b = new Bar();
	Baz c = new Baz();

        System.out.println("testing assignment");

	AccessMethodsLHS f = new AccessMethodsLHS();

	Quux q1 = f.new Quux();
	q1.DoIt();
	q1.DoMore(f);

	Quem q2 = new Quem();
	q2.DoIt();

	// *** Static class, Non-static members ***

	b.m(arg);

	// Integer (1 word)

	b.i = 5;
	System.out.println(b.i);
	if (b.i != 5)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(b.i);


	if ((b.i += 10) != 15)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(b.i);

	if (b.i != 15)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(b.i);

	b.s = "foo";
	if (!(b.s += "bar").equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign result");
	System.out.println(b.s);

	if (!b.s.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect");
	System.out.println(b.s);

	b.s = "foo";
	b.s += "bar";
	if (!b.s.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect (novalue)");
	System.out.println(b.s);

	b.i = 0;
	b.i++;
	if (b.i != 1)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(b.i);

	b.i = 5;
	if (b.i++ != 5)
	    AccessMethodsLHS.fail("post-increment result");
	if (b.i != 6)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(b.i);

	b.i = 1;
	--b.i;
	if (b.i != 0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	b.i = 5;
	if (--b.i != 4)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (b.i != 4)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(b.i);

	// Double (2 word)

	b.d = 5.0;
	System.out.println(b.d);
	if (b.d != 5.0)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(b.d);

	if ((b.d += 10) != 15.0)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(b.d);

	if (b.d != 15.0)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(b.d);

	b.d = 0.0;
	b.d++;
	if (b.d != 1.0)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(b.d);

	b.d = 5.0;
	if (b.d++ != 5.0)
	    AccessMethodsLHS.fail("post-increment result");
	if (b.d != 6.0)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(b.d);

	b.d = 1.0;
	--b.d;
	if (b.d != 0.0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	b.d = 5.0;
	if (--b.d != 4.0)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (b.d != 4.0)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(b.d);

	// Integer (1 word) with side-effects in object reference

	iBar(b).i = 5;
	checkEffects(1);
	System.out.println(b.i);
	if (b.i != 5)
	    AccessMethodsLHS.fail("simple assignment");

	System.out.println(b.i);

	if ((iBar(b).i += 10) != 15)
	    AccessMethodsLHS.fail("add-assign result");
	checkEffects(2);
	System.out.println(b.i);

	if (b.i != 15)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(b.i);

	b.i = 0;
	iBar(b).i++;
	checkEffects(3);
	if (b.i != 1)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(b.i);

	b.i = 5;
	if (iBar(b).i++ != 5)
	    AccessMethodsLHS.fail("post-increment result");
	checkEffects(4);
	if (b.i != 6)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(b.i);

	b.i = 1;
	--iBar(b).i;
	checkEffects(5);
	if (b.i != 0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	b.i = 5;
	if (--iBar(b).i != 4)
	    AccessMethodsLHS.fail("pre-decrement result");
	checkEffects(6);
	if (b.i != 4)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(b.i);


	// *** Static class, Static members ***

	Bar.sm(arg);

	// Integer (1 word)

	Bar.si = 5;
	System.out.println(Bar.si);
	if (Bar.si != 5)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(Bar.si);

	if ((Bar.si += 10) != 15)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(Bar.si);

	if (Bar.si != 15)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(Bar.si);

	Bar.ss = "foo";
	if (!(Bar.ss += "bar").equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign result");
	System.out.println(Bar.ss);

	if (!Bar.ss.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect");
	System.out.println(Bar.ss);

	Bar.ss = "foo";
	Bar.ss += "bar";
	if (!Bar.ss.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect (novalue)");
	System.out.println(Bar.ss);

	Bar.si = 0;
	Bar.si++;
	if (Bar.si != 1)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(Bar.si);

	Bar.si = 5;
	if (Bar.si++ != 5)
	    AccessMethodsLHS.fail("post-increment result");
	if (Bar.si != 6)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(Bar.si);

	Bar.si = 1;
	--Bar.si;
	if (Bar.si != 0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	Bar.si = 5;
	if (--Bar.si != 4)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (Bar.si != 4)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(Bar.si);

	// Double (2 word)

	Bar.sd = 5.0;
	System.out.println(Bar.sd);
	if (Bar.sd != 5.0)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(Bar.sd);

	if ((Bar.sd += 10) != 15.0)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(Bar.sd);

	if (Bar.sd != 15.0)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(Bar.sd);

	Bar.sd = 0.0;
	Bar.sd++;
	if (Bar.sd != 1.0)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(Bar.sd);

	Bar.sd = 5.0;
	if (Bar.sd++ != 5.0)
	    AccessMethodsLHS.fail("post-increment result");
	if (Bar.sd != 6.0)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(Bar.sd);

	Bar.sd = 1.0;
	--Bar.sd;
	if (Bar.sd != 0.0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	Bar.sd = 5.0;
	if (--Bar.sd != 4.0)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (Bar.sd != 4.0)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(Bar.sd);


	// *** Static class, Static members (invoked via object reference) ***

	b.sm(arg);

	iBar(b).sm(arg);
	checkEffects(101);

	// Integer (1 word)

	b.si = 5;
	System.out.println(b.si);
	if (b.si != 5)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(b.si);

	if ((b.si += 10) != 15)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(b.si);

	if (b.si != 15)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(b.si);

	b.ss = "foo";
	if (!(b.ss += "bar").equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign result");
	System.out.println(b.ss);

	if (!b.ss.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect");
	System.out.println(b.ss);

	b.ss = "foo";
	b.ss += "bar";
	if (!b.ss.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect (novalue)");
	System.out.println(b.ss);

	b.si = 0;
	b.si++;
	if (b.si != 1)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(b.si);

	b.si = 5;
	if (b.si++ != 5)
	    AccessMethodsLHS.fail("post-increment result");
	if (b.si != 6)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(b.si);

	b.si = 1;
	--b.si;
	if (b.si != 0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	b.si = 5;
	if (--b.si != 4)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (b.si != 4)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(b.si);

	// Double (2 word)

	b.sd = 5.0;
	System.out.println(b.sd);
	if (b.sd != 5.0)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(b.sd);

	if ((b.sd += 10) != 15.0)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(b.sd);

	if (b.sd != 15.0)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(b.sd);

	b.sd = 0.0;
	b.sd++;
	if (b.sd != 1.0)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(b.sd);

	b.sd = 5.0;
	if (b.sd++ != 5.0)
	    AccessMethodsLHS.fail("post-increment result");
	if (b.sd != 6.0)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(b.sd);

	b.sd = 1.0;
	--b.sd;
	if (b.sd != 0.0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	b.sd = 5.0;
	if (--b.sd != 4.0)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (b.sd != 4.0)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(b.sd);

	// Integer (1 word) with side-effects in object reference

	iBar(b).si = 5;
	checkEffects(7);
	System.out.println(b.si);
	if (b.si != 5)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(b.si);

	if ((iBar(b).si += 10) != 15)
	    AccessMethodsLHS.fail("add-assign result");
	checkEffects(8);
	System.out.println(b.si);

	if (b.si != 15)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(b.si);

	iBar(b).si = 0;
	checkEffects(9);
	iBar(b).si++;
	checkEffects(10);
	if (b.si != 1)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(b.si);

	b.si = 5;
	if (iBar(b).si++ != 5)
	    AccessMethodsLHS.fail("post-increment result");
	checkEffects(11);
	if (b.si != 6)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(b.si);

	b.si = 1;
	--iBar(b).si;
	checkEffects(12);
	if (b.si != 0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	b.si = 5;
	if (--iBar(b).si != 4)
	    AccessMethodsLHS.fail("pre-decrement result");
	checkEffects(13);
	if (b.si != 4)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(b.si);


	// *** Non-static class, Non-static members ***

	c.m(arg);

	iBaz(c).m(arg);
	checkEffects(102);

	// Integer (1 word)

	c.i = 5;
	System.out.println(c.i);
	if (c.i != 5)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(c.i);

	if ((c.i += 10) != 15)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(c.i);

	if (c.i != 15)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(c.i);

	c.s = "foo";
	if (!(c.s += "bar").equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign result");
	System.out.println(c.s);

	if (!c.s.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect");
	System.out.println(c.s);

	c.s = "foo";
	c.s += "bar";
	if (!c.s.equals("foobar"))
	    AccessMethodsLHS.fail("concat-assign effect (novalue)");
	System.out.println(c.s);

	c.i = 0;
	c.i++;
	if (c.i != 1)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(c.i);

	c.i = 5;
	if (c.i++ != 5)
	    AccessMethodsLHS.fail("post-increment result");
	if (c.i != 6)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(c.i);

	c.i = 1;
	--c.i;
	if (c.i != 0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	c.i = 5;
	if (--c.i != 4)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (c.i != 4)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(c.i);

	// Double (2 word)

	c.d = 5.0;
	System.out.println(c.d);
	if (c.d != 5.0)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(c.d);

	if ((c.d += 10) != 15.0)
	    AccessMethodsLHS.fail("add-assign result");
	System.out.println(c.d);

	if (c.d != 15.0)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(c.d);

	c.d = 0.0;
	c.d++;
	if (c.d != 1.0)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(c.d);

	c.d = 5.0;
	if (c.d++ != 5.0)
	    AccessMethodsLHS.fail("post-increment result");
	if (c.d != 6.0)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(c.d);

	c.d = 1.0;
	--c.d;
	if (c.d != 0.0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	c.d = 5.0;
	if (--c.d != 4.0)
	    AccessMethodsLHS.fail("pre-decrement result");
	if (c.d != 4.0)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(c.d);

	// Double (2 word) with side-effects in object reference

	iBaz(c).d = 5.0;
	checkEffects(14);
	System.out.println(c.d);
	if (c.d != 5.0)
	    AccessMethodsLHS.fail("simple assignment");
	System.out.println(c.d);

	if ((iBaz(c).d += 10) != 15.0)
	    AccessMethodsLHS.fail("add-assign result");
	checkEffects(15);
	System.out.println(c.d);

	if (c.d != 15.0)
	    AccessMethodsLHS.fail("add-assign effect");
	System.out.println(c.d);

	c.d = 0.0;
	iBaz(c).d++;
	checkEffects(16);
	if (c.d != 1.0)
	    AccessMethodsLHS.fail("post-increment effect");
	System.out.println(c.d);

	c.d = 5.0;
	if (iBaz(c).d++ != 5.0)
	    AccessMethodsLHS.fail("post-increment result");
	checkEffects(17);
	if (c.d != 6.0)
	    AccessMethodsLHS.fail("post-increment effect (embedded)");
	System.out.println(c.d);

	c.d = 1.0;
	--iBaz(c).d;
	checkEffects(18);
	if (c.d != 0.0)
	    AccessMethodsLHS.fail("pre-decrement effect");

	c.d = 5.0;
	if (--iBaz(c).d != 4.0)
	    AccessMethodsLHS.fail("pre-decrement result");
	checkEffects(19);
	if (c.d != 4.0)
	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");
	System.out.println(c.d);

	// All done.

        System.out.println("done");
    }
}