@@ -342,27 +342,43 @@ func TestRotateLeft(t *testing.T) {
342
342
if got8 != want8 {
343
343
t .Fatalf ("RotateLeft8(%#02x, %d) == %#02x; want %#02x" , x8 , k , got8 , want8 )
344
344
}
345
+ got8 = RotateLeft8 (want8 , - int (k ))
346
+ if got8 != x8 {
347
+ t .Fatalf ("RotateLeft8(%#02x, -%d) == %#02x; want %#02x" , want8 , k , got8 , x8 )
348
+ }
345
349
346
350
x16 := uint16 (m )
347
351
got16 := RotateLeft16 (x16 , int (k ))
348
352
want16 := x16 << (k & 0xf ) | x16 >> (16 - k & 0xf )
349
353
if got16 != want16 {
350
354
t .Fatalf ("RotateLeft16(%#04x, %d) == %#04x; want %#04x" , x16 , k , got16 , want16 )
351
355
}
356
+ got16 = RotateLeft16 (want16 , - int (k ))
357
+ if got16 != x16 {
358
+ t .Fatalf ("RotateLeft16(%#04x, -%d) == %#04x; want %#04x" , want16 , k , got16 , x16 )
359
+ }
352
360
353
361
x32 := uint32 (m )
354
362
got32 := RotateLeft32 (x32 , int (k ))
355
363
want32 := x32 << (k & 0x1f ) | x32 >> (32 - k & 0x1f )
356
364
if got32 != want32 {
357
365
t .Fatalf ("RotateLeft32(%#08x, %d) == %#08x; want %#08x" , x32 , k , got32 , want32 )
358
366
}
367
+ got32 = RotateLeft32 (want32 , - int (k ))
368
+ if got32 != x32 {
369
+ t .Fatalf ("RotateLeft32(%#08x, -%d) == %#08x; want %#08x" , want32 , k , got32 , x32 )
370
+ }
359
371
if UintSize == 32 {
360
372
x := uint (m )
361
373
got := RotateLeft (x , int (k ))
362
374
want := x << (k & 0x1f ) | x >> (32 - k & 0x1f )
363
375
if got != want {
364
376
t .Fatalf ("RotateLeft(%#08x, %d) == %#08x; want %#08x" , x , k , got , want )
365
377
}
378
+ got = RotateLeft (want , - int (k ))
379
+ if got != x {
380
+ t .Fatalf ("RotateLeft(%#08x, -%d) == %#08x; want %#08x" , want , k , got , x )
381
+ }
366
382
}
367
383
368
384
x64 := uint64 (m )
@@ -371,13 +387,21 @@ func TestRotateLeft(t *testing.T) {
371
387
if got64 != want64 {
372
388
t .Fatalf ("RotateLeft64(%#016x, %d) == %#016x; want %#016x" , x64 , k , got64 , want64 )
373
389
}
390
+ got64 = RotateLeft64 (want64 , - int (k ))
391
+ if got64 != x64 {
392
+ t .Fatalf ("RotateLeft64(%#016x, -%d) == %#016x; want %#016x" , want64 , k , got64 , x64 )
393
+ }
374
394
if UintSize == 64 {
375
395
x := uint (m )
376
396
got := RotateLeft (x , int (k ))
377
397
want := x << (k & 0x3f ) | x >> (64 - k & 0x3f )
378
398
if got != want {
379
399
t .Fatalf ("RotateLeft(%#016x, %d) == %#016x; want %#016x" , x , k , got , want )
380
400
}
401
+ got = RotateLeft (want , - int (k ))
402
+ if got != x {
403
+ t .Fatalf ("RotateLeft(%#08x, -%d) == %#08x; want %#08x" , want , k , got , x )
404
+ }
381
405
}
382
406
}
383
407
}
@@ -422,96 +446,6 @@ func BenchmarkRotateLeft64(b *testing.B) {
422
446
Output = int (s )
423
447
}
424
448
425
- func TestRotateRight (t * testing.T ) {
426
- var m uint64 = deBruijn64
427
-
428
- for k := uint (0 ); k < 128 ; k ++ {
429
- x8 := uint8 (m )
430
- got8 := RotateRight8 (x8 , int (k ))
431
- want8 := x8 >> (k & 0x7 ) | x8 << (8 - k & 0x7 )
432
- if got8 != want8 {
433
- t .Fatalf ("RotateRight8(%#02x, %d) == %#02x; want %#02x" , x8 , k , got8 , want8 )
434
- }
435
-
436
- x16 := uint16 (m )
437
- got16 := RotateRight16 (x16 , int (k ))
438
- want16 := x16 >> (k & 0xf ) | x16 << (16 - k & 0xf )
439
- if got16 != want16 {
440
- t .Fatalf ("RotateRight16(%#04x, %d) == %#04x; want %#04x" , x16 , k , got16 , want16 )
441
- }
442
-
443
- x32 := uint32 (m )
444
- got32 := RotateRight32 (x32 , int (k ))
445
- want32 := x32 >> (k & 0x1f ) | x32 << (32 - k & 0x1f )
446
- if got32 != want32 {
447
- t .Fatalf ("RotateRight32(%#08x, %d) == %#08x; want %#08x" , x32 , k , got32 , want32 )
448
- }
449
- if UintSize == 32 {
450
- x := uint (m )
451
- got := RotateRight (x , int (k ))
452
- want := x >> (k & 0x1f ) | x << (32 - k & 0x1f )
453
- if got != want {
454
- t .Fatalf ("RotateRight(%#08x, %d) == %#08x; want %#08x" , x , k , got , want )
455
- }
456
- }
457
-
458
- x64 := uint64 (m )
459
- got64 := RotateRight64 (x64 , int (k ))
460
- want64 := x64 >> (k & 0x3f ) | x64 << (64 - k & 0x3f )
461
- if got64 != want64 {
462
- t .Fatalf ("RotateRight64(%#016x, %d) == %#016x; want %#016x" , x64 , k , got64 , want64 )
463
- }
464
- if UintSize == 64 {
465
- x := uint (m )
466
- got := RotateRight (x , int (k ))
467
- want := x >> (k & 0x3f ) | x << (64 - k & 0x3f )
468
- if got != want {
469
- t .Fatalf ("RotateRight(%#016x, %d) == %#016x; want %#016x" , x , k , got , want )
470
- }
471
- }
472
- }
473
- }
474
-
475
- func BenchmarkRotateRight (b * testing.B ) {
476
- var s uint
477
- for i := 0 ; i < b .N ; i ++ {
478
- s += RotateRight (uint (Input ), i )
479
- }
480
- Output = int (s )
481
- }
482
-
483
- func BenchmarkRotateRight8 (b * testing.B ) {
484
- var s uint8
485
- for i := 0 ; i < b .N ; i ++ {
486
- s += RotateRight8 (uint8 (Input ), i )
487
- }
488
- Output = int (s )
489
- }
490
-
491
- func BenchmarkRotateRight16 (b * testing.B ) {
492
- var s uint16
493
- for i := 0 ; i < b .N ; i ++ {
494
- s += RotateRight16 (uint16 (Input ), i )
495
- }
496
- Output = int (s )
497
- }
498
-
499
- func BenchmarkRotateRight32 (b * testing.B ) {
500
- var s uint32
501
- for i := 0 ; i < b .N ; i ++ {
502
- s += RotateRight32 (uint32 (Input ), i )
503
- }
504
- Output = int (s )
505
- }
506
-
507
- func BenchmarkRotateRight64 (b * testing.B ) {
508
- var s uint64
509
- for i := 0 ; i < b .N ; i ++ {
510
- s += RotateRight64 (uint64 (Input ), i )
511
- }
512
- Output = int (s )
513
- }
514
-
515
449
func TestReverse (t * testing.T ) {
516
450
// test each bit
517
451
for i := uint (0 ); i < 64 ; i ++ {
0 commit comments