CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
257 lines
5.8 KiB
C++
257 lines
5.8 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
/// \file
|
|
/// This file contains the tests for the mlir::NonFloatComplex type.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/Support/Complex.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace mlir {
|
|
// Provide ostream operator so that tests pretty print NonFloatComplex values
|
|
template <typename T>
|
|
static std::ostream &operator<<(std::ostream &os, const NonFloatComplex<T> c) {
|
|
os << "(" << c.real() << "," << c.imag() << ")";
|
|
return os;
|
|
}
|
|
|
|
} // namespace mlir
|
|
|
|
// The majority of these tests just check that NonFloatComplex does exactly the
|
|
// same as std::complex<float>.
|
|
|
|
TEST(ComplexTest, Typedef) {
|
|
EXPECT_TRUE((std::is_same_v<mlir::Complex<float>, std::complex<float>>));
|
|
|
|
EXPECT_TRUE((std::is_same_v<mlir::Complex<int>, mlir::NonFloatComplex<int>>));
|
|
}
|
|
|
|
TEST(ComplexTest, DefaultConstructor) {
|
|
mlir::NonFloatComplex<float> mc;
|
|
std::complex<float> sc;
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, RealConstructor) {
|
|
mlir::NonFloatComplex<float> mc{10};
|
|
std::complex<float> sc{10};
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, MemberConstructor) {
|
|
mlir::NonFloatComplex<float> mc{10, 20};
|
|
std::complex<float> sc{10, 20};
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, ExplicitCopyConstructor) {
|
|
std::complex<double> sc{5, 10};
|
|
mlir::NonFloatComplex<float> mc{sc};
|
|
EXPECT_EQ(mc, sc);
|
|
|
|
// check the explicit constructors were used
|
|
EXPECT_FALSE((std::is_convertible_v<decltype(sc), decltype(mc)>));
|
|
}
|
|
|
|
TEST(ComplexTest, ImplicitCopyConstructor) {
|
|
std::complex<float> sc{};
|
|
mlir::NonFloatComplex<float> mc = sc;
|
|
EXPECT_EQ(mc, sc);
|
|
|
|
// check the implicit constructors were used
|
|
EXPECT_TRUE((std::is_convertible_v<decltype(sc), decltype(mc)>));
|
|
}
|
|
|
|
TEST(ComplexTest, RealAccessor) {
|
|
mlir::NonFloatComplex<float> mc{5};
|
|
std::complex<float> sc{5};
|
|
EXPECT_EQ(mc.real(), sc.real());
|
|
}
|
|
|
|
TEST(ComplexTest, RealSetter) {
|
|
mlir::NonFloatComplex<float> mc{5};
|
|
mc.real(7);
|
|
std::complex<float> sc{5};
|
|
sc.real(7);
|
|
EXPECT_EQ(mc.real(), sc.real());
|
|
}
|
|
|
|
TEST(ComplexTest, ImagAccessor) {
|
|
mlir::NonFloatComplex<int> mc{2, 5};
|
|
std::complex<float> sc{2, 5};
|
|
EXPECT_EQ(mc.imag(), sc.imag());
|
|
}
|
|
|
|
TEST(ComplexTest, ImagSetter) {
|
|
mlir::NonFloatComplex<int> mc{2, 5};
|
|
mc.imag(8);
|
|
std::complex<float> sc{2, 5};
|
|
sc.imag(8);
|
|
EXPECT_EQ(mc.imag(), sc.imag());
|
|
}
|
|
|
|
TEST(ComplexTest, CopyAssignment) {
|
|
mlir::NonFloatComplex<int> mc{2, 5};
|
|
mlir::NonFloatComplex<int> mc2 = mc;
|
|
|
|
EXPECT_EQ(mc, mc2);
|
|
}
|
|
|
|
TEST(ComplexTest, StdCopyAssignment) {
|
|
std::complex<float> sc{2, 5};
|
|
mlir::NonFloatComplex<float> mc = sc;
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, RealAssignment) {
|
|
std::complex<float> sc = 2.f;
|
|
mlir::NonFloatComplex<float> mc = 2.f;
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, PlusEqualsReal) {
|
|
mlir::NonFloatComplex<float> mc{2, 5};
|
|
mc += 7;
|
|
std::complex<float> sc{2, 5};
|
|
sc += 7;
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, MinusEqualsReal) {
|
|
mlir::NonFloatComplex<float> mc{3, 6};
|
|
mc -= 8;
|
|
std::complex<float> sc{3, 6};
|
|
sc -= 8;
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, TimesEqualsReal) {
|
|
mlir::NonFloatComplex<float> mc{1, 4};
|
|
mc *= 2;
|
|
std::complex<float> sc{1, 4};
|
|
sc *= 2;
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, DivideEqualsReal) {
|
|
mlir::NonFloatComplex<float> mc{1, 4};
|
|
mc /= 2;
|
|
std::complex<float> sc{1, 4};
|
|
sc /= 2;
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, AssignmentOp) {
|
|
mlir::NonFloatComplex<int> mc{2, 5};
|
|
mlir::NonFloatComplex<int> mc2 = mc;
|
|
|
|
EXPECT_EQ(mc, mc2);
|
|
}
|
|
|
|
TEST(ComplexTest, StdAssignmentOp) {
|
|
|
|
std::complex<float> sc{2, 5};
|
|
mlir::NonFloatComplex<float> mc = sc;
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
}
|
|
|
|
TEST(ComplexTest, AddOp) {
|
|
mlir::NonFloatComplex<float> mc1{2, 5};
|
|
mlir::NonFloatComplex<float> mc2{3, 7};
|
|
std::complex<float> sc1{2, 5};
|
|
std::complex<float> sc2{3, 7};
|
|
|
|
EXPECT_EQ(mc1 + mc2, sc1 + sc2);
|
|
EXPECT_EQ(mc1 + 5.f, sc1 + 5.f);
|
|
}
|
|
|
|
TEST(ComplexTest, MinusOp) {
|
|
mlir::NonFloatComplex<float> mc1{2, 5};
|
|
mlir::NonFloatComplex<float> mc2{3, 7};
|
|
std::complex<float> sc1{2, 5};
|
|
std::complex<float> sc2{3, 7};
|
|
|
|
EXPECT_EQ(mc1 - mc2, sc1 - sc2);
|
|
EXPECT_EQ(mc1 - 5.f, sc1 - 5.f);
|
|
}
|
|
|
|
TEST(ComplexTest, TimesOp) {
|
|
mlir::NonFloatComplex<float> mc1{2, 5};
|
|
mlir::NonFloatComplex<float> mc2{3, 7};
|
|
std::complex<float> sc1{2, 5};
|
|
std::complex<float> sc2{3, 7};
|
|
|
|
EXPECT_EQ(mc1 * mc2, sc1 * sc2);
|
|
EXPECT_EQ(mc1 * 5.f, sc1 * 5.f);
|
|
}
|
|
|
|
TEST(ComplexTest, DivideOp) {
|
|
mlir::NonFloatComplex<float> mc1{5, 10};
|
|
mlir::NonFloatComplex<float> mc2{3, 4};
|
|
std::complex<float> sc1{5, 10};
|
|
std::complex<float> sc2{3, 4};
|
|
|
|
EXPECT_EQ(mc1 / mc2, sc1 / sc2);
|
|
EXPECT_EQ(mc1 / 5.f, sc1 / 5.f);
|
|
}
|
|
|
|
TEST(ComplexTest, EqualityOp) {
|
|
mlir::NonFloatComplex<float> mc1{3, 4};
|
|
mlir::NonFloatComplex<float> mc2{3, 4};
|
|
|
|
EXPECT_EQ(mc1, mc2);
|
|
EXPECT_EQ(mc2, mc1);
|
|
}
|
|
|
|
TEST(ComplexTest, StdEqualityOp) {
|
|
mlir::NonFloatComplex<float> mc{7, 8};
|
|
std::complex<float> sc{7, 8};
|
|
|
|
EXPECT_EQ(mc, sc);
|
|
EXPECT_EQ(sc, mc);
|
|
}
|
|
|
|
TEST(ComplexTest, InequalityOp) {
|
|
mlir::NonFloatComplex<float> mc1{3, 4};
|
|
mlir::NonFloatComplex<float> mc2{7, 8};
|
|
|
|
EXPECT_NE(mc1, mc2);
|
|
EXPECT_NE(mc2, mc1);
|
|
}
|
|
|
|
TEST(ComplexTest, StdInequalityOp) {
|
|
mlir::NonFloatComplex<float> mc{7, 8};
|
|
std::complex<float> sc{3, 4};
|
|
|
|
EXPECT_NE(mc, sc);
|
|
EXPECT_NE(sc, mc);
|
|
}
|
|
|
|
TEST(ComplexTest, RealFn) {
|
|
mlir::NonFloatComplex<float> mc{4, 6};
|
|
std::complex<float> sc{4, 6};
|
|
|
|
EXPECT_EQ(real(mc), real(sc));
|
|
}
|
|
|
|
TEST(ComplexTest, ImagFn) {
|
|
mlir::NonFloatComplex<float> mc{4, 6};
|
|
std::complex<float> sc{4, 6};
|
|
|
|
EXPECT_EQ(imag(mc), imag(sc));
|
|
}
|