TEST(RingZZmod2, create) { Ring* R = Z_mod::create(2); EXPECT_TRUE(R != 0); EXPECT_TRUE(dynamic_cast<const Z_mod*>(R) != 0); EXPECT_EQ(R->coefficient_type(), Ring::COEFF_BASIC); EXPECT_FALSE(R->is_ZZ()); EXPECT_EQ(ringName(*R), "ZZ/2"); }
TEST(RingQQ, create) { Ring *R = globalQQ; EXPECT_TRUE(R != 0); EXPECT_TRUE(dynamic_cast< const Z_mod * >(R) == 0); EXPECT_TRUE(dynamic_cast< const QQ * >(R) != 0); EXPECT_EQ(R->coefficient_type(), Ring::COEFF_QQ); EXPECT_FALSE(R->is_ZZ()); EXPECT_EQ(ringName(*R), "QQ"); }
TEST(RingCCC, create) { Ring *R = CCC::create(100); EXPECT_TRUE(R != 0); EXPECT_TRUE(dynamic_cast<const Z_mod *>(R) == 0); EXPECT_TRUE(dynamic_cast<const CCC *>(R) != 0); EXPECT_FALSE(R->is_ZZ()); EXPECT_TRUE(R->is_CCC()); EXPECT_EQ(ringName(*R), "CCC_100"); }
TEST(RingRRR, create) { Ring *R = RRR::create(100); EXPECT_TRUE(R != 0); EXPECT_TRUE(dynamic_cast< const Z_mod * >(R) == 0); EXPECT_TRUE(dynamic_cast< const RRR * >(R) != 0); EXPECT_FALSE(R->is_ZZ()); EXPECT_TRUE(R->is_RRR()); EXPECT_EQ(ringName(*R), "RRR_100"); }
TEST(ARingZZpFlint, create) { M2::ARingZZpFlint R(101); EXPECT_EQ(ringName(R), "AZZFlint/101"); testSomeMore(R); M2::ARingZZpFlint::ElementType a; R.init(a); R.set_from_long(a, 99); R.set_from_long(a, 101); R.set_from_long(a, 103); R.clear(a); }
TEST(ARingQQGMP, create) { M2::ARingQQGMP R; M2::ARingQQGMP::ElementType a; buffer o; ARingElementGenerator<M2::ARingQQGMP> gen(R); R.init(a); gen.nextElement(a); EXPECT_EQ(ringName(R), "QQGMP"); EXPECT_EQ(R.cardinality(), static_cast<size_t>(-1)); EXPECT_EQ(R.characteristic(), 0); R.clear(a); }
TEST(ARingZZpFFPACK, create) { M2::ARingZZpFFPACK R(101); EXPECT_EQ(ringName(R), "ZZpFPACK(101,1)"); testSomeMore(R); std::cout << "max modulus for ffpack zzp: " << M2::ARingZZpFFPACK::getMaxModulus() << std::endl; M2::ARingZZpFFPACK::ElementType a; R.init(a); R.set_from_long(a, 99); R.set_from_long(a, 101); R.set_from_long(a, 103); R.clear(a); }
TEST(RingTower, create) { std::vector<std::string> vars = {"a", "b"}; M2_ArrayString varnames = toM2ArrayString(vars); const Tower* R = Tower::create(101, varnames); EXPECT_TRUE(R != 0); EXPECT_EQ(ringName(*R), "Tower[ZZ/101[a,b]]"); EXPECT_EQ(R->n_vars(), 2); for (int i=1; i<1; i++) { ring_elem f = R->random(); buffer o; o << "f = "; R->elem_text_out(o,f); std::cout << o.str() << std::endl; } }
TEST(ARingZZp, create) { M2::ARingZZp R(101); M2::ARingZZp::ElementType a; buffer o; ARingElementGenerator<M2::ARingZZp> gen(R); R.init(a); gen.nextElement(a); EXPECT_EQ(ringName(R), "AZZ/101"); EXPECT_EQ(R.cardinality(), 101); EXPECT_EQ(R.characteristic(), 101); // Now check what the generator is, as an integer R.init(a); R.set_var(a, 0); R.elem_text_out(o, a, true, true, false); std::cout << "generator is " << o.str() << std::endl; R.clear(a); }
TEST(ARingQQGMP, display) { M2::ARingQQGMP R; M2::ARingQQGMP::ElementType a, b; buffer o; ARingElementGenerator<M2::ARingQQGMP> gen(R); R.init(a); R.init(b); gen.nextElement(a); gen.nextElement(b); R.divide(a,a,b); R.elem_text_out(o, a, true, false, false); EXPECT_TRUE(strcmp(o.str(), "24/23") == 0); std::cout << "a = ." << o.str() << "." << std::endl; EXPECT_EQ(ringName(R), "QQGMP"); EXPECT_EQ(R.cardinality(), static_cast<size_t>(-1)); EXPECT_EQ(R.characteristic(), 0); R.clear(a); }
TEST(ARingGFGivaroGivaro, create) { M2::ARingGFGivaro R(5,3); EXPECT_EQ(ringName(R), "GF(5,3,Givaro)"); EXPECT_EQ(R.cardinality(), 125); EXPECT_EQ(R.characteristic(), 5); M2_arrayint gen_modpoly = R.getModPolynomialCoeffs(); std::cout << "minimal polynomial = "; dintarray(gen_modpoly); std::cout << std::endl; M2_arrayint gen_coeffs = R.getGeneratorCoeffs(); std::cout << "generator polynomial = "; dintarray(gen_coeffs); std::cout << std::endl; // Check what values integers go to M2::ARingGFGivaro::ElementType a; R.init(a); for (int i=-5; i<R.characteristic(); i++) { R.set_from_long(a, i); M2_arrayint coeffs = R.fieldElementToM2Array(a); if (i >= 0) EXPECT_EQ(coeffs->array[0], i); EXPECT_EQ(coeffs->len, 3); for (int j=1; j<3; j++) EXPECT_EQ(coeffs->array[j], 0); std::cout << i << " = "; dintarray(coeffs); std::cout << std::endl; } R.clear(a); testSomeMore(R); }
TEST(ARingRRR, create) { M2::ARingRRR R(100); EXPECT_EQ(ringName(R), "ARRR_100"); EXPECT_EQ(R.characteristic(), 0); }
TEST(ARingCC, create) { M2::ARingCC C; EXPECT_EQ(ringName(C), "ACC_53"); EXPECT_EQ(C.characteristic(), 0); }