Skip to content

Commit 66ecbda

Browse files
committed
Add tests
1 parent 2ef4970 commit 66ecbda

File tree

1 file changed

+272
-1
lines changed
  • src/libraries/System.Runtime.Numerics/tests/BigInteger

1 file changed

+272
-1
lines changed

src/libraries/System.Runtime.Numerics/tests/BigInteger/Rotate.cs

Lines changed: 272 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4-
using System.Collections.Generic;
4+
using System.Globalization;
55
using Xunit;
66

77
namespace System.Numerics.Tests
@@ -307,6 +307,142 @@ public class RotateLeftTest : RotateTestBase
307307
{
308308
public override string opstring => "bRotateLeft";
309309

310+
311+
public static TheoryData<BigInteger, int, BigInteger> NegativeNumber_TestData = new TheoryData<BigInteger, int, BigInteger>
312+
{
313+
314+
{
315+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0000)),
316+
1,
317+
new BigInteger(unchecked((long)0xFFFF_FFFE_0000_0001))
318+
},
319+
{
320+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0000)),
321+
2,
322+
new BigInteger(unchecked((long)0xFFFF_FFFC_0000_0003))
323+
},
324+
{
325+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0001)),
326+
1,
327+
new BigInteger(unchecked((long)0xFFFF_FFFE_0000_0003))
328+
},
329+
{
330+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0001)),
331+
2,
332+
new BigInteger(unchecked((long)0xFFFF_FFFC_0000_0007))
333+
},
334+
{
335+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0002)),
336+
1,
337+
new BigInteger(unchecked((long)0xFFFF_FFFE_0000_0005))
338+
},
339+
{
340+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0002)),
341+
2,
342+
new BigInteger(unchecked((long)0xFFFF_FFFC_0000_000B))
343+
},
344+
345+
{
346+
new BigInteger(unchecked((long)0x8000_0000_0000_0000)),
347+
1,
348+
new BigInteger(0x1)
349+
},
350+
{
351+
new BigInteger(unchecked((long)0x8000_0000_0000_0000)),
352+
2,
353+
new BigInteger(0x2)
354+
},
355+
{
356+
new BigInteger(unchecked((long)0x8000_0000_0000_0001)),
357+
1,
358+
new BigInteger(0x3)
359+
},
360+
{
361+
new BigInteger(unchecked((long)0x8000_0000_0000_0001)),
362+
2,
363+
new BigInteger(0x6)
364+
},
365+
{
366+
new BigInteger(unchecked((long)0x8000_0000_0000_0002)),
367+
1,
368+
new BigInteger(0x5)
369+
},
370+
{
371+
new BigInteger(unchecked((long)0x8000_0000_0000_0002)),
372+
2,
373+
new BigInteger(0xA)
374+
},
375+
376+
{
377+
BigInteger.Parse("8000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
378+
1,
379+
new BigInteger(0x1)
380+
},
381+
{
382+
BigInteger.Parse("8000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
383+
2,
384+
new BigInteger(0x2)
385+
},
386+
{
387+
BigInteger.Parse("8000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
388+
1,
389+
new BigInteger(0x3)
390+
},
391+
{
392+
BigInteger.Parse("8000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
393+
2,
394+
new BigInteger(0x6)
395+
},
396+
{
397+
BigInteger.Parse("8000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
398+
1,
399+
new BigInteger(0x5)
400+
},
401+
{
402+
BigInteger.Parse("8000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
403+
2,
404+
new BigInteger(0xA)
405+
},
406+
407+
{
408+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
409+
1,
410+
BigInteger.Parse("________E_0000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber)
411+
},
412+
{
413+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
414+
2,
415+
BigInteger.Parse("________C_0000_0000_0000_0000_0000_0003".Replace("_", ""), NumberStyles.HexNumber)
416+
},
417+
{
418+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
419+
1,
420+
BigInteger.Parse("________E_0000_0000_0000_0000_0000_0003".Replace("_", ""), NumberStyles.HexNumber)
421+
},
422+
{
423+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
424+
2,
425+
BigInteger.Parse("________C_0000_0000_0000_0000_0000_0007".Replace("_", ""), NumberStyles.HexNumber)
426+
},
427+
{
428+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
429+
1,
430+
BigInteger.Parse("________E_0000_0000_0000_0000_0000_0005".Replace("_", ""), NumberStyles.HexNumber)
431+
},
432+
{
433+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
434+
2,
435+
BigInteger.Parse("________C_0000_0000_0000_0000_0000_000B".Replace("_", ""), NumberStyles.HexNumber)
436+
},
437+
};
438+
439+
[Theory]
440+
[MemberData(nameof(NegativeNumber_TestData))]
441+
public void NegativeNumber(BigInteger input, int rotateAmount, BigInteger expected)
442+
{
443+
Assert.Equal(expected, BigInteger.RotateLeft(input, rotateAmount));
444+
}
445+
310446
[Fact]
311447
public void PowerOfTwo()
312448
{
@@ -334,6 +470,141 @@ public class RotateRightTest : RotateTestBase
334470
{
335471
public override string opstring => "bRotateRight";
336472

473+
public static TheoryData<BigInteger, int, BigInteger> NegativeNumber_TestData = new TheoryData<BigInteger, int, BigInteger>
474+
{
475+
476+
{
477+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0000)),
478+
1,
479+
new BigInteger(unchecked((long)0x7FFF_FFFF_8000_0000))
480+
},
481+
{
482+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0000)),
483+
2,
484+
new BigInteger(unchecked((long)0x3FFF_FFFF_C000_0000))
485+
},
486+
{
487+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0001)),
488+
1,
489+
new BigInteger(unchecked((int)0x8000_0000))
490+
},
491+
{
492+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0001)),
493+
2,
494+
new BigInteger(unchecked((long)0x7FFF_FFFF_C000_0000))
495+
},
496+
{
497+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0002)),
498+
1,
499+
new BigInteger(unchecked((long)0x7FFF_FFFF_8000_0001))
500+
},
501+
{
502+
new BigInteger(unchecked((long)0xFFFF_FFFF_0000_0002)),
503+
2,
504+
new BigInteger(unchecked((long)0xBFFF_FFFF_C000_0000))
505+
},
506+
507+
{
508+
new BigInteger(unchecked((long)0x8000_0000_0000_0000)),
509+
1,
510+
new BigInteger(unchecked((long)0x4000_0000_0000_0000))
511+
},
512+
{
513+
new BigInteger(unchecked((long)0x8000_0000_0000_0000)),
514+
2,
515+
new BigInteger(unchecked((long)0x2000_0000_0000_0000))
516+
},
517+
{
518+
new BigInteger(unchecked((long)0x8000_0000_0000_0001)),
519+
1,
520+
new BigInteger(unchecked((long)0xC000_0000_0000_0000))
521+
},
522+
{
523+
new BigInteger(unchecked((long)0x8000_0000_0000_0001)),
524+
2,
525+
new BigInteger(unchecked((long)0x6000_0000_0000_0000))
526+
},
527+
{
528+
new BigInteger(unchecked((long)0x8000_0000_0000_0002)),
529+
1,
530+
new BigInteger(unchecked((long)0x4000_0000_0000_0001))
531+
},
532+
{
533+
new BigInteger(unchecked((long)0x8000_0000_0000_0002)),
534+
2,
535+
new BigInteger(unchecked((long)0xA000_0000_0000_0000))
536+
},
537+
538+
{
539+
BigInteger.Parse("8000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
540+
1,
541+
BigInteger.Parse("4000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
542+
},
543+
{
544+
BigInteger.Parse("8000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
545+
2,
546+
BigInteger.Parse("2000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
547+
},
548+
{
549+
BigInteger.Parse("8000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
550+
1,
551+
BigInteger.Parse("C000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
552+
},
553+
{
554+
BigInteger.Parse("8000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
555+
2,
556+
BigInteger.Parse("6000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
557+
},
558+
{
559+
BigInteger.Parse("8000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
560+
1,
561+
BigInteger.Parse("4000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber)
562+
},
563+
{
564+
BigInteger.Parse("8000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
565+
2,
566+
BigInteger.Parse("A000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
567+
},
568+
569+
{
570+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
571+
1,
572+
BigInteger.Parse("7FFF_FFFF_8000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
573+
},
574+
{
575+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber),
576+
2,
577+
BigInteger.Parse("3FFF_FFFF_C000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
578+
},
579+
{
580+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
581+
1,
582+
BigInteger.Parse("__________8000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
583+
},
584+
{
585+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber),
586+
2,
587+
BigInteger.Parse("7FFF_FFFF_C000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
588+
},
589+
{
590+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
591+
1,
592+
BigInteger.Parse("7FFF_FFFF_8000_0000_0000_0000_0000_0001".Replace("_", ""), NumberStyles.HexNumber)
593+
},
594+
{
595+
BigInteger.Parse("________F_0000_0000_0000_0000_0000_0002".Replace("_", ""), NumberStyles.HexNumber),
596+
2,
597+
BigInteger.Parse("BFFF_FFFF_C000_0000_0000_0000_0000_0000".Replace("_", ""), NumberStyles.HexNumber)
598+
},
599+
};
600+
601+
[Theory]
602+
[MemberData(nameof(NegativeNumber_TestData))]
603+
public void NegativeNumber(BigInteger input, int rotateAmount, BigInteger expected)
604+
{
605+
Assert.Equal(expected, BigInteger.RotateRight(input, rotateAmount));
606+
}
607+
337608
[Fact]
338609
public void PowerOfTwo()
339610
{

0 commit comments

Comments
 (0)