this repo has no description
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com)
2#include "Python.h"
3#include "gtest/gtest.h"
4
5#include "capi-fixture.h"
6#include "capi-testing.h"
7
8namespace py {
9namespace testing {
10
11using BoolExtensionApiTest = ExtensionApi;
12
13TEST_F(BoolExtensionApiTest, ConvertLongToBool) {
14 // Test True
15 testing::PyObjectPtr pybool_true(PyBool_FromLong(1));
16 EXPECT_EQ(pybool_true, Py_True);
17
18 // Test False
19 testing::PyObjectPtr pybool_false(PyBool_FromLong(0));
20 EXPECT_EQ(pybool_false, Py_False);
21}
22
23TEST_F(BoolExtensionApiTest, CheckBoolIdentity) {
24 // Test Identitiy
25 testing::PyObjectPtr pybool_true(PyBool_FromLong(1));
26 testing::PyObjectPtr pybool1(PyBool_FromLong(2));
27 EXPECT_EQ(pybool_true, pybool1);
28
29 testing::PyObjectPtr pybool_false(PyBool_FromLong(0));
30 testing::PyObjectPtr pybool2(PyBool_FromLong(0));
31 EXPECT_EQ(pybool_false, pybool2);
32}
33
34TEST_F(BoolExtensionApiTest, TestPyReturnTrueReturnsTrue) {
35 PyObjectPtr module(PyModule_New("mod"));
36 binaryfunc meth = [](PyObject*, PyObject*) { Py_RETURN_TRUE; };
37 static PyMethodDef foo_func = {"foo", meth, METH_NOARGS};
38 PyObjectPtr func(PyCFunction_NewEx(&foo_func, nullptr, module));
39 PyObjectPtr result(_PyObject_CallNoArg(func));
40 EXPECT_EQ(result, Py_True);
41}
42
43TEST_F(BoolExtensionApiTest, TestPyReturnTrueReturnsFalse) {
44 PyObjectPtr module(PyModule_New("mod"));
45 binaryfunc meth = [](PyObject*, PyObject*) { Py_RETURN_FALSE; };
46 static PyMethodDef foo_func = {"foo", meth, METH_NOARGS};
47 PyObjectPtr func(PyCFunction_NewEx(&foo_func, nullptr, module));
48 PyObjectPtr result(_PyObject_CallNoArg(func));
49 EXPECT_EQ(result, Py_False);
50}
51
52} // namespace testing
53} // namespace py