aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/javascript/operator_overload_runme.js
blob: 1f3f3882a69aaf374348333a47c099926f06fcd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
var operator_overload = require("operator_overload");
var { Op } = operator_overload;

// first check all the operators are implemented correctly from pure C++ code
Op.sanity_check();

pop = (new Op(6)).Divide(new Op(3));

// test routine
a = new Op();
b = new Op(5);
c = new Op(b); // copy construct
d = new Op(2);
dd = new Op();
dd.Equal(d); // assignment operator

// test equality
if (!a.NotEqual(b)) {
  throw new Error("a!=b");
}
if (!b.EqualEqual(c)) {
  throw new Error("b==c");
}
if (!a.NotEqual(d)) {
  throw new Error("a!=d");
}
if (!d.EqualEqual(dd)) {
  throw new Error("d==dd");
}

// test <
if (!a.LessThan(b)) {
  throw new Error("a<b");
}
if (!a.LessThanEqual(b)) {
  throw new Error("a<=b");
}
if (!b.LessThanEqual(c)) {
  throw new Error("b<=c");
}
if (!b.GreaterThanEqual(c)) {
  throw new Error("b>=c");
}
if (!b.GreaterThan(d)) {
  throw new Error("b>d");
}
if (!b.GreaterThanEqual(d)) {
  throw new Error("b>=d");
}

// test +=
e = new Op(3);
e.PlusEqual(d);
if (!e.EqualEqual(b)) {
  throw new Error(`e==b (${e.i}==${b.i})`);
}
e.MinusEqual(c);
if (!e.EqualEqual(a)) {
  throw new Error("e==a");
}
e = new Op(1);
e.MultiplyEqual(b);
if (!e.EqualEqual(c)) {
  throw new Error("e==c");
}
e.DivideEqual(d);
if (!e.EqualEqual(d)) {
  throw new Error("e==d");
}
e.PercentEqual(c);
if (!e.EqualEqual(d)) {
  throw new Error("e==d");
}

// test +
f = new Op(1);
g = new Op(1);
if (!f.Plus(g).EqualEqual(new Op(2))) {
  throw new Error("f+g==Op(2)");
}
if (!f.Minus(g).EqualEqual(new Op(0))) {
  throw new Error("f-g==Op(0)");
}
if (!f.Multiply(g).EqualEqual(new Op(1))) {
  throw new Error("f*g==Op(1)");
}
if (!f.Divide(g).EqualEqual(new Op(1))) {
  throw new Error("f/g==Op(1)");
}
if (!f.Percent(g).EqualEqual(new Op(0))) {
  throw new Error("f%g==Op(0)");
}

// test unary operators
if (!a.Minus().EqualEqual(a)) {
  throw new Error("-a==a");
}
if (!b.Minus().EqualEqual(new Op(-5))) {
  throw new Error("-b==Op(-5)");
}

// test functors
if (!b.Functor() == 5) {
  throw new Error("functor");
}
if (!b.Functor(1) == 6) {
  throw new Error("functor");
}
if (!b.Functor(1, 2) == 8) {
  throw new Error("functor");
}