Macaulay2 Engine
Loading...
Searching...
No Matches
MonoidTest.cpp
Go to the documentation of this file.
1
30
31#include <gtest/gtest.h>
32
33#include <iostream>
34#include <memory>
35#include <vector>
36
37#include "ExponentVector.hpp"
38#include "monoid.hpp"
39
41
43
45{
46 int n = 3;
47 int a0[3] = {1, 2, 3}, b0[3] = {7, 5, 3}, c0[3], d0[3];
48 exponents_t a = static_cast<exponents_t>(a0), b = static_cast<exponents_t>(b0),
49 c = static_cast<exponents_t>(c0), d = static_cast<exponents_t>(d0);
50 exponents::copy(n, a, c);
51 EXPECT_EQ(exponents::equal(n, a, c), true);
52 EXPECT_EQ(exponents::equal(n, b, c), false);
53 EXPECT_EQ(exponents::simple_degree(n, a), 6);
54 exponents::one(n, c);
55 EXPECT_EQ(exponents::is_one(n, a), false);
56 EXPECT_EQ(exponents::is_one(n, c), true);
57 exponents::mult(n, a, a, c);
58 exponents::power(n, a, 2, d);
59 EXPECT_EQ(exponents::equal(n, c, d), true);
60 EXPECT_EQ(exponents::divides(n, a, b), true);
61 EXPECT_EQ(exponents::divides(n, b, a), false);
62 exponents::divide(n, c, a, d);
63 EXPECT_EQ(exponents::equal(n, a, d), true);
64 exponents::divide(n, a, c, d);
65 exponents::power(n, d, -1, d);
66 EXPECT_EQ(exponents::equal(n, a, d), true);
67 exponents::quotient(n, a, b, d);
68 EXPECT_EQ(exponents::is_one(n, d), true);
69 exponents::gcd(n, b, c, d);
70 EXPECT_TRUE(d0[0] == 2 && d0[1] == 4 && d0[2] == 3);
71 exponents::lcm(n, b, c, d);
72 EXPECT_TRUE(d0[0] == 7 && d0[1] == 5 && d0[2] == 6);
73 exponents::multpower(n, b, a, 2, d);
74 EXPECT_TRUE(d0[0] == 9 && d0[1] == 9 && d0[2] == 9);
75 EXPECT_EQ(exponents::lex_compare(n, a, b), LT);
76 EXPECT_EQ(exponents::lex_compare(n, b, a), GT);
77 EXPECT_EQ(exponents::lex_compare(n, a, a), EQ);
78 EXPECT_EQ(exponents::weight(n, a, std::vector<int> {3, 2, 1}), 10);
79 // TODO: improve mask and syz tests
80 EXPECT_EQ(exponents::mask(n, a), 7);
81 exponents::syz(n, a, b, c, d);
82 EXPECT_TRUE(c0[0] == 6 && c0[1] == 3 && c0[2] == 0);
83 EXPECT_TRUE(d0[0] == 0 && d0[1] == 0 && d0[2] == 0);
84}
exponents::Exponents exponents_t
Dense exponent-vector template [e_0, ..., e_{nvars-1}] for monomial operations.
TEST(ExponentVector, All)
static void syz(int nvars, ConstExponents a, ConstExponents b, Exponents c, Exponents d)
static Exponent weight(int nvars, ConstExponents a, const std::vector< Exponent > &wts)
static Exponent simple_degree(int nvars, ConstExponents a)
static void gcd(int nvars, ConstExponents a, ConstExponents b, Exponents result)
static void divide(int nvars, ConstExponents a, ConstExponents b, Exponents result)
static void one(int nvars, Exponents result)
static void mult(int nvars, ConstExponents a, ConstExponents b, Exponents result)
static bool equal(int nvars, ConstExponents a, ConstExponents b)
static void power(int nvars, ConstExponents a, const Exponent n, Exponents result)
static bool is_one(int nvars, ConstExponents a)
static void copy(int nvars, ConstExponents a, Exponents result)
static void multpower(int nvars, ConstExponents a, ConstExponents b, const Exponent n, Exponents result)
static void quotient(int nvars, ConstExponents a, ConstExponents b, Exponents result)
static int lex_compare(int nvars, ConstExponents a, ConstExponents b)
static void lcm(int nvars, ConstExponents a, ConstExponents b, Exponents result)
static bool divides(int nvars, ConstExponents a, ConstExponents b)
static HashExponent mask(int nvars, ConstExponents a)
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
const int EQ
Definition style.hpp:40
const int GT
Definition style.hpp:41
const int LT
Definition style.hpp:39