// watch()
false

// watch("variable")
false

// watch("variable", true)
false

// watch("variable", clamper, {min: 5, max: 10})
true

// variable = 5
Clamper: variable changed from undefined to 5 with userdata { min=5 max=10 }
// variable
5

// variable = 10
Clamper: variable changed from 5 to 10 with userdata { min=5 max=10 }
// variable
10

// variable = 4
Clamper: variable changed from 10 to 4 with userdata { min=5 max=10 }
// variable
5

// variable = 11
Clamper: variable changed from 5 to 11 with userdata { min=5 max=10 }
// variable
10

// variable = 6
Clamper: variable changed from 10 to 6 with userdata { min=5 max=10 }
// variable
6

// delete(variable)

// variable = 3
Clamper: variable changed from undefined to 3 with userdata { min=5 max=10 }
// variable
5

// watch("variable", clamper, {min: 15, max: 20})
true

// variable = 14
Clamper: variable changed from 5 to 14 with userdata { min=15 max=20 }
// variable
15

// variable = 21
Clamper: variable changed from 15 to 21 with userdata { min=15 max=20 }
// variable
20

// variable = 18
Clamper: variable changed from 20 to 18 with userdata { min=15 max=20 }
// variable
18

// watch("variable", exceptionalClamper, {min: 15, max: 20})
true

// variable = 14
exceptionalClamper: variable changed from 18 to 14 with userdata { min=15 max=20 }
ERROR: too low!
// variable
undefined

// variable = 21
exceptionalClamper: variable changed from undefined to 21 with userdata { min=15 max=20 }
ERROR: too high!
// variable
undefined

// variable = 18
exceptionalClamper: variable changed from undefined to 18 with userdata { min=15 max=20 }
// variable
18

// unwatch("variable")
true

// variable = 4
// variable
4

// variable = 11
// variable
11

// unwatch("variable")
false

// unwatch()
false

// variable = 6
// variable
6

// delete(variable)


// var loggingWatcher = new LoggingWatcher()
// this.watch("value", this.log)

// loggingWatcher.value = true
LoggingWatcher count 1: value changed from true to true with userdata undefined

// loggingWatcher.value = false
LoggingWatcher count 2: value changed from true to false with userdata undefined

// loggingWatcher.count
2

