//testuj odwrotnosc modulo void Tester::autotest_inverse(int len){ Large one = Large::Set("1", base, in_base); Large zero = Large::Set("0", base, in_base); TesterRational tr = TesterRational(); int i; Large a; Large mod; Large inv; srand( (unsigned)time(NULL) ); for (i = 0; i < TIMES; i++) { a = Large::Set(tr.randomString(len), base, in_base); mod = Large::Set(tr.randomString(len), base, in_base); //jeœli a jest wiêksza ni¿ mod to nie ma sensu szukaæ if(a > mod){ i--; continue; } inv = a.inverseMod(mod); Large result = Large(); (a * inv).divide(mod, result); //wynik jest b³êdny gdy reszta nie jest równa jeden i inv nie jest zerem(znaczy to ze nie ma odwrotnosci) if (result.compareAbsolute(one)!=0 && inv.compareAbsolute(zero)!=0) { cout << " auto_Inv:Error " << endl; cout << " a " << a.toString() << " inv " << inv.toString() << " mod " << mod.toString() << endl;; } cout << "." ; } cout << "k" << endl; }
main() //draws some circles with text { int graphdriver = DETECT, graphmode; initgraph(&graphdriver, &graphmode, "..\\bgi"); MCircle Small(250, 100, 25, SANS_SERIF_FONT, "You"); Small.Show(); MCircle Medium(250, 150, 100, TRIPLEX_FONT, "World"); Medium.Show(); MCircle Large(250, 250, 225, GOTHIC_FONT, "Universe"); Large.Show(); getch(); closegraph(); return 0; }
//testuj resztê zwracan¹ przez metode divide void Tester::test_rest(){ //test0 Large test1 = Large::Set("1004", base, in_base); Large test2 = Large::Set("24c", base, in_base); Large rest = Large(base); test1.divide(test2, rest); Large expected = Large::Set("23c", base, in_base); if (rest != expected){ cout << "Test_Rest0: " << test1.toString() << " " << test2.toString() << endl; } //test1 test1 = Large::Set("1234", base, in_base); test2 = Large::Set("23c", base, in_base); rest = Large(base); test1.divide(test2, rest); expected = Large::Set("54", base, in_base); if (rest != expected){ cout << "Test_Rest1: " << test1.toString() << " " << test2.toString() << endl; } //test2 test1 = Large::Set("4321", base, in_base); test2 = Large::Set("1234", base, in_base); rest = Large(base); test1.divide(test2, rest); expected = Large::Set("c85", base, in_base); if (rest != expected){ cout << "Test_Rest2: " << test1.toString() << " " << test2.toString() << endl; } //test3 test1 = Large::Set("43210", base, in_base); test2 = Large::Set("12", base, in_base); rest = Large(base); test1.divide(test2, rest); expected = Large::Set("a", base, in_base); if (rest != expected){ cout << "Test_Rest3: " << test1.toString() << " " << test2.toString() << endl; } //test4 test1 = Large::Set("456", base, in_base); test2 = Large::Set("400", base, in_base); rest = Large(base); test1.divide(test2, rest); expected = Large::Set("56", base, in_base); if (rest != expected){ cout << "Test_Rest4: " << test1.toString() << " " << test2.toString() << endl; } //test4 test1 = Large::Set("356", base, in_base); test2 = Large::Set("400", base, in_base); rest = Large(base); test1.divide(test2, rest); expected = Large::Set("356", base, in_base); if (rest != expected){ cout << "Test_Rest5: " << test1.toString() << " " << test2.toString() << endl; } }
static VOID TestInterlockedFunctional(VOID) { NTSTATUS Status; PKSPIN_LOCK pSpinLock = &SpinLock; PROCESSOR_STATE OldState, NewState; /* on x86, most of these are supported intrinsically and don't need a spinlock! */ #if defined _M_IX86 || defined _M_AMD64 pSpinLock = NULL; #endif /* CompareExchange */ /* macro version */ CheckInterlockedCmpXchg(InterlockedCompareExchange, LONG, "%ld", 5, 6, 8, 5L, 5L); CheckInterlockedCmpXchg(InterlockedCompareExchange, LONG, "%ld", 5, 5, 9, 9L, 5L); /* these only exist as macros on x86 */ CheckInterlockedCmpXchg(InterlockedCompareExchangeAcquire, LONG, "%ld", 16, 9, 12, 16L, 16L); CheckInterlockedCmpXchg(InterlockedCompareExchangeAcquire, LONG, "%ld", 16, 16, 4, 4L, 16L); CheckInterlockedCmpXchg(InterlockedCompareExchangeRelease, LONG, "%ld", 27, 123, 38, 27L, 27L); CheckInterlockedCmpXchg(InterlockedCompareExchangeRelease, LONG, "%ld", 27, 27, 39, 39L, 27L); /* exported function */ #undef InterlockedCompareExchange #ifdef _M_IX86 CheckInterlockedCmpXchg(InterlockedCompareExchange, LONG, "%ld", 5, 6, 8, 5L, 5L); CheckInterlockedCmpXchg(InterlockedCompareExchange, LONG, "%ld", 5, 5, 9, 9L, 5L); #endif /* only exists as a macro */ CheckInterlockedCmpXchg(InterlockedCompareExchangePointer, PVOID, "%p", (PVOID)117, (PVOID)711, (PVOID)12, (PVOID)117, (PVOID)117); CheckInterlockedCmpXchg(InterlockedCompareExchangePointer, PVOID, "%p", (PVOID)117, (PVOID)117, (PVOID)228, (PVOID)228, (PVOID)117); /* macro version */ CheckInterlockedCmpXchgI(ExInterlockedCompareExchange64, LONGLONG, "%I64d", 17, 4LL, 20LL, 17LL, 17LL, pSpinLock); CheckInterlockedCmpXchgI(ExInterlockedCompareExchange64, LONGLONG, "%I64d", 17, 17LL, 21LL, 21LL, 17LL, pSpinLock); #ifdef _M_IX86 /* exported function */ CheckInterlockedCmpXchgI((ExInterlockedCompareExchange64), LONGLONG, "%I64d", 17, 4LL, 20LL, 17LL, 17LL, pSpinLock); CheckInterlockedCmpXchgI((ExInterlockedCompareExchange64), LONGLONG, "%I64d", 17, 17LL, 21LL, 21LL, 17LL, pSpinLock); /* fastcall version */ CheckInterlockedCmpXchgI(ExfInterlockedCompareExchange64, LONGLONG, "%I64d", 17, 4LL, 20LL, 17LL, 17LL); CheckInterlockedCmpXchgI(ExfInterlockedCompareExchange64, LONGLONG, "%I64d", 17, 17LL, 21LL, 21LL, 17LL); #endif /* Exchange */ CheckInterlockedOp(InterlockedExchange, LONG, "%ld", 5, 8, 8L, 5L); CheckInterlockedOpNoArg(InterlockedExchangePointer, PVOID, "%p", (PVOID)700, (PVOID)93, (PVOID)700, (PVOID)93); #undef InterlockedExchange #ifdef _M_IX86 CheckInterlockedOp(InterlockedExchange, LONG, "%ld", 5, 8, 8L, 5L); CheckInterlockedOp(ExInterlockedExchangeUlong, ULONG, "%lu", 212, 121, 121LU, 212LU, pSpinLock); CheckInterlockedOp((ExInterlockedExchangeUlong), ULONG, "%lu", 212, 121, 121LU, 212LU, pSpinLock); CheckInterlockedOp(Exi386InterlockedExchangeUlong, ULONG, "%lu", 212, 121, 121LU, 212LU); CheckInterlockedOp(Exfi386InterlockedExchangeUlong, ULONG, "%lu", 212, 121, 121LU, 212LU); #endif /* ExchangeAdd */ /* TODO: ExInterlockedExchangeAddLargeInteger? */ CheckInterlockedOp(InterlockedExchangeAdd, LONG, "%ld", 312, 7, 319L, 312L); #undef InterlockedExchangeAdd #ifdef _M_IX86 CheckInterlockedOp(InterlockedExchangeAdd, LONG, "%ld", 312, 7, 319L, 312L); #endif /* Add */ /* these DO need a valid spinlock even on x86 */ CheckInterlockedOpLarge(ExInterlockedAddLargeInteger, LARGE_INTEGER, "%I64d", Large(23), Large(7), 30LL, 23LL, &SpinLock); CheckInterlockedOpLargeNoRet(ExInterlockedAddLargeStatistic, LARGE_INTEGER, "%I64d", Large(15), 17LL, 32LL); CheckInterlockedOp(ExInterlockedAddUlong, ULONG, "%lu", 239, 44, 283LU, 239LU, &SpinLock); #undef ExInterlockedAddUlong CheckInterlockedOp(ExInterlockedAddUlong, ULONG, "%lu", 239, 44, 283LU, 239LU, &SpinLock); /* Increment */ CheckInterlockedOpNoArg(InterlockedIncrement, LONG, "%ld", 2341L, 2342L, 2342L); CheckInterlockedOpNoArg(InterlockedIncrement, LONG, "%ld", (LONG)MAXLONG, (LONG)MINLONG, (LONG)MINLONG); CheckInterlockedOpNoArg(InterlockedIncrementAcquire, LONG, "%ld", 2341L, 2342L, 2342L); CheckInterlockedOpNoArg(InterlockedIncrementRelease, LONG, "%ld", 2341L, 2342L, 2342L); #undef InterlockedIncrement #ifdef _M_IX86 CheckInterlockedOpNoArg(InterlockedIncrement, LONG, "%ld", 2341L, 2342L, 2342L); CheckInterlockedOpNoArg(InterlockedIncrement, LONG, "%ld", (LONG)MAXLONG, (LONG)MINLONG, (LONG)MINLONG); CheckInterlockedOpNoArg(ExInterlockedIncrementLong, LONG, "%ld", -2L, -1L, (LONG)ResultNegative, pSpinLock); CheckInterlockedOpNoArg(ExInterlockedIncrementLong, LONG, "%ld", -1L, 0L, (LONG)ResultZero, pSpinLock); CheckInterlockedOpNoArg(ExInterlockedIncrementLong, LONG, "%ld", 0L, 1L, (LONG)ResultPositive, pSpinLock); CheckInterlockedOpNoArg(ExInterlockedIncrementLong, LONG, "%ld", (LONG)MAXLONG, (LONG)MINLONG, (LONG)ResultNegative, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedIncrementLong), LONG, "%ld", -2L, -1L, (LONG)ResultNegative, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedIncrementLong), LONG, "%ld", -1L, 0L, (LONG)ResultZero, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedIncrementLong), LONG, "%ld", 0L, 1L, (LONG)ResultPositive, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedIncrementLong), LONG, "%ld", (LONG)MAXLONG, (LONG)MINLONG, (LONG)ResultNegative, pSpinLock); CheckInterlockedOpNoArg(Exi386InterlockedIncrementLong, LONG, "%ld", -2L, -1L, (LONG)ResultNegative); CheckInterlockedOpNoArg(Exi386InterlockedIncrementLong, LONG, "%ld", -1L, 0L, (LONG)ResultZero); CheckInterlockedOpNoArg(Exi386InterlockedIncrementLong, LONG, "%ld", 0L, 1L, (LONG)ResultPositive); CheckInterlockedOpNoArg(Exi386InterlockedIncrementLong, LONG, "%ld", (LONG)MAXLONG, (LONG)MINLONG, (LONG)ResultNegative); #endif /* Decrement */ CheckInterlockedOpNoArg(InterlockedDecrement, LONG, "%ld", 1745L, 1744L, 1744L); CheckInterlockedOpNoArg(InterlockedDecrement, LONG, "%ld", (LONG)MINLONG, (LONG)MAXLONG, (LONG)MAXLONG); CheckInterlockedOpNoArg(InterlockedDecrementAcquire, LONG, "%ld", 1745L, 1744L, 1744L); CheckInterlockedOpNoArg(InterlockedDecrementRelease, LONG, "%ld", 1745L, 1744L, 1744L); #undef InterlockedDecrement #ifdef _M_IX86 CheckInterlockedOpNoArg(InterlockedDecrement, LONG, "%ld", 1745L, 1744L, 1744L); CheckInterlockedOpNoArg(InterlockedDecrement, LONG, "%ld", (LONG)MINLONG, (LONG)MAXLONG, (LONG)MAXLONG); CheckInterlockedOpNoArg(ExInterlockedDecrementLong, LONG, "%ld", (LONG)MINLONG, (LONG)MAXLONG, (LONG)ResultPositive, pSpinLock); CheckInterlockedOpNoArg(ExInterlockedDecrementLong, LONG, "%ld", 0L, -1L, (LONG)ResultNegative, pSpinLock); CheckInterlockedOpNoArg(ExInterlockedDecrementLong, LONG, "%ld", 1L, 0L, (LONG)ResultZero, pSpinLock); CheckInterlockedOpNoArg(ExInterlockedDecrementLong, LONG, "%ld", 2L, 1L, (LONG)ResultPositive, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedDecrementLong), LONG, "%ld", (LONG)MINLONG, (LONG)MAXLONG, (LONG)ResultPositive, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedDecrementLong), LONG, "%ld", 0L, -1L, (LONG)ResultNegative, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedDecrementLong), LONG, "%ld", 1L, 0L, (LONG)ResultZero, pSpinLock); CheckInterlockedOpNoArg((ExInterlockedDecrementLong), LONG, "%ld", 2L, 1L, (LONG)ResultPositive, pSpinLock); CheckInterlockedOpNoArg(Exi386InterlockedDecrementLong, LONG, "%ld", (LONG)MINLONG, (LONG)MAXLONG, (LONG)ResultPositive); CheckInterlockedOpNoArg(Exi386InterlockedDecrementLong, LONG, "%ld", 0L, -1L, (LONG)ResultNegative); CheckInterlockedOpNoArg(Exi386InterlockedDecrementLong, LONG, "%ld", 1L, 0L, (LONG)ResultZero); CheckInterlockedOpNoArg(Exi386InterlockedDecrementLong, LONG, "%ld", 2L, 1L, (LONG)ResultPositive); #endif /* And, Or, Xor */ CheckInterlockedOp(InterlockedAnd, LONG, "0x%lx", 0x1234L, 0x1111L, 0x1010L, 0x1234L); CheckInterlockedOp(InterlockedOr, LONG, "0x%lx", 0x1234L, 0x1111L, 0x1335L, 0x1234L); CheckInterlockedOp(InterlockedXor, LONG, "0x%lx", 0x1234L, 0x1111L, 0x0325L, 0x1234L); #ifdef _WIN64 CheckInterlockedOp(InterlockedXor64, LONGLONG, "0x%I64x", 0x200001234LL, 0x100001111LL, 0x300000325LL, 0x200001234LL); #endif }