/*
This file is part of JOP, the Java Optimized Processor
see <http://www.jopdesign.com/>
Copyright (C) 2007, Alberto Andreotti
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package jdk;
import jvm.TestCase;
import java.io.*;
//Character, String, StringBuffer
public class PrimitiveClasses3 extends TestCase {
public String toString() {
return "PrimitiveClasses3";
}
public boolean testCharacter(){
boolean Ok=true;
//Character
Character myCharacter1=new Character('a');
Character myCharacter2=new Character('f');
Character myCharacter3=new Character('f');
//equals()
Ok=Ok && !myCharacter1.equals(myCharacter2);
Ok=Ok && !myCharacter3.equals(myCharacter1);
Ok=Ok && myCharacter2.equals(myCharacter3);
//hashCode()
Ok=Ok && myCharacter1.hashCode()!=myCharacter2.hashCode();
Ok=Ok && myCharacter1.hashCode()!=myCharacter3.hashCode();
Ok=Ok && myCharacter3.hashCode()==myCharacter2.hashCode();
//CharValue()
Ok= Ok && 'a'==myCharacter1.charValue();
Ok= Ok && 'f'==myCharacter2.charValue();
Ok= Ok && 'w'!=myCharacter3.charValue();
//digit--only implemented for radix 10
//Ok=Ok && 10==Character.digit('a',16);
//Ok=Ok && 15==Character.digit('f',16);
Ok=Ok && -1==Character.digit('a',10);
Ok=Ok && 7==Character.digit('7',10);
//is(Lower|Upper)Case
Ok=Ok && Character.isLowerCase('a');
Ok=Ok && !Character.isLowerCase('A');
Ok=Ok && Character.isUpperCase('A');
Ok=Ok && !Character.isUpperCase('a');
//to(Lower|Upper)Case
Ok=Ok && 'a'==Character.toLowerCase('A');
Ok=Ok && 'A'==Character.toUpperCase('a');
//isDigit-- produce some "Bengali" digits in unicode (fails in JOP)
//Ok=Ok && Character.isDigit((char)0x09E7);
//Ok=Ok && Character.isDigit((char)0x09E8);
//produce some ISO-LATIN-1 digits in unicode
Ok=Ok && Character.isDigit((char)0x0031);
Ok=Ok && Character.isDigit((char)0x0033);
return Ok;
}
public boolean testStringBuffer(){
boolean Ok=true;
int i;
//StringBuffer
StringBuffer myStringBuffer1=new StringBuffer();
StringBuffer myStringBuffer2=new StringBuffer(30);
StringBuffer myStringBuffer3=new StringBuffer("My character sequence");
for(i=0; i<21; i++)
{Ok=Ok && myStringBuffer3.charAt(i)=="My character sequence".charAt(i);}
//length()
Ok=Ok && myStringBuffer1.length()==0;
Ok=Ok && myStringBuffer2.length()==0;
Ok=Ok && myStringBuffer3.length()==21;
//append(Object)
String myString1=new String("myString");
myStringBuffer1.append(myString1);
for(i=0; i<myString1.length(); i++)
{Ok=Ok && myStringBuffer1.charAt(i)==myString1.charAt(i);}
//append(boolean)/insert(int, boolean)
myStringBuffer1=new StringBuffer();
myStringBuffer1.append(true);
for(i=0; i<4; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="true".charAt(i);}
myStringBuffer1.insert(2, false);
for(i=0; i<9; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="trfalseue".charAt(i);}
//append(char)/insert(int,char)
//System.out.println(myStringBuffer1.toString());
myStringBuffer1.append('a');
//System.out.println(myStringBuffer1.toString());
Ok=Ok && myStringBuffer1.charAt(myStringBuffer1.length()-1)=='a';
//possible issue in insert(int,char)
//trfalseue trfalseuea trfxaaaaaaa
//myStringBuffer1.insert(3,'x');
//System.out.println(myStringBuffer1.toString());
//for(i=0; i<9; i++)
//{Ok=Ok && myStringBuffer1.charAt(i)=="trfxalseuea".charAt(i);}
//append(String)/insert(int,String)
myStringBuffer2.append("myString");
for(i=0; i<myString1.length(); i++)
{Ok=Ok && myStringBuffer2.charAt(i)==myString1.charAt(i);}
myStringBuffer2.insert(3,"myString");
for(i=0; i<16; i++)
{Ok=Ok && myStringBuffer2.charAt(i)=="mySmyStringtring".charAt(i);}
//append(char[])/insert(int,char[])
myStringBuffer1=new StringBuffer();
char[] myByteArray={'m','y','S','t','r','i','n','g'};
myStringBuffer1.append(myByteArray);
for(i=0; i<myString1.length(); i++)
{Ok=Ok && myStringBuffer1.charAt(i)==myString1.charAt(i);}
myStringBuffer1.insert(2,myByteArray);
for(i=0; i<16; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="mymyStringString".charAt(i);}
//append(char[],int,int)
myStringBuffer1=new StringBuffer();
myStringBuffer1.append(myByteArray,3,5);
for(i=0; i+3<myString1.length(); i++)
{Ok=Ok && myStringBuffer1.charAt(i)==myString1.charAt(i+3);}
//produces the f2d bytecode which is not implemented
//append(float)/insert(int,float)
/*
float myFloat=444433.34f;
myStringBuffer1=new StringBuffer();
myStringBuffer1.append(myFloat);
for(i=0; i<9; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="444433.34".charAt(i);}
*/
/* Not implemented
myStringBuffer1.insert(3,myFloat);
for(int i=0; i<18; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="444444433.34433.34".charAt(i);}*/
//append(int)/ insert(int, int)
int myInt=444435424;
myStringBuffer1=new StringBuffer();
myStringBuffer1.append(myInt);
for(i=0; i<9; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="444435424".charAt(i);}
myStringBuffer1.insert(9,myInt);
for(i=0; i<18; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="444435424444435424".charAt(i);}
//append(long)/ insert(int,long)
long myLong=4444354248989l;
myStringBuffer1=new StringBuffer();
myStringBuffer1.append(myLong);
for(i=0; i<13; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="4444354248989".charAt(i);}
myStringBuffer1.insert(5,myLong);
for(i=0; i<26; i++)
{Ok=Ok && myStringBuffer1.charAt(i)=="44443444435424898954248989".charAt(i);}
//setCharAt(int) / reverse()
//capacity() / ensureCapacity
/* Not implemented
int oldCapacity=myStringBuffer1.capacity();
myStringBuffer1.ensureCapacity(oldCapacity*2);
Ok=Ok && myStringBuffer1.capacity()==oldCapacity*2+2;
oldCapacity=myStringBuffer1.capacity();
myStringBuffer1.ensureCapacity(oldCapacity*2+3);
Ok=Ok && myStringBuffer1.capacity()==oldCapacity*2+3;
*/
//getChars(int srcBegin,int srcEnd,char dst[],int dstBegin)
myStringBuffer1=new StringBuffer();
myStringBuffer1.append(myString1);
myStringBuffer1.getChars(1,5,myByteArray,2);
for(i=0; i<4; i++)
{Ok=Ok && myByteArray[i+2]=="yStr".charAt(i);}
return Ok;
}
public boolean testString2(){
boolean Ok=true;
int i;
//String
byte myByteArray[]={'M','y','S','t','r','i','n','g'};
char myCharArray[]={'M','y','S','t','r','i','n','g'};
String myString1=new String("My test string1");
String myString2,myString3,myString4,myString5,myString6,myString7,
myString8,myString9;
StringBuffer myStb=new StringBuffer("myString");
//to avoid uninitialized Strings
myString2= myString1; myString3= myString1;
myString4= myString1; myString5= myString1;
try{
myString2=new String(myByteArray);
myString3=new String(myByteArray,2,5);
myString4=new String(myByteArray,2,5,"ASCII");
myString5=new String(myByteArray,"ASCII");
} catch(UnsupportedEncodingException e ) {}
myString6=new String(myCharArray);
myString7=new String(myCharArray,2,5);
myString8=new String();
myString9=new String(myStb);
myString6="mystring";
//lastIndexOf(int)
Ok=Ok && 2==myString2.lastIndexOf('S');
Ok=Ok && -1==myString1.lastIndexOf('P');
// public int lastIndexOf(int ch,int fromIndex)
Ok=Ok && 3==myString2.lastIndexOf(116,3);
Ok=Ok && -1==myString2.lastIndexOf(116,2);
//regionMatches (boolean, int, String, int, int)
Ok=Ok && myString2.regionMatches(true,2,myString3,0,5);
Ok=Ok && !myString2.regionMatches(true,2,myString3,0,6);
//here the case differs for the first element
Ok=Ok && myString5.regionMatches(true,0,myString9,0,8);
Ok=Ok && !myString5.regionMatches(false,0,myString9,0,8);
//replace(char,char)
Ok=Ok && (myString1.replace('s','x')).equals("My text xtring1");
//startsWith(String)
Ok=Ok && myString1.startsWith("My t");
Ok=Ok && !myString1.startsWith(myString3);
//startsWith(String, int)
Ok=Ok && myString1.startsWith(" t",2);
Ok=Ok && !myString1.startsWith("My t",2);
//substring(int)
Ok=Ok && (myString1.substring(4)).equals("est string1");
Ok=Ok && !(myString2.substring(4)).equals("est string1");
//substring(int,int)
Ok=Ok && (myString2.substring(2,7)).equals(myString3);
Ok=Ok && !(myString2.substring(2,6)).equals(myString3);
//toCharArray ()
myCharArray=myString2.toCharArray();
for(i=0;i<myString2.length();i++)
{Ok=Ok && myString5.charAt(i)==myCharArray[i];}
//toLowerCase()
Ok=Ok && (myString2.toLowerCase()).equals(myString6);
//toUpperCase()
Ok=Ok && (myString2.toUpperCase()).equals("MYSTRING");
//trim()
Ok=Ok && (" spacedString ".trim()).equals("spacedString");
//charAt()
Ok=Ok && 'M'==myString1.charAt(0);
Ok=Ok && 'y'==myString1.charAt(1);
Ok=Ok && 'g'==myString2.charAt(7);
//valueOf(boolean)
Ok=Ok && (String.valueOf(true)).equals("true");
Ok=Ok && !(String.valueOf(false)).equals("true");
//valueOf(char)
Ok=Ok && (String.valueOf('x')).equals("x");
//valueOf(int)
Ok=Ok && (String.valueOf(321)).equals("321");
//valueOf(long)
Ok=Ok && (String.valueOf(321321l)).equals("321321");
//valueOf(float)--Not found
//Ok=Ok && (String.valueOf(321.32f)).equals("321.32");
return Ok;
}
public boolean testString1(){
boolean Ok=true;
int i;
//String
byte myByteArray[]={'M','y','S','t','r','i','n','g'};
char myCharArray[]={'M','y','S','t','r','i','n','g'};
String myString1=new String("My test string1");
String myString2,myString3,myString4,myString5,myString6,myString7,
myString8,myString9;
StringBuffer myStb=new StringBuffer("myString");
//to avoid uninitialized Strings
myString2= myString1; myString3= myString1;
myString4= myString1; myString5= myString1;
try{
myString2=new String(myByteArray);
myString3=new String(myByteArray,2,5);
myString4=new String(myByteArray,2,5,"ASCII");
myString5=new String(myByteArray,"ASCII");
} catch(UnsupportedEncodingException e ) {}
myString6=new String(myCharArray);
myString7=new String(myCharArray,2,5);
myString8=new String();
myString9=new String(myStb);
//check constructors
Ok=Ok && myString1.equals("My test string1");
Ok=Ok && myString2.equals("MyString");
Ok=Ok && myString3.equals("Strin");
Ok=Ok && myString4.equals(myString3);
Ok=Ok && myString5.equals(myString2);
Ok=Ok && myString6.equals(myString2);
Ok=Ok && myString7.equals(myString3);
Ok=Ok && myString8.equals("");
Ok=Ok && myString9.equals("myString");
myString6="mystring";
//compareTo(String)
Ok=Ok && 0>myString9.compareTo("myStrinh");
Ok=Ok && 0==myString1.compareTo("My test string1");
//concat(String)
Ok=Ok && (myString9.concat(myString4)).equals("myStringStrin");
//copyValueOf(char[])--Not implemented
//Ok=Ok && (String.copyValueOf(myCharArray)).equals("MyString");
//copyValueOf(char[], int, int)--Not implemented
//Ok=Ok && (String.copyValueOf(myCharArray,2,4)).equals("Stri");
//endsWith
Ok=Ok && myString7.endsWith("rin");
Ok=Ok && !myString4.endsWith(myString6);
//getBytes
myByteArray=myString9.getBytes();
for(i=0;i<myString9.length();i++)
{Ok=Ok && myByteArray[i]==myString9.charAt(i);}
//getBytes(String)
try{myByteArray=myString9.getBytes("ASCII");}
catch(UnsupportedEncodingException e){}
for(i=0;i<myString9.length();i++)
{Ok=Ok && myByteArray[i]==myString9.charAt(i);}
//public void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin)
myString9.getChars(2,4,myCharArray,3);
for(i=0;i<2;i++)
{Ok=Ok && myCharArray[i+3]==myString9.charAt(i+2);}
//hashCode
//indexOf (String)
Ok=Ok && 2==myString5.indexOf(myString7);
Ok=Ok && -1==myString5.indexOf(myString1);
//indexOf (String, int)
Ok=Ok && 2==myString2.indexOf(myString3,0);
Ok=Ok && -1==myString1.indexOf(myString5,4);
//indexOf (int)
Ok=Ok && 2==myString2.indexOf(83);
Ok=Ok && -1==myString2.indexOf(130);
//indexOf (int,int)
Ok=Ok && 5==myString1.indexOf(115,4);
Ok=Ok && -1==myString1.indexOf(130,4);
return Ok;
}
public boolean test() {
boolean Ok=true;
Ok= testStringBuffer() && testString1() && testString2()&& testCharacter();
return Ok;
}}