1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class InstField {
185387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public boolean mBoolean1, mBoolean2;
195387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public byte mByte1, mByte2;
205387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public char mChar1, mChar2;
215387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public short mShort1, mShort2;
225387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public int mInt1, mInt2;
235387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public float mFloat1, mFloat2;
245387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public long mLong1, mLong2;
255387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public double mDouble1, mDouble2;
265387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    public volatile long mVolatileLong1, mVolatileLong2;
275387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void run() {
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assignFields();
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkFields();
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InstField.nullCheck(null);
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Check access to instance fields through a null pointer.
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static public void nullCheck(InstField nully) {
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("InstField.nullCheck");
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int x = nully.mInt1;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assert(false);
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException npe) {
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // good
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            long l = nully.mLong1;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assert(false);
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException npe) {
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // good
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            nully.mInt1 = 5;
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assert(false);
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException npe) {
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // good
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            nully.mLong1 = 17L;
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assert(false);
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException npe) {
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // good
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void assignFields() {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("InstField assign...");
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mBoolean1 = true;
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mBoolean2 = false;
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mByte1 = 127;
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mByte2 = -128;
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mChar1 = 32767;
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mChar2 = 65535;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mShort1 = 32767;
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mShort2 = -32768;
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mInt1 = 65537;
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mInt2 = -65537;
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mFloat1 = 3.1415f;
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mFloat2 = -1.0f / 0.0f;                // -inf
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mLong1 = 1234605616436508552L;     // 0x1122334455667788
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mLong2 = -1234605616436508552L;
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mDouble1 = 3.1415926535;
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mDouble2 = 1.0 / 0.0;               // +inf
835387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden        mVolatileLong1 = mLong1 - 1;
845387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden        mVolatileLong2 = mLong2 + 1;
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void checkFields() {
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("InstField check...");
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mBoolean1);
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(!mBoolean2);
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mByte1 == 127);
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mByte2 == -128);
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mChar1 == 32767);
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mChar2 == 65535);
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mShort1 == 32767);
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mShort2 == -32768);
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mInt1 == 65537);
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mInt2 == -65537);
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mFloat1 > 3.141f && mFloat1 < 3.142f);
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mFloat2 < mFloat1);
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mLong1 == 1234605616436508552L);
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mLong2 == -1234605616436508552L);
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mDouble1 > 3.141592653 && mDouble1 < 3.141592654);
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mDouble2 > mDouble1);
1055387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden        assert(mVolatileLong1 == 1234605616436508551L);
1065387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden        assert(mVolatileLong2 == -1234605616436508551L);
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
109