Files
cell/tests/errors.cm
2026-02-16 21:52:11 -06:00

154 lines
3.3 KiB
Plaintext

// Runtime type error tests — verify each type mismatch disrupts correctly
return {
test_text_plus_array_disrupts: function() {
var caught = false
var fn = function() {
var x = "hello" + [1, 2, 3]
} disruption {
caught = true
}
fn()
if (!caught) return "text + array should disrupt"
},
test_number_plus_text_disrupts: function() {
var caught = false
var fn = function() {
var x = 1 + "hello"
} disruption {
caught = true
}
fn()
if (!caught) return "number + text should disrupt"
},
test_number_plus_array_disrupts: function() {
var caught = false
var fn = function() {
var x = 1 + [1, 2]
} disruption {
caught = true
}
fn()
if (!caught) return "number + array should disrupt"
},
test_text_multiply_disrupts: function() {
var caught = false
var fn = function() {
var x = "hello" * 2
} disruption {
caught = true
}
fn()
if (!caught) return "text * number should disrupt"
},
test_text_divide_disrupts: function() {
var caught = false
var fn = function() {
var x = "hello" / 2
} disruption {
caught = true
}
fn()
if (!caught) return "text / number should disrupt"
},
test_text_modulo_disrupts: function() {
var caught = false
var fn = function() {
var x = "hello" % 2
} disruption {
caught = true
}
fn()
if (!caught) return "text % number should disrupt"
},
test_array_subtract_disrupts: function() {
var caught = false
var fn = function() {
var x = [1] - 2
} disruption {
caught = true
}
fn()
if (!caught) return "array - number should disrupt"
},
test_negate_text_disrupts: function() {
var caught = false
var s = "hello"
var fn = function() {
return -s
} disruption {
caught = true
}
fn()
if (!caught) return "negate text should disrupt"
},
test_push_on_non_array_disrupts: function() {
var caught = false
var fn = function() {
var x = "hello"
x[] = 1
} disruption {
caught = true
}
fn()
if (!caught) return "push on non-array should disrupt"
},
test_pop_on_non_array_disrupts: function() {
var caught = false
var s = "hello"
var fn = function() {
var v = s[]
return v
} disruption {
caught = true
}
fn()
if (!caught) return "pop on non-array should disrupt"
},
test_comparison_type_mismatch_disrupts: function() {
var caught = false
var fn = function() {
var x = "hello" < [1]
} disruption {
caught = true
}
fn()
if (!caught) return "text < array should disrupt"
},
test_explicit_disrupt_works: function() {
var caught = false
var fn = function() {
disrupt
} disruption {
caught = true
}
fn()
if (!caught) return "explicit disrupt should be caught"
},
test_valid_add_text: function() {
var x = "hello" + " world"
if (x != "hello world") return "text + text should work"
},
test_valid_add_numbers: function() {
var x = 1 + 2
if (x != 3) return "number + number should work"
},
test_valid_comparison: function() {
if (!(1 < 2)) return "1 < 2 should be true"
if (!("a" < "b")) return "a < b should be true"
}
}