binary-relational.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. load("test-common.js");
  2. try {
  3. const vals = [
  4. 1,
  5. 2,
  6. [],
  7. [1],
  8. [2],
  9. [1, 2],
  10. "foo",
  11. "fooo",
  12. "🔥",
  13. "❤️",
  14. "bar",
  15. {},
  16. { a: 1 },
  17. { a: 2 },
  18. { b: 1 },
  19. true,
  20. false,
  21. undefined,
  22. null,
  23. NaN,
  24. +Infinity,
  25. -Infinity,
  26. ];
  27. // Each row contains: x_index, y_index, (x < y), (x > y), (x <= y), (x >= y)
  28. // where x = vals[x_index], y = vals[y_index]
  29. const table = [
  30. [0, 0, false, false, true, true],
  31. [0, 1, true, false, true, false],
  32. [0, 2, false, true, false, true],
  33. [0, 3, false, false, true, true],
  34. [0, 4, true, false, true, false],
  35. [0, 5, false, false, false, false],
  36. [0, 6, false, false, false, false],
  37. [0, 7, false, false, false, false],
  38. [0, 8, false, false, false, false],
  39. [0, 9, false, false, false, false],
  40. [0, 10, false, false, false, false],
  41. [0, 11, false, false, false, false],
  42. [0, 12, false, false, false, false],
  43. [0, 13, false, false, false, false],
  44. [0, 14, false, false, false, false],
  45. [0, 15, false, false, true, true],
  46. [0, 16, false, true, false, true],
  47. [0, 17, false, false, false, false],
  48. [0, 18, false, true, false, true],
  49. [0, 19, false, false, false, false],
  50. [0, 20, true, false, true, false],
  51. [0, 21, false, true, false, true],
  52. [1, 0, false, true, false, true],
  53. [1, 1, false, false, true, true],
  54. [1, 2, false, true, false, true],
  55. [1, 3, false, true, false, true],
  56. [1, 4, false, false, true, true],
  57. [1, 5, false, false, false, false],
  58. [1, 6, false, false, false, false],
  59. [1, 7, false, false, false, false],
  60. [1, 8, false, false, false, false],
  61. [1, 9, false, false, false, false],
  62. [1, 10, false, false, false, false],
  63. [1, 11, false, false, false, false],
  64. [1, 12, false, false, false, false],
  65. [1, 13, false, false, false, false],
  66. [1, 14, false, false, false, false],
  67. [1, 15, false, true, false, true],
  68. [1, 16, false, true, false, true],
  69. [1, 17, false, false, false, false],
  70. [1, 18, false, true, false, true],
  71. [1, 19, false, false, false, false],
  72. [1, 20, true, false, true, false],
  73. [1, 21, false, true, false, true],
  74. [2, 0, true, false, true, false],
  75. [2, 1, true, false, true, false],
  76. [2, 2, false, false, true, true],
  77. [2, 3, true, false, true, false],
  78. [2, 4, true, false, true, false],
  79. [2, 5, true, false, true, false],
  80. [2, 6, true, false, true, false],
  81. [2, 7, true, false, true, false],
  82. [2, 8, true, false, true, false],
  83. [2, 9, true, false, true, false],
  84. [2, 10, true, false, true, false],
  85. [2, 11, true, false, true, false],
  86. [2, 12, true, false, true, false],
  87. [2, 13, true, false, true, false],
  88. [2, 14, true, false, true, false],
  89. [2, 15, true, false, true, false],
  90. [2, 16, false, false, true, true],
  91. [2, 17, false, false, false, false],
  92. [2, 18, false, false, true, true],
  93. [2, 19, false, false, false, false],
  94. [2, 20, true, false, true, false],
  95. [2, 21, false, true, false, true],
  96. [3, 0, false, false, true, true],
  97. [3, 1, true, false, true, false],
  98. [3, 2, false, true, false, true],
  99. [3, 3, false, false, true, true],
  100. [3, 4, true, false, true, false],
  101. [3, 5, true, false, true, false],
  102. [3, 6, true, false, true, false],
  103. [3, 7, true, false, true, false],
  104. [3, 8, true, false, true, false],
  105. [3, 9, true, false, true, false],
  106. [3, 10, true, false, true, false],
  107. [3, 11, true, false, true, false],
  108. [3, 12, true, false, true, false],
  109. [3, 13, true, false, true, false],
  110. [3, 14, true, false, true, false],
  111. [3, 15, false, false, true, true],
  112. [3, 16, false, true, false, true],
  113. [3, 17, false, false, false, false],
  114. [3, 18, false, true, false, true],
  115. [3, 19, false, false, false, false],
  116. [3, 20, true, false, true, false],
  117. [3, 21, false, true, false, true],
  118. [4, 0, false, true, false, true],
  119. [4, 1, false, false, true, true],
  120. [4, 2, false, true, false, true],
  121. [4, 3, false, true, false, true],
  122. [4, 4, false, false, true, true],
  123. [4, 5, false, true, false, true],
  124. [4, 6, true, false, true, false],
  125. [4, 7, true, false, true, false],
  126. [4, 8, true, false, true, false],
  127. [4, 9, true, false, true, false],
  128. [4, 10, true, false, true, false],
  129. [4, 11, true, false, true, false],
  130. [4, 12, true, false, true, false],
  131. [4, 13, true, false, true, false],
  132. [4, 14, true, false, true, false],
  133. [4, 15, false, true, false, true],
  134. [4, 16, false, true, false, true],
  135. [4, 17, false, false, false, false],
  136. [4, 18, false, true, false, true],
  137. [4, 19, false, false, false, false],
  138. [4, 20, true, false, true, false],
  139. [4, 21, false, true, false, true],
  140. [5, 0, false, false, false, false],
  141. [5, 1, false, false, false, false],
  142. [5, 2, false, true, false, true],
  143. [5, 3, false, true, false, true],
  144. [5, 4, true, false, true, false],
  145. [5, 5, false, false, true, true],
  146. [5, 6, true, false, true, false],
  147. [5, 7, true, false, true, false],
  148. [5, 8, true, false, true, false],
  149. [5, 9, true, false, true, false],
  150. [5, 10, true, false, true, false],
  151. [5, 11, true, false, true, false],
  152. [5, 12, true, false, true, false],
  153. [5, 13, true, false, true, false],
  154. [5, 14, true, false, true, false],
  155. [5, 15, false, false, false, false],
  156. [5, 16, false, false, false, false],
  157. [5, 17, false, false, false, false],
  158. [5, 18, false, false, false, false],
  159. [5, 19, false, false, false, false],
  160. [5, 20, false, false, false, false],
  161. [5, 21, false, false, false, false],
  162. [6, 0, false, false, false, false],
  163. [6, 1, false, false, false, false],
  164. [6, 2, false, true, false, true],
  165. [6, 3, false, true, false, true],
  166. [6, 4, false, true, false, true],
  167. [6, 5, false, true, false, true],
  168. [6, 6, false, false, true, true],
  169. [6, 7, true, false, true, false],
  170. [6, 8, true, false, true, false],
  171. [6, 9, true, false, true, false],
  172. [6, 10, false, true, false, true],
  173. [6, 11, false, true, false, true],
  174. [6, 12, false, true, false, true],
  175. [6, 13, false, true, false, true],
  176. [6, 14, false, true, false, true],
  177. [6, 15, false, false, false, false],
  178. [6, 16, false, false, false, false],
  179. [6, 17, false, false, false, false],
  180. [6, 18, false, false, false, false],
  181. [6, 19, false, false, false, false],
  182. [6, 20, false, false, false, false],
  183. [6, 21, false, false, false, false],
  184. [7, 0, false, false, false, false],
  185. [7, 1, false, false, false, false],
  186. [7, 2, false, true, false, true],
  187. [7, 3, false, true, false, true],
  188. [7, 4, false, true, false, true],
  189. [7, 5, false, true, false, true],
  190. [7, 6, false, true, false, true],
  191. [7, 7, false, false, true, true],
  192. [7, 8, true, false, true, false],
  193. [7, 9, true, false, true, false],
  194. [7, 10, false, true, false, true],
  195. [7, 11, false, true, false, true],
  196. [7, 12, false, true, false, true],
  197. [7, 13, false, true, false, true],
  198. [7, 14, false, true, false, true],
  199. [7, 15, false, false, false, false],
  200. [7, 16, false, false, false, false],
  201. [7, 17, false, false, false, false],
  202. [7, 18, false, false, false, false],
  203. [7, 19, false, false, false, false],
  204. [7, 20, false, false, false, false],
  205. [7, 21, false, false, false, false],
  206. [8, 0, false, false, false, false],
  207. [8, 1, false, false, false, false],
  208. [8, 2, false, true, false, true],
  209. [8, 3, false, true, false, true],
  210. [8, 4, false, true, false, true],
  211. [8, 5, false, true, false, true],
  212. [8, 6, false, true, false, true],
  213. [8, 7, false, true, false, true],
  214. [8, 8, false, false, true, true],
  215. [8, 9, false, true, false, true],
  216. [8, 10, false, true, false, true],
  217. [8, 11, false, true, false, true],
  218. [8, 12, false, true, false, true],
  219. [8, 13, false, true, false, true],
  220. [8, 14, false, true, false, true],
  221. [8, 15, false, false, false, false],
  222. [8, 16, false, false, false, false],
  223. [8, 17, false, false, false, false],
  224. [8, 18, false, false, false, false],
  225. [8, 19, false, false, false, false],
  226. [8, 20, false, false, false, false],
  227. [8, 21, false, false, false, false],
  228. [9, 0, false, false, false, false],
  229. [9, 1, false, false, false, false],
  230. [9, 2, false, true, false, true],
  231. [9, 3, false, true, false, true],
  232. [9, 4, false, true, false, true],
  233. [9, 5, false, true, false, true],
  234. [9, 6, false, true, false, true],
  235. [9, 7, false, true, false, true],
  236. [9, 8, true, false, true, false],
  237. [9, 9, false, false, true, true],
  238. [9, 10, false, true, false, true],
  239. [9, 11, false, true, false, true],
  240. [9, 12, false, true, false, true],
  241. [9, 13, false, true, false, true],
  242. [9, 14, false, true, false, true],
  243. [9, 15, false, false, false, false],
  244. [9, 16, false, false, false, false],
  245. [9, 17, false, false, false, false],
  246. [9, 18, false, false, false, false],
  247. [9, 19, false, false, false, false],
  248. [9, 20, false, false, false, false],
  249. [9, 21, false, false, false, false],
  250. [10, 0, false, false, false, false],
  251. [10, 1, false, false, false, false],
  252. [10, 2, false, true, false, true],
  253. [10, 3, false, true, false, true],
  254. [10, 4, false, true, false, true],
  255. [10, 5, false, true, false, true],
  256. [10, 6, true, false, true, false],
  257. [10, 7, true, false, true, false],
  258. [10, 8, true, false, true, false],
  259. [10, 9, true, false, true, false],
  260. [10, 10, false, false, true, true],
  261. [10, 11, false, true, false, true],
  262. [10, 12, false, true, false, true],
  263. [10, 13, false, true, false, true],
  264. [10, 14, false, true, false, true],
  265. [10, 15, false, false, false, false],
  266. [10, 16, false, false, false, false],
  267. [10, 17, false, false, false, false],
  268. [10, 18, false, false, false, false],
  269. [10, 19, false, false, false, false],
  270. [10, 20, false, false, false, false],
  271. [10, 21, false, false, false, false],
  272. [11, 0, false, false, false, false],
  273. [11, 1, false, false, false, false],
  274. [11, 2, false, true, false, true],
  275. [11, 3, false, true, false, true],
  276. [11, 4, false, true, false, true],
  277. [11, 5, false, true, false, true],
  278. [11, 6, true, false, true, false],
  279. [11, 7, true, false, true, false],
  280. [11, 8, true, false, true, false],
  281. [11, 9, true, false, true, false],
  282. [11, 10, true, false, true, false],
  283. [11, 11, false, false, true, true],
  284. [11, 12, false, false, true, true],
  285. [11, 13, false, false, true, true],
  286. [11, 14, false, false, true, true],
  287. [11, 15, false, false, false, false],
  288. [11, 16, false, false, false, false],
  289. [11, 17, false, false, false, false],
  290. [11, 18, false, false, false, false],
  291. [11, 19, false, false, false, false],
  292. [11, 20, false, false, false, false],
  293. [11, 21, false, false, false, false],
  294. [12, 0, false, false, false, false],
  295. [12, 1, false, false, false, false],
  296. [12, 2, false, true, false, true],
  297. [12, 3, false, true, false, true],
  298. [12, 4, false, true, false, true],
  299. [12, 5, false, true, false, true],
  300. [12, 6, true, false, true, false],
  301. [12, 7, true, false, true, false],
  302. [12, 8, true, false, true, false],
  303. [12, 9, true, false, true, false],
  304. [12, 10, true, false, true, false],
  305. [12, 11, false, false, true, true],
  306. [12, 12, false, false, true, true],
  307. [12, 13, false, false, true, true],
  308. [12, 14, false, false, true, true],
  309. [12, 15, false, false, false, false],
  310. [12, 16, false, false, false, false],
  311. [12, 17, false, false, false, false],
  312. [12, 18, false, false, false, false],
  313. [12, 19, false, false, false, false],
  314. [12, 20, false, false, false, false],
  315. [12, 21, false, false, false, false],
  316. [13, 0, false, false, false, false],
  317. [13, 1, false, false, false, false],
  318. [13, 2, false, true, false, true],
  319. [13, 3, false, true, false, true],
  320. [13, 4, false, true, false, true],
  321. [13, 5, false, true, false, true],
  322. [13, 6, true, false, true, false],
  323. [13, 7, true, false, true, false],
  324. [13, 8, true, false, true, false],
  325. [13, 9, true, false, true, false],
  326. [13, 10, true, false, true, false],
  327. [13, 11, false, false, true, true],
  328. [13, 12, false, false, true, true],
  329. [13, 13, false, false, true, true],
  330. [13, 14, false, false, true, true],
  331. [13, 15, false, false, false, false],
  332. [13, 16, false, false, false, false],
  333. [13, 17, false, false, false, false],
  334. [13, 18, false, false, false, false],
  335. [13, 19, false, false, false, false],
  336. [13, 20, false, false, false, false],
  337. [13, 21, false, false, false, false],
  338. [14, 0, false, false, false, false],
  339. [14, 1, false, false, false, false],
  340. [14, 2, false, true, false, true],
  341. [14, 3, false, true, false, true],
  342. [14, 4, false, true, false, true],
  343. [14, 5, false, true, false, true],
  344. [14, 6, true, false, true, false],
  345. [14, 7, true, false, true, false],
  346. [14, 8, true, false, true, false],
  347. [14, 9, true, false, true, false],
  348. [14, 10, true, false, true, false],
  349. [14, 11, false, false, true, true],
  350. [14, 12, false, false, true, true],
  351. [14, 13, false, false, true, true],
  352. [14, 14, false, false, true, true],
  353. [14, 15, false, false, false, false],
  354. [14, 16, false, false, false, false],
  355. [14, 17, false, false, false, false],
  356. [14, 18, false, false, false, false],
  357. [14, 19, false, false, false, false],
  358. [14, 20, false, false, false, false],
  359. [14, 21, false, false, false, false],
  360. [15, 0, false, false, true, true],
  361. [15, 1, true, false, true, false],
  362. [15, 2, false, true, false, true],
  363. [15, 3, false, false, true, true],
  364. [15, 4, true, false, true, false],
  365. [15, 5, false, false, false, false],
  366. [15, 6, false, false, false, false],
  367. [15, 7, false, false, false, false],
  368. [15, 8, false, false, false, false],
  369. [15, 9, false, false, false, false],
  370. [15, 10, false, false, false, false],
  371. [15, 11, false, false, false, false],
  372. [15, 12, false, false, false, false],
  373. [15, 13, false, false, false, false],
  374. [15, 14, false, false, false, false],
  375. [15, 15, false, false, true, true],
  376. [15, 16, false, true, false, true],
  377. [15, 17, false, false, false, false],
  378. [15, 18, false, true, false, true],
  379. [15, 19, false, false, false, false],
  380. [15, 20, true, false, true, false],
  381. [15, 21, false, true, false, true],
  382. [16, 0, true, false, true, false],
  383. [16, 1, true, false, true, false],
  384. [16, 2, false, false, true, true],
  385. [16, 3, true, false, true, false],
  386. [16, 4, true, false, true, false],
  387. [16, 5, false, false, false, false],
  388. [16, 6, false, false, false, false],
  389. [16, 7, false, false, false, false],
  390. [16, 8, false, false, false, false],
  391. [16, 9, false, false, false, false],
  392. [16, 10, false, false, false, false],
  393. [16, 11, false, false, false, false],
  394. [16, 12, false, false, false, false],
  395. [16, 13, false, false, false, false],
  396. [16, 14, false, false, false, false],
  397. [16, 15, true, false, true, false],
  398. [16, 16, false, false, true, true],
  399. [16, 17, false, false, false, false],
  400. [16, 18, false, false, true, true],
  401. [16, 19, false, false, false, false],
  402. [16, 20, true, false, true, false],
  403. [16, 21, false, true, false, true],
  404. [17, 0, false, false, false, false],
  405. [17, 1, false, false, false, false],
  406. [17, 2, false, false, false, false],
  407. [17, 3, false, false, false, false],
  408. [17, 4, false, false, false, false],
  409. [17, 5, false, false, false, false],
  410. [17, 6, false, false, false, false],
  411. [17, 7, false, false, false, false],
  412. [17, 8, false, false, false, false],
  413. [17, 9, false, false, false, false],
  414. [17, 10, false, false, false, false],
  415. [17, 11, false, false, false, false],
  416. [17, 12, false, false, false, false],
  417. [17, 13, false, false, false, false],
  418. [17, 14, false, false, false, false],
  419. [17, 15, false, false, false, false],
  420. [17, 16, false, false, false, false],
  421. [17, 17, false, false, false, false],
  422. [17, 18, false, false, false, false],
  423. [17, 19, false, false, false, false],
  424. [17, 20, false, false, false, false],
  425. [17, 21, false, false, false, false],
  426. [18, 0, true, false, true, false],
  427. [18, 1, true, false, true, false],
  428. [18, 2, false, false, true, true],
  429. [18, 3, true, false, true, false],
  430. [18, 4, true, false, true, false],
  431. [18, 5, false, false, false, false],
  432. [18, 6, false, false, false, false],
  433. [18, 7, false, false, false, false],
  434. [18, 8, false, false, false, false],
  435. [18, 9, false, false, false, false],
  436. [18, 10, false, false, false, false],
  437. [18, 11, false, false, false, false],
  438. [18, 12, false, false, false, false],
  439. [18, 13, false, false, false, false],
  440. [18, 14, false, false, false, false],
  441. [18, 15, true, false, true, false],
  442. [18, 16, false, false, true, true],
  443. [18, 17, false, false, false, false],
  444. [18, 18, false, false, true, true],
  445. [18, 19, false, false, false, false],
  446. [18, 20, true, false, true, false],
  447. [18, 21, false, true, false, true],
  448. [19, 0, false, false, false, false],
  449. [19, 1, false, false, false, false],
  450. [19, 2, false, false, false, false],
  451. [19, 3, false, false, false, false],
  452. [19, 4, false, false, false, false],
  453. [19, 5, false, false, false, false],
  454. [19, 6, false, false, false, false],
  455. [19, 7, false, false, false, false],
  456. [19, 8, false, false, false, false],
  457. [19, 9, false, false, false, false],
  458. [19, 10, false, false, false, false],
  459. [19, 11, false, false, false, false],
  460. [19, 12, false, false, false, false],
  461. [19, 13, false, false, false, false],
  462. [19, 14, false, false, false, false],
  463. [19, 15, false, false, false, false],
  464. [19, 16, false, false, false, false],
  465. [19, 17, false, false, false, false],
  466. [19, 18, false, false, false, false],
  467. [19, 19, false, false, false, false],
  468. [19, 20, false, false, false, false],
  469. [19, 21, false, false, false, false],
  470. [20, 0, false, true, false, true],
  471. [20, 1, false, true, false, true],
  472. [20, 2, false, true, false, true],
  473. [20, 3, false, true, false, true],
  474. [20, 4, false, true, false, true],
  475. [20, 5, false, false, false, false],
  476. [20, 6, false, false, false, false],
  477. [20, 7, false, false, false, false],
  478. [20, 8, false, false, false, false],
  479. [20, 9, false, false, false, false],
  480. [20, 10, false, false, false, false],
  481. [20, 11, false, false, false, false],
  482. [20, 12, false, false, false, false],
  483. [20, 13, false, false, false, false],
  484. [20, 14, false, false, false, false],
  485. [20, 15, false, true, false, true],
  486. [20, 16, false, true, false, true],
  487. [20, 17, false, false, false, false],
  488. [20, 18, false, true, false, true],
  489. [20, 19, false, false, false, false],
  490. [20, 20, false, false, true, true],
  491. [20, 21, false, true, false, true],
  492. [21, 0, true, false, true, false],
  493. [21, 1, true, false, true, false],
  494. [21, 2, true, false, true, false],
  495. [21, 3, true, false, true, false],
  496. [21, 4, true, false, true, false],
  497. [21, 5, false, false, false, false],
  498. [21, 6, false, false, false, false],
  499. [21, 7, false, false, false, false],
  500. [21, 8, false, false, false, false],
  501. [21, 9, false, false, false, false],
  502. [21, 10, false, false, false, false],
  503. [21, 11, false, false, false, false],
  504. [21, 12, false, false, false, false],
  505. [21, 13, false, false, false, false],
  506. [21, 14, false, false, false, false],
  507. [21, 15, true, false, true, false],
  508. [21, 16, true, false, true, false],
  509. [21, 17, false, false, false, false],
  510. [21, 18, true, false, true, false],
  511. [21, 19, false, false, false, false],
  512. [21, 20, true, false, true, false],
  513. [21, 21, false, false, true, true],
  514. ];
  515. for (let test of table) {
  516. let x = vals[test[0]];
  517. let y = vals[test[1]];
  518. assert(x < y === test[2]);
  519. assert(x > y === test[3]);
  520. assert(x <= y === test[4]);
  521. assert(x >= y === test[5]);
  522. }
  523. console.log("PASS");
  524. } catch (e) {
  525. console.log("FAIL: " + e);
  526. }