#!/usr/bin/ruby

var a = %n[90, 187, 398, 207, 350, 98, 2, 132, 190, 131, 266, 148, 122, 316, 109, 90, 342, 288, 160, 289, 217, 51, 240, 340, 124, 24, 235, 199, 55, 70, 147, 340, 243, 307, 132, 243, 367, 231, 240, 350, 293, 26, 133, 204, 383, 28, 222, 189, 57, 234, 88, 270, 192, 161, 70, 170, 385, 336, 47, 364, 346, 202, 341, 265, 82, 79, 354, 85, 67, 380, 338, 228, 236, 39, 313, 13, 173, 270, 274, 202, 123, 214, 96, 247, 22, 334, 8, 102, 122, 162, 37, 183, 116, 76, 318, 1, 164, 59, 354, 233, 259, 340, 6, 202, 210, 122, 301, 380, 258, 127, 23, 18, 280, 4, 29, 397, 327, 301, 115, 350, 280, 50, 86, 330, 169, 21, 251, 352, 374, 302, 280, 239, 231, 358, 362, 115, 147, 31, 246, 393, 324, 48, 17, 169, 7, 24, 131, 300, 84, 378, 208, 257, 91, 154, 173, 7, 158, 114, 87, 322, 291, 19, 167, 319, 193, 63, 154, 321, 329, 203, 265, 38, 80, 199, 168, 13, 315, 353, 102, 382, 369, 359, 66, 348, 237, 287, 259, 225, 109, 325, 261, 258, 273, 392, 93, 271, 161, 175, 221, 336, 152, 237, 334, 180, 256, 41, 39, 293, 365, 186, 197, 368, 219, 82, 395, 23, 268, 75, 34, 137, 330, 384, 193, 287, 245, 329, 45, 311, 258, 386, 395, 25, 48, 374, 143, 108, 72, 144, 216, 297, 280, 348, 120, 149, 40, 277, 333, 292, 76, 218, 333, 242, 302, 380, 385, 239, 394, 187, 116, 19, 260, 19, 264, 331, 362, 183, 330, 44, 195, 18, 179, 197, 371, 261, 364, 60, 332, 292, 94, 144, 27, 247, 27, 248, 350, 282, 319, 57, 374, 30, 15, 7, 171, 65, 357, 139, 188, 244, 74, 12, 182, 178, 65, 381, 171, 361, 148, 378, 365, 87, 173, 360, 355, 183, 180, 205, 300, 192, 339, 104, 15, 250, 101, 91, 33, 394, 0, 286, 370, 233, 66, 80, 198, 226, 132, 378, 273, 160, 193, 229, 170, 312, 80, 161, 8, 302, 82, 295, 119, 317, 141, 348, 147, 336, 136, 186, 362, 348, 394, 97, 49, 12, 251, 159, 26, 374, 115, 366, 382, 173, 105, 114, 77, 262, 28, 99, 357, 396, 144, 294, 335, 76, 45, 247, 121, 390, 358, 108, 226, 103, 357, 276, 175, 317, 136, 366, 350, 176, 275, 269]
var b = %n[270, 256, 148, 236, 111, 361, 231, 2, 358, 157, 278, 356, 58, 206, 381, 30, 118, 0, 383, 81, 125, 66, 319, 278, 223, 312, 52, 213, 111, 58, 5, 81, 12, 256, 61, 8, 6, 363, 23, 399, 288, 56, 387, 69, 4, 341, 91, 35, 216, 84, 377, 192, 86, 303, 311, 346, 328, 80, 282, 168, 276, 153, 190, 187, 204, 227, 0, 246, 132, 110, 75, 92, 226, 15, 318, 317, 43, 234, 297, 168, 66, 93, 321, 390, 264, 249, 252, 301, 180, 364, 221, 105, 363, 103, 16, 356, 115, 264, 122, 181]

for op in (%w(^ | & -)) {

    say "Testing: <<#{op}>>"

    var x = a.(op)(b)
    var y = b.(op)(a)

    var z = (Bag(a...).(op)(Bag(b...)) -> to_a)
    var u = (Bag(b...).(op)(Bag(a...)) -> to_a)

    assert_eq(x.sort, z.sort)
    assert_eq(y.sort, u.sort)

    assert_eq(y.sort, z.sort) if (op != '-')
    assert_eq(x.sort, u.sort) if (op != '-')
}

say "** Test passed"