Idiom #114 Test deep equality

Set boolean b to true if objects x and y contain the same values, recursively comparing all referenced elements in x and y.
Tell if the code correctly handles recursive types.

(define b (equal? x y))
(def b (identical? x y))
(def b (= x y))
b = deeplyEqual(x, y));
b = x == y
import "reflect"
b := reflect.DeepEqual(x, y)
b = x == y
const b = JSON.stringify(x) === JSON.stringify(y);
const arrayDeepEqual = (a, b) => a.length === b.length && a.every((x, i) => deepEqual(x, b[i]))

const deepEqual = (a, b) =>
Array.isArray(a) && Array.isArray(b)
? arrayDeepEqual(a, b)
: typeof a == 'object' && a && typeof b == 'object' && b
? arrayDeepEqual(Object.entries(a), Object.entries(b))
: Number.isNaN(a) && Number.isNaN(b) || a === b

const b = deepEqual(x, y)
import {isDeepStrictEqual} from 'util'
const b = isDeepStrictEqual(x, y)
import _ from 'underscore';
const b = _.isEqual(x, y);
\$b = (\$x == \$y);
use Data::Compare;
my \$b = Compare(\$x, \$y);
b = x == y
b = x == y
let b = x == y;
case class A(a: Int, b: Float, c: String)
val x = A(1,2.2f,"hello")
val y = A(1,2.2f,"hello")

b = x == y

programming-idioms.org