Bug 33926

GemStone/S

6.1.6, 6.1.5, 6.1.x, 6.0.x, 5.1.5.1, 5.1.5

All

6.2

Characters > $z don't test correctly for case, type

The following methods will return false for any Characters with ascii value
> 122 ($z), regardless if the correct answer is true or false.

Character >> isLowercase
Character >> isUppercase
Character >> isLetter
Character >> isVowel

Workaround

Login as SystemUser and file in the following code:

!-----------------------------------------------------------------------------
category: 'Testing'
method: Character
isLetter

"Returns true if the receiver is a Roman letter.  Returns false otherwise."

^ (self isLowercase) _or: [ self isUppercase ]
%

category: 'Testing'
method: Character
isLowercase

"Returns true if the receiver is a lower-case character.  Returns false
otherwise."

| val |
val:= self asciiValue.
(val < 97)  ifTrue: [ ^ false ].
(val < 123) ifTrue: [ ^ true  ].
(val < 223) ifTrue: [ ^ false ].
(val < 256) ifTrue: [ ^ (val == 247) not ].
^ false
%

category: 'Testing'
method: Character
isUppercase

"Returns true if the receiver is an upper-case character.  Returns false
otherwise."

| val | val:= self asciiValue. (val < 65)  ifTrue: [ ^ false ]. (val <
91)  ifTrue: [ ^ true  ]. (val < 192) ifTrue: [ ^ false ]. (val < 223)
ifTrue: [ ^ (val == 215) not ].
^ false
%

category: 'Testing'
method: Character
isVowel

"Returns true if the receiver is a vowel ('Y' is considered to be a vowel).
Returns false otherwise."

| aChar val | aChar:= self asUppercase. val := aChar asciiValue. (val <
127) ifTrue: [
    ^ (aChar == $A) _or:
       [(aChar == $E) _or:
       [(aChar == $I) _or:
       [(aChar == $O) _or:
       [(aChar == $U) _or:
       [aChar == $Y]]]]]]. (val <  16rC0) ifTrue: [ ^ false ]. (val <=
16rC6) ifTrue: [ ^ true  ]. (val <  16rC8) ifTrue: [ ^ false ]. (val <=
16rCF) ifTrue: [ ^ true  ]. (val <  16rD2) ifTrue: [ ^ false ]. (val <=
16rD6) ifTrue: [ ^ true  ]. (val <  16rD8) ifTrue: [ ^ false ]. (val <=
16rDD) ifTrue: [ ^ true  ]. (val <  16rFF) ifTrue: [ ^ false ]. (val ==
16rFF) ifTrue: [ ^ true  ].
" Currently doesn't check for val > 16rFF / 255 "
^ false
%

category: 'Testing'
method: Character
_type

"Returns 1 for alpha, 2 for digit, and 3 for special."

self isLetter ifTrue: [ ^ 1]. self isDigit  ifTrue: [ ^ 2].
^ 3
%

!-----------------------------------------------------------------------------


Last updated: 2/6/06