#!/usr/bin/ruby # ## Test reopening of built-in classes ## and built-in multimethod extensions # class Bool { method +(arg) { self.to_i + arg } method -(arg) { self.to_i - arg } method *(arg) { self.to_i * arg } method /(arg) { self.to_i / arg } } class Number { method +(Bool arg) { self + arg.to_i } method -(Bool arg) { self - arg.to_i } method *(Bool arg) { self * arg.to_i } method /(Bool arg) { self / arg.to_i } } class Bool { method is_neg { false } method is_pos { self ? true : false } method to_i { self ? 1 : 0 } } assert_eq(Bool.kind_of(Number), false) # Bool is not a Number assert_eq(Number.kind_of(Bool), false) # Number is not a Bool assert_eq(false+42, 42) assert_eq(true+42, 43) assert_eq(false + 1 + false * true / 4 / false * true, Inf) assert_eq((42+true) * 9*true / (5-true), 96.75) assert_eq(false + true, 1) assert_eq(42 + true, 43) assert_eq(64 - true, 63) assert_eq( 1 / false, Inf) assert_eq( 5 * false, 0) assert_eq(42 * true, 42) say "** Test passed!"