Skip to content

Commit 779560f

Browse files
Your Namemhdawson
authored andcommitted
test: add operator overloading tests in Number
PR-URL: #355 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Nicola Del Gobbo <[email protected]>
1 parent 51ffe45 commit 779560f

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

test/basic_types/number.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,40 @@ Value MaxDouble(const CallbackInfo& info) {
4141
return Number::New(info.Env(), DBL_MAX);
4242
}
4343

44+
Value OperatorInt32(const CallbackInfo& info) {
45+
Number number = info[0].As<Number>();
46+
return Boolean::New(info.Env(), number.Int32Value() == static_cast<int32_t>(number));
47+
}
48+
49+
Value OperatorUint32(const CallbackInfo& info) {
50+
Number number = info[0].As<Number>();
51+
return Boolean::New(info.Env(), number.Uint32Value() == static_cast<uint32_t>(number));
52+
}
53+
54+
Value OperatorInt64(const CallbackInfo& info) {
55+
Number number = info[0].As<Number>();
56+
return Boolean::New(info.Env(), number.Int64Value() == static_cast<int64_t>(number));
57+
}
58+
59+
Value OperatorFloat(const CallbackInfo& info) {
60+
Number number = info[0].As<Number>();
61+
return Boolean::New(info.Env(), number.FloatValue() == static_cast<float>(number));
62+
}
63+
64+
Value OperatorDouble(const CallbackInfo& info) {
65+
Number number = info[0].As<Number>();
66+
return Boolean::New(info.Env(), number.DoubleValue() == static_cast<double>(number));
67+
}
68+
69+
Value CreateEmptyNumber(const CallbackInfo& info) {
70+
Number* number = new Number();
71+
return Boolean::New(info.Env(), number->IsEmpty());
72+
}
73+
74+
Value CreateNumberFromExistingValue(const CallbackInfo& info) {
75+
return info[0].As<Number>();
76+
}
77+
4478
Object InitBasicTypesNumber(Env env) {
4579
Object exports = Object::New(env);
4680

@@ -53,6 +87,13 @@ Object InitBasicTypesNumber(Env env) {
5387
exports["maxFloat"] = Function::New(env, MaxFloat);
5488
exports["minDouble"] = Function::New(env, MinDouble);
5589
exports["maxDouble"] = Function::New(env, MaxDouble);
90+
exports["operatorInt32"] = Function::New(env, OperatorInt32);
91+
exports["operatorUint32"] = Function::New(env, OperatorUint32);
92+
exports["operatorInt64"] = Function::New(env, OperatorInt64);
93+
exports["operatorFloat"] = Function::New(env, OperatorFloat);
94+
exports["operatorDouble"] = Function::New(env, OperatorDouble);
95+
exports["createEmptyNumber"] = Function::New(env, CreateEmptyNumber);
96+
exports["createNumberFromExistingValue"] = Function::New(env, CreateNumberFromExistingValue);
5697

5798
return exports;
5899
}

test/basic_types/number.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,37 @@ function test(binding) {
8080
assert.strictEqual(0, binding.basic_types_number.toDouble(MIN_DOUBLE * MIN_DOUBLE));
8181
assert.strictEqual(Infinity, binding.basic_types_number.toDouble(MAX_DOUBLE * MAX_DOUBLE));
8282
}
83+
84+
// Test for operator overloading
85+
{
86+
assert.strictEqual(binding.basic_types_number.operatorInt32(MIN_INT32), true);
87+
assert.strictEqual(binding.basic_types_number.operatorInt32(MAX_INT32), true);
88+
assert.strictEqual(binding.basic_types_number.operatorUint32(MIN_UINT32), true);
89+
assert.strictEqual(binding.basic_types_number.operatorUint32(MAX_UINT32), true);
90+
assert.strictEqual(binding.basic_types_number.operatorInt64(MIN_INT64), true);
91+
assert.strictEqual(binding.basic_types_number.operatorInt64(MAX_INT64), true);
92+
assert.strictEqual(binding.basic_types_number.operatorFloat(MIN_FLOAT), true);
93+
assert.strictEqual(binding.basic_types_number.operatorFloat(MAX_FLOAT), true);
94+
assert.strictEqual(binding.basic_types_number.operatorFloat(MAX_DOUBLE), true);
95+
assert.strictEqual(binding.basic_types_number.operatorDouble(MIN_DOUBLE), true);
96+
assert.strictEqual(binding.basic_types_number.operatorDouble(MAX_DOUBLE), true);
97+
}
98+
99+
// Construction test
100+
{
101+
    assert.strictEqual(binding.basic_types_number.createEmptyNumber(), true);
102+
   randomRangeTestForInteger(MIN_INT32, MAX_INT32, binding.basic_types_number.createNumberFromExistingValue);
103+
   assert.strictEqual(MIN_INT32, binding.basic_types_number.createNumberFromExistingValue(MIN_INT32));
104+
   assert.strictEqual(MAX_INT32, binding.basic_types_number.createNumberFromExistingValue(MAX_INT32));
105+
   randomRangeTestForInteger(MIN_UINT32, MAX_UINT32, binding.basic_types_number.createNumberFromExistingValue);
106+
   assert.strictEqual(MIN_UINT32, binding.basic_types_number.createNumberFromExistingValue(MIN_UINT32));
107+
   assert.strictEqual(MAX_UINT32, binding.basic_types_number.createNumberFromExistingValue(MAX_UINT32));
108+
   randomRangeTestForInteger(MIN_INT64, MAX_INT64, binding.basic_types_number.createNumberFromExistingValue);
109+
   assert.strictEqual(MIN_INT64, binding.basic_types_number.createNumberFromExistingValue(MIN_INT64));
110+
   assert.strictEqual(MAX_INT64, binding.basic_types_number.createNumberFromExistingValue(MAX_INT64));
111+
    assert.strictEqual(MIN_FLOAT, binding.basic_types_number.createNumberFromExistingValue(MIN_FLOAT));
112+
    assert.strictEqual(MAX_FLOAT, binding.basic_types_number.createNumberFromExistingValue(MAX_FLOAT));
113+
    assert.strictEqual(MIN_DOUBLE, binding.basic_types_number.createNumberFromExistingValue(MIN_DOUBLE));
114+
    assert.strictEqual(MAX_DOUBLE, binding.basic_types_number.createNumberFromExistingValue(MAX_DOUBLE));
115+
}
83116
}

0 commit comments

Comments
 (0)