@@ -244,6 +244,53 @@ pub fn len_utf8_bytes(c: char) -> uint {
244
244
else { fail ! ( "invalid character!" ) }
245
245
}
246
246
247
+ pub trait Char {
248
+ fn is_alphabetic ( & self ) -> bool ;
249
+ fn is_XID_start ( & self ) -> bool ;
250
+ fn is_XID_continue ( & self ) -> bool ;
251
+ fn is_lowercase ( & self ) -> bool ;
252
+ fn is_uppercase ( & self ) -> bool ;
253
+ fn is_whitespace ( & self ) -> bool ;
254
+ fn is_alphanumeric ( & self ) -> bool ;
255
+ fn is_digit ( & self ) -> bool ;
256
+ fn is_digit_radix ( & self , radix : uint ) -> bool ;
257
+ fn to_digit ( & self , radix : uint ) -> Option < uint > ;
258
+ fn from_digit ( num : uint , radix : uint ) -> Option < char > ;
259
+ fn escape_unicode ( & self ) -> ~str ;
260
+ fn escape_default ( & self ) -> ~str ;
261
+ fn len_utf8_bytes ( & self ) -> uint ;
262
+ }
263
+
264
+ impl Char for char {
265
+ fn is_alphabetic ( & self ) -> bool { is_alphabetic ( * self ) }
266
+
267
+ fn is_XID_start ( & self ) -> bool { is_XID_start ( * self ) }
268
+
269
+ fn is_XID_continue ( & self ) -> bool { is_XID_continue ( * self ) }
270
+
271
+ fn is_lowercase ( & self ) -> bool { is_lowercase ( * self ) }
272
+
273
+ fn is_uppercase ( & self ) -> bool { is_uppercase ( * self ) }
274
+
275
+ fn is_whitespace ( & self ) -> bool { is_whitespace ( * self ) }
276
+
277
+ fn is_alphanumeric ( & self ) -> bool { is_alphanumeric ( * self ) }
278
+
279
+ fn is_digit ( & self ) -> bool { is_digit ( * self ) }
280
+
281
+ fn is_digit_radix ( & self , radix : uint ) -> bool { is_digit_radix ( * self , radix) }
282
+
283
+ fn to_digit ( & self , radix : uint ) -> Option < uint > { to_digit ( * self , radix) }
284
+
285
+ fn from_digit ( num : uint , radix : uint ) -> Option < char > { from_digit ( num, radix) }
286
+
287
+ fn escape_unicode ( & self ) -> ~str { escape_unicode ( * self ) }
288
+
289
+ fn escape_default ( & self ) -> ~str { escape_default ( * self ) }
290
+
291
+ fn len_utf8_bytes ( & self ) -> uint { len_utf8_bytes ( * self ) }
292
+ }
293
+
247
294
#[ cfg( not( test) ) ]
248
295
impl Eq for char {
249
296
#[ inline( always) ]
@@ -266,84 +313,82 @@ impl Ord for char {
266
313
267
314
#[ test]
268
315
fn test_is_lowercase ( ) {
269
- assert ! ( is_lowercase ( 'a' ) ) ;
270
- assert ! ( is_lowercase ( 'ö' ) ) ;
271
- assert ! ( is_lowercase ( 'ß' ) ) ;
272
- assert ! ( !is_lowercase ( 'Ü' ) ) ;
273
- assert ! ( !is_lowercase ( 'P' ) ) ;
316
+ assert ! ( 'a' . is_lowercase ( ) ) ;
317
+ assert ! ( 'ö' . is_lowercase ( ) ) ;
318
+ assert ! ( 'ß' . is_lowercase ( ) ) ;
319
+ assert ! ( !'Ü' . is_lowercase ( ) ) ;
320
+ assert ! ( !'P' . is_lowercase ( ) ) ;
274
321
}
275
322
276
323
#[ test]
277
324
fn test_is_uppercase ( ) {
278
- assert ! ( !is_uppercase ( 'h' ) ) ;
279
- assert ! ( !is_uppercase ( 'ä' ) ) ;
280
- assert ! ( !is_uppercase ( 'ß' ) ) ;
281
- assert ! ( is_uppercase ( 'Ö' ) ) ;
282
- assert ! ( is_uppercase ( 'T' ) ) ;
325
+ assert ! ( !'h' . is_uppercase ( ) ) ;
326
+ assert ! ( !'ä' . is_uppercase ( ) ) ;
327
+ assert ! ( !'ß' . is_uppercase ( ) ) ;
328
+ assert ! ( 'Ö' . is_uppercase ( ) ) ;
329
+ assert ! ( 'T' . is_uppercase ( ) ) ;
283
330
}
284
331
285
332
#[ test]
286
333
fn test_is_whitespace ( ) {
287
- assert ! ( is_whitespace( ' ' ) ) ;
288
- assert ! ( is_whitespace( '\u2007' ) ) ;
289
- assert ! ( is_whitespace( '\t' ) ) ;
290
- assert ! ( is_whitespace( '\n' ) ) ;
291
-
292
- assert ! ( !is_whitespace( 'a' ) ) ;
293
- assert ! ( !is_whitespace( '_' ) ) ;
294
- assert ! ( !is_whitespace( '\u0000' ) ) ;
334
+ assert ! ( ' ' . is_whitespace( ) ) ;
335
+ assert ! ( '\u2007' . is_whitespace( ) ) ;
336
+ assert ! ( '\t' . is_whitespace( ) ) ;
337
+ assert ! ( '\n' . is_whitespace( ) ) ;
338
+ assert ! ( !'a' . is_whitespace( ) ) ;
339
+ assert ! ( !'_' . is_whitespace( ) ) ;
340
+ assert ! ( !'\u0000' . is_whitespace( ) ) ;
295
341
}
296
342
297
343
#[ test]
298
344
fn test_to_digit ( ) {
299
- assert_eq ! ( to_digit( '0' , 10 u) , Some ( 0 u) ) ;
300
- assert_eq ! ( to_digit( '1' , 2 u) , Some ( 1 u) ) ;
301
- assert_eq ! ( to_digit( '2' , 3 u) , Some ( 2 u) ) ;
302
- assert_eq ! ( to_digit( '9' , 10 u) , Some ( 9 u) ) ;
303
- assert_eq ! ( to_digit( 'a' , 16 u) , Some ( 10 u) ) ;
304
- assert_eq ! ( to_digit( 'A' , 16 u) , Some ( 10 u) ) ;
305
- assert_eq ! ( to_digit( 'b' , 16 u) , Some ( 11 u) ) ;
306
- assert_eq ! ( to_digit( 'B' , 16 u) , Some ( 11 u) ) ;
307
- assert_eq ! ( to_digit( 'z' , 36 u) , Some ( 35 u) ) ;
308
- assert_eq ! ( to_digit( 'Z' , 36 u) , Some ( 35 u) ) ;
309
-
310
- assert ! ( to_digit( ' ' , 10 u) . is_none( ) ) ;
311
- assert ! ( to_digit( '$' , 36 u) . is_none( ) ) ;
345
+ assert_eq ! ( '0' . to_digit( 10 u) , Some ( 0 u) ) ;
346
+ assert_eq ! ( '1' . to_digit( 2 u) , Some ( 1 u) ) ;
347
+ assert_eq ! ( '2' . to_digit( 3 u) , Some ( 2 u) ) ;
348
+ assert_eq ! ( '9' . to_digit( 10 u) , Some ( 9 u) ) ;
349
+ assert_eq ! ( 'a' . to_digit( 16 u) , Some ( 10 u) ) ;
350
+ assert_eq ! ( 'A' . to_digit( 16 u) , Some ( 10 u) ) ;
351
+ assert_eq ! ( 'b' . to_digit( 16 u) , Some ( 11 u) ) ;
352
+ assert_eq ! ( 'B' . to_digit( 16 u) , Some ( 11 u) ) ;
353
+ assert_eq ! ( 'z' . to_digit( 36 u) , Some ( 35 u) ) ;
354
+ assert_eq ! ( 'Z' . to_digit( 36 u) , Some ( 35 u) ) ;
355
+ assert_eq ! ( ' ' . to_digit( 10 u) , None ) ;
356
+ assert_eq ! ( '$' . to_digit( 36 u) , None ) ;
312
357
}
313
358
314
359
#[ test]
315
360
fn test_is_digit ( ) {
316
- assert ! ( is_digit ( '2' ) ) ;
317
- assert ! ( is_digit ( '7' ) ) ;
318
- assert ! ( ! is_digit ( 'c' ) ) ;
319
- assert ! ( ! is_digit ( 'i' ) ) ;
320
- assert ! ( ! is_digit ( 'z' ) ) ;
321
- assert ! ( ! is_digit ( 'Q' ) ) ;
361
+ assert ! ( '2' . is_digit ( ) ) ;
362
+ assert ! ( '7' . is_digit ( ) ) ;
363
+ assert ! ( !'c' . is_digit ( ) ) ;
364
+ assert ! ( !'i' . is_digit ( ) ) ;
365
+ assert ! ( !'z' . is_digit ( ) ) ;
366
+ assert ! ( !'Q' . is_digit ( ) ) ;
322
367
}
323
368
324
369
#[ test]
325
370
fn test_escape_default ( ) {
326
- assert_eq ! ( escape_default ( '\n' ) , ~"\\ n");
327
- assert_eq!(escape_default( '\r '), ~" \\ r");
328
- assert_eq!(escape_default( '\''), ~" \\ ' ");
329
- assert_eq!(escape_default( '" ' ) , ~"\\ \" ") ;
330
- assert_eq ! ( escape_default ( ' ' ) , ~" ");
331
- assert_eq!(escape_default( 'a'), ~" a");
332
- assert_eq!(escape_default( '~'), ~" ~") ;
333
- assert_eq ! ( escape_default ( '\x00' ) , ~"\\ x00");
334
- assert_eq!(escape_default( '\x1f '), ~" \\ x1f");
335
- assert_eq!(escape_default( '\x7f '), ~" \\ x7f");
336
- assert_eq!(escape_default( '\xff '), ~" \\ xff");
337
- assert_eq!(escape_default( '\u011b '), ~" \\ u011b");
338
- assert_eq!(escape_default( '\U 0001d4b6'), ~" \\ U0001d4b6 ");
371
+ assert_eq ! ( '\n' . escape_default ( ) , ~"\\ n");
372
+ assert_eq!('\r '.escape_default( ), ~" \\ r");
373
+ assert_eq!('\''.escape_default( ), ~" \\ ' ");
374
+ assert_eq!('" ' . escape_default ( ) , ~"\\ \" ") ;
375
+ assert_eq ! ( ' ' . escape_default ( ) , ~" ");
376
+ assert_eq!('a'.escape_default( ), ~" a");
377
+ assert_eq!('~'.escape_default( ), ~" ~") ;
378
+ assert_eq ! ( '\x00' . escape_default ( ) , ~"\\ x00");
379
+ assert_eq!('\x1f '.escape_default( ), ~" \\ x1f");
380
+ assert_eq!('\x7f '.escape_default( ), ~" \\ x7f");
381
+ assert_eq!('\xff '.escape_default( ), ~" \\ xff");
382
+ assert_eq!('\u011b '.escape_default( ), ~" \\ u011b");
383
+ assert_eq!('\U 0001d4b6'.escape_default( ), ~" \\ U0001d4b6 ");
339
384
}
340
385
341
386
#[test]
342
387
fn test_escape_unicode() {
343
- assert_eq!(escape_unicode( '\x00 '), ~" \\ x00");
344
- assert_eq!(escape_unicode( '\n '), ~" \\ x0a");
345
- assert_eq!(escape_unicode( ' '), ~" \\ x20");
346
- assert_eq!(escape_unicode( 'a'), ~" \\ x61");
347
- assert_eq!(escape_unicode( '\u011b '), ~" \\ u011b");
348
- assert_eq!(escape_unicode( '\U 0001d4b6'), ~"\\ U0001d4b6" ) ;
388
+ assert_eq!('\x00 '.escape_unicode( ), ~" \\ x00");
389
+ assert_eq!('\n '.escape_unicode( ), ~" \\ x0a");
390
+ assert_eq!(' '.escape_unicode( ), ~" \\ x20");
391
+ assert_eq!('a'.escape_unicode( ), ~" \\ x61");
392
+ assert_eq!('\u011b '.escape_unicode( ), ~" \\ u011b");
393
+ assert_eq!('\U 0001d4b6'.escape_unicode( ), ~"\\ U0001d4b6" ) ;
349
394
}
0 commit comments