403 unsigned int nbok = 0;
410 Matrix M = { 1, 2, 3, 4, 5, 7, 6, 8, 9 };
414 trace.
info() <<
"d=" << d <<
" db=" << db <<
"\n";
415 nbok += ( d == 7 ) ? 1 : 0;
417 nbok += ( db == 7 ) ? 1 : 0;
423 Matrix M = { 1, 2, 3, -4, 13, 4, 5, 7, 6, 8, 17, 9, 21, 12, -5, 11 };
429 trace.
info() <<
"d=" << d <<
" db=" << db <<
" dbv=" << dbv <<
"\n";
430 nbok += ( d == -12260 ) ? 1 : 0;
432 nbok += ( db == -12260 ) ? 1 : 0;
434 nbok += ( dbv == -12260 ) ? 1 : 0;
438 std::vector<int> V = { 1, 2, 3, -4, 13, 4, 5, 7, 6, 8, 17, 9, 21, 12, -5, 11 };
443 nbok += ( db == -12260 ) ? 1 : 0;
448 Matrix M = { 1311, 1, 2, 3, -4,
452 123,-39,411,630,23 };
459 trace.
info() <<
"d=" << d <<
" (i64)db=" << db <<
" (big)db=" << cdb <<
"\n";
462 nbok += ( int(d) != (-171492636038LL % 2147483648LL ) ) ? 1 : 0;
464 nbok += ( db != -171492636038LL ) ? 1 : 0;
466 nbok += ( cdb == -171492636038LL ) ? 1 : 0;
472 Matrix M = { 1.5, 2.2, 3.1, -4.6, 13.3, 4.2, 5.7, 7.3, 6.4, 8.0, 17.9, 9.3, 21.2, 12.2, -5.1, 11.8 };
476 trace.
info() <<
"d=" << d <<
" db=" << db <<
"\n";
477 nbok += ( std::fabs( d - db ) < 1e-10 ) ? 1 : 0;
481 std::cout <<
"(" << nbok <<
"/" << nb <<
")\n";
499 unsigned int nbok = 0;
505 std::vector< std::vector< Integer > >
B = {
512 std::cout <<
"Init base: \n" <<
B
513 <<
"\nLLL base: delta=0.75\n" << L1 <<
"\n"
514 <<
"\nLLL base: delta=0.99\n" << L2 <<
"\n";
516 std::vector< std::vector< Integer > >
R = { {-12,3,-7}, {32,-17,-49}, {-7,-20,0} };
517 nbok += L1 ==
R ? 1 : 0;
519 nbok += L2 ==
R ? 1 : 0;
521 std::cout <<
"(" << nbok <<
"/" << nb <<
") " << (nbok == nb ?
"PASSED\n" :
"ERROR\n");
524 std::vector< std::vector< Integer > >
B = {
531 std::cout <<
"Init base: \n" <<
B
532 <<
"\nLLL base: delta=0.75\n" << L1 <<
"\n"
533 <<
"\nLLL base: delta=0.99\n" << L2 <<
"\n";
535 std::vector< std::vector< Integer > >
R1 = {
540 std::vector< std::vector< Integer > > R2 = {
545 nbok += L1 ==
R1 ? 1 : 0;
547 nbok += L2 == R2 ? 1 : 0;
549 std::cout <<
"(" << nbok <<
"/" << nb <<
") " << (nbok == nb ?
"PASSED\n" :
"ERROR\n");
552 std::vector< std::vector< Integer > >
B = {
553 {16,16,11,13,31,25,21, 9},
554 {31, 3, 2,18,11,31,30, 2},
555 { 4,25,11,18, 8,20,13,10},
556 {16,21, 9, 2,10,23, 7,27},
557 {28,12,26, 1, 2,18, 4,19}
561 std::cout <<
"Init base: \n" <<
B
562 <<
"\nLLL base: delta=0.75\n" << L1 <<
"\n"
563 <<
"\nLLL base: delta=0.99\n" << L2 <<
"\n";
565 std::vector< std::vector< Integer > >
R1 = {
566 { 15,-13, -9, 5,-20, 6, 9, -7},
567 {-12, 9, 0, 5,-23, -5, -8, 1},
568 { 12, -4, -2,-16, 2, 3, -6, 17},
569 { 12, -9, 17, -1, -8, -5, -3, -8},
570 { 4, 25, 11, 18, 8, 20, 13, 10}
572 std::vector< std::vector< Integer > > R2 = {
573 { 12, -9, 17, -1, -8, -5, -3, -8},
574 { 12, -4, -2,-16, 2, 3, -6, 17},
575 {-12, 9, 0, 5,-23, -5, -8, 1},
576 { 15,-13, -9, 5,-20, 6, 9, -7},
577 { 4, 25, 11, 18, 8, 20, 13, 10}
579 nbok += L1 ==
R1 ? 1 : 0;
581 nbok += L2 == R2 ? 1 : 0;
583 std::cout <<
"(" << nbok <<
"/" << nb <<
") " << (nbok == nb ?
"PASSED\n" :
"ERROR\n");
587 std::vector< std::vector< Integer > >
B = {
588 { -3, 10, 47, 61, -53, -126, 713, 601,-1476, 1569},
589 { 2, -7, -33, -43, 37, 89, -502, -425, 1047,-1103},
590 { -3, 11, 53, 69, -59, -142, 800, 677,-1663, 1764},
591 { 1, -9, -48, -63, 52, 130, -727, -623, 1543,-1604},
592 { -2, 9, 48, 63, -49, -124, 680, 583,-1409, 1533},
593 { 5, -25, -118, -163, 113, 334,-1761,-1595, 4030,-3838},
594 { -3, 17, 85, 118, -84, -245, 1297, 1173,-2974, 2824},
595 { 5, -24, -119, -156, 126, 321,-1782,-1534, 3799,-3921},
596 { 2, -10, -44, -65, 42, 137, -699, -659, 1713,-1489},
597 { 1, -5, -23, -27, 33, 64, -405, -315, 784, -868}
603 std::cout <<
"Init base: \n" <<
B
604 <<
"\nLLL base: delta=0.99\n" << L2 <<
"\n"
605 <<
"det(B)=" << d <<
" det(L)=" << d2 <<
"\n";
606 nbok += d == 1 ? 1 : 0;
608 nbok += d2 == 1 ? 1 : 0;
610 std::cout <<
"(" << nbok <<
"/" << nb <<
") "
611 <<
"When input matrix is unimodular, output matrix L is unimodular: "
612 << (nbok == nb ?
"PASSED\n" :
"ERROR\n");
613 for (
auto i = 0; i <
B.size(); i++ )
618 std::cout <<
"(" << nbok <<
"/" << nb <<
") "
619 <<
"The output matrix is then canonic: "
620 << (nbok == nb ?
"PASSED\n" :
"ERROR\n");
623 std::cout <<
"Shorten base: \n" <<
B <<
"#nb shortening=" << nbs <<
"\n";