USING: accessors alien byte-arrays classes.struct math math.intervals sequences classes.algebra kernel tools.test compiler.tree.propagation.info arrays ; IN: compiler.tree.propagation.info.tests { f } [ 0.0 -0.0 eql? ] unit-test { t t } [ 0 10 [a,b] 5 20 [a,b] value-info-intersect [ class>> real class= ] [ interval>> 5 10 [a,b] = ] bi ] unit-test { float 10.0 t } [ 10.0 10.0 value-info-intersect [ class>> ] [ >literal< ] bi ] unit-test { null } [ 10 10.0 value-info-intersect class>> ] unit-test { fixnum 10 t } [ 10 10 value-info-union [ class>> ] [ >literal< ] bi ] unit-test { 3.0 t } [ 3 3 [a,b] float value-info-intersect >literal< ] unit-test { 3 t } [ 2 3 (a,b] fixnum value-info-intersect >literal< ] unit-test { T{ value-info-state f null empty-interval f f } } [ fixnum -10 0 [a,b] fixnum 19 29 [a,b] value-info-intersect ] unit-test { 3 t } [ 3 null-info value-info-union >literal< ] unit-test { } [ { } value-infos-union drop ] unit-test TUPLE: test-tuple { x read-only } ; { t } [ f f 3 3array test-tuple dup object-info value-info-intersect = ] unit-test { t t } [ f fixnum 0 40 [a,b] value-info-union \ f class-not value-info-intersect [ class>> fixnum class= ] [ interval>> 0 40 [a,b] = ] bi ] unit-test ! interval>literal { 10 t } [ fixnum 10 10 [a,b] interval>literal ] unit-test STRUCT: self { s self* } ; ! value-info<= { t t t t t t } [ byte-array c-ptr value-info<= null-info 3 value-info<= null-info null-info value-info<= alien c-ptr value-info<= 20 fixnum value-info<= ! A byte-array is a kind of c-ptr f byte-array 2array self f c-ptr 2array self value-info<= ] unit-test { f f f f f } [ ! Checking intervals fixnum 20 value-info<= ! Mutable literals [ "foo" ] [ "foo" ] value-info<= ! Strings should be immutable but they aren't. :/ "hey" "hey" value-info<= f c-ptr 2array self f byte-array 2array self value-info<= ! If one value-info has a slot specified and the other doesn't, ! then it can't be smaller because that other slot could be ! anything! self f byte-array 2array self value-info<= ] unit-test { t f } [ 10 f value-info<= f 10 value-info<= ] unit-test