Skip to content

EQUAL_ tests

Christopher Ross-Gill edited this page Aug 1, 2016 · 1 revision
; reflexivity test for action
[
	equal? :abs :abs
]

[
	not equal? :abs :add
]

; reflexivity test for native!
[
	equal? :all :all
]
[
	not equal? :all :any
]

; reflexivity test for op!
[
	equal? :+ :+
]
[
	not equal? :+ :-
]

; reflexivity test for function!
[
	a-value: make function! [[][]]
	equal? :a-value :a-value
]

; no structural equality for function!
[
	not equal? make function! [[][]] make function! [[][]]
]

; reflexivity test for closure!
[
	a-value: make closure! [[][]]
	equal? :a-value :a-value
]

; no structural equality for closure!
[
	not equal? make closure! [[][]] make closure! [[][]]
]

; binary!
[
	equal? #{00} #{00}
]

; no binary! padding
[
	not equal? #{00} #{0000}
]

; symmetry
[
	equal? equal? #{00} #{0000} equal? #{0000} #{00}
]

; binary versus bitset
; RAMBO #3518
[
	not equal? #{00} #[bitset! #{00}]
]

; symmetry
[
	equal? equal? #[bitset! #{00}] #{00} equal? #{00} #[bitset! #{00}]
]

; email versus string
; RAMBO #3518
; ! incompatibility with R2
[
	a-value: to email! ""
	equal? a-value to string! a-value
]

; symmetry
[
	a-value: to email! ""
	equal? equal? to string! a-value a-value equal? a-value to string! a-value
]

; RAMBO #3518
; ! incompatibility with R2
[
	a-value: %""
	equal? a-value to string! a-value
]

; symmetry
[
	a-value: %""
	equal? equal? a-value to string! a-value equal? to string! a-value a-value
]

; image!
; reflexivity
[
	a-value: load "#[image! 1x1 #{000000}]"
	equal? a-value a-value
]

[
	equal? load "#[image! 1x1 #{000000}]" load "#[image! 1x1 #{000000}]"
]
[
	equal? load "#[image! 1x1 #{}]" load "#[image! 1x1 #{000000}]"
]
[
	not equal? load "#[image! 1x2 #{000000}]" load "#[image! 1x1 #{000000}]"
]
[
	not equal? load "#[image! 2x1 #{000000}]" load "#[image! 1x1 #{000000}]"
]
[
	not equal? load "#[image! 1x1 #{000001}]" load "#[image! 1x1 #{000000}]"
]
[
	equal? load "#[image! 1x1 #{000000} #{00}]" load "#[image! 1x1 #{000000}]"
]
[
	not equal? load "#[image! 1x1 #{000000} #{01}]" load "#[image! 1x1 #{000000}]"
]
[
	equal? load "#[image! 1x1 #{000000} 2]" load "#[image! 1x1 #{000000} 2]"
]
[
	not equal? load "#[image! 1x1 #{000000} 2]" load "#[image! 1x1 #{000000}]"
]
[
	a-value: load "#[image! 1x1 #{000000}]"
	not equal? a-value next a-value
]
[
	equal? load "#[image! 0x0 #{}]" load "#[image! 1x1 #{000000} 2]"
]
[
	equal? load "#[image! 1x0 #{}]" load "#[image! 1x1 #{000000} 2]"
]

[
	equal? load "#[image! 0x1 #{}]" load "#[image! 1x1 #{000000} 2]"
]

; No implicit TO binary!
[ ; too few
	not equal? #{00} load "#[image! 1x1 #{000000}]"
]

; No implicit TO binary!
[ ; just right
	not equal? #{00000000} load "#[image! 1x1 #{000000}]"
]

[ ; too many
	not equal? #{0000000000} load "#[image! 1x1 #{000000}]"
]

; symmetry
[
	equal? equal? #{00} load "#[image! 1x1 #{00}]" equal? load "#[image! 1x1 #{00}]" #{00}
]

; No implicit TO binary!
[
	not equal? #{00} to integer! #{00}
]

; symmetry
[
	equal? equal? #{00} to integer! #{00} equal? to integer! #{00} #{00}
]

; RAMBO #3518
; ! incompatibility with R2
[
	a-value: #
	equal? a-value to string! a-value
]

; symmetry
[
	a-value: #
	equal? equal? a-value to string! a-value equal? to string! a-value a-value
]

[
	not equal? #{} none
]

; symmetry
[
	equal? equal? #{} none equal? none #{}
]

; RAMBO #3518
; ! incompatibility with R2
[
	a-value: ""
	equal? a-value to binary! a-value
]

; symmetry
[
	a-value: ""
	equal? equal? a-value to binary! a-value equal? to binary! a-value a-value
]

; RAMBO #3518
; ! incompatibility with R2
[
	a-value: to tag! ""
	equal? a-value to string! a-value
]

; symmetry
[
	a-value: to tag! ""
	equal? equal? a-value to string! a-value equal? to string! a-value a-value
]

; tuple!
; reflexivity
[
	equal? 0.0.0 0.0.0
]
[
	not equal? 0.0.1 0.0.0
]

; tuple! right-pads with 0
[
	equal? 1.0.0 1.0.0.0.0.0.0.0.0.0
]
[
	equal? 1.0.0.0.0.0.0.0.0.0 1.0.0
]
[
	not equal? 1.0.0 0.0.0.0.0.0.0.1.0.0
]

; No implicit TO binary!
[
	a-value: 0.0.0.0
	not equal? to binary! a-value a-value
]

; symmetry
[
	a-value: 0.0.0.0
	equal? equal? to binary! a-value a-value equal? a-value to binary! a-value
]

; bitset!
[
	equal? #[bitset! #{00}] #[bitset! #{00}]
]

; bitset! with no bits set does not equal empty bitset
[
	not equal? #[bitset! #{}] #[bitset! #{00}]
]

; No implicit TO binary! for bitset!
[
	not equal? #{00} #[bitset! #{00}]
]
; symmetry
[
	equal? equal? #[bitset! #{00}] #{00} equal? #{00} #[bitset! #{00}]
]

; block!
[
	equal? [] []
]

; reflexivity
[
	a-value: []
	equal? a-value a-value
]

; reflexivity for past-tail blocks
; ! incompatibility with R2
[
	a-value: tail [1]
	clear head a-value
	equal? a-value a-value
]

; reflexivity for cyclic blocks
[
	a-value: copy []
	insert/only a-value a-value
	equal? a-value a-value
]

; comparison of cyclic blocks
#r2crash
#r3crash
[
	a-value: copy []
	insert/only a-value a-value
	b-value: copy []
	insert/only b-value b-value
	equal? a-value b-value
]

[
	not equal? [] none
]

; symmetry
[
	equal? equal? [] none equal? none []
]

; type equivalence within any-block!
; RAMBO #3518
; block! vs. paren!
; ! incompatibility with R2, and R3 alpha 69
[
	equal? [] first [()]
]

; symmetry
[
	equal? equal? [] first [()] equal? first [()] []
]

; RAMBO #3518
; ! incompatibility with R2
; block! vs. path!
; ! incompatibility with R2, and R3 alpha 69
[
	equal? [a b] 'a/b
]
; symmetry
[
	a-value: 'a/b
	b-value: [a b]
	equal? equal? :a-value :b-value equal? :b-value :a-value
]

; block! vs. lit-path!
; ! incompatibility with R2, and R3 alpha 69
[
	equal? [a b] first ['a/b]
]
; symmetry
[
	a-value: first ['a/b]
	b-value: [a b]
	equal? equal? :a-value :b-value equal? :b-value :a-value
]

; block! vs. set-path!
; ! incompatibility with R2, and R3 alpha 69
[
	equal? [a b] first [a/b:]
]
; symmetry
[
	a-value: first [a/b:]
	b-value: [a b]
	equal? equal? :a-value :b-value equal? :b-value :a-value
]

; block! vs. get-path!
; ! incompatibility with R2, and R3 alpha 69
[
	equal? [a b] first [:a/b]
]
; symmetry
[
	a-value: first [:a/b]
	b-value: [a b]
	equal? equal? :a-value :b-value equal? :b-value :a-value
]

; datatype!
[
	equal? decimal! decimal!
]
[
	not equal? decimal! integer!
]

; datatype! vs. typeset!
[
	not equal? number! integer!
]

; symmetry
[
	equal? equal? number! integer! equal? integer! number!
]
[
	not equal? integer! make typeset! [integer!]
]

; typeset!
[
	equal? number! number!
]
[
	not equal? number! series!
]
[
	equal? make typeset! [integer!] make typeset! [integer!]
]

; reflexivity
[
	equal? -1 -1
]

; reflexivity
[
	equal? 0 0
]

; reflexivity
[
	equal? 1 1
]

; reflexivity
[
	equal? 0.0 0.0
]

[
	equal? 0.0 -0.0
]

; reflexivity
[
	equal? 1.0 1.0
]

; reflexivity
[
	equal? -1.0 -1.0
]

; reflexivity
#64bit
[
	equal? -9223372036854775808 -9223372036854775808
]

; reflexivity
#64bit
[
	equal? -9223372036854775807 -9223372036854775807
]

; reflexivity
#64bit
[
	equal? 9223372036854775807 9223372036854775807
]

; -9223372036854775808 not equal?
#64bit
[
	not equal? -9223372036854775808 -9223372036854775807
]

#64bit
[
	not equal? -9223372036854775808 -1
]

#64bit
[
	not equal? -9223372036854775808 0
]

#64bit
[
	not equal? -9223372036854775808 1
]

#64bit
[
	not equal? -9223372036854775808 9223372036854775806
]

#64bit
[
	not equal? -9223372036854775808 9223372036854775807
]

; -9223372036854775807 not equal?
#64bit
[
	not equal? -9223372036854775807 -9223372036854775808
]

#64bit
[
	not equal? -9223372036854775807 -1
]

#64bit
[
	not equal? -9223372036854775807 0
]

#64bit
[
	not equal? -9223372036854775807 1
]

#64bit
[
	not equal? -9223372036854775807 9223372036854775806
]

#64bit
[
	not equal? -9223372036854775807 9223372036854775807
]

; -1 not equal?
#64bit
[
	not equal? -1 -9223372036854775808
]

#64bit
[
	not equal? -1 -9223372036854775807
]

[
	not equal? -1 0
]

[
	not equal? -1 1
]

#64bit
[
	not equal? -1 9223372036854775806
]

#64bit
[
	not equal? -1 9223372036854775807
]

; 0 not equal?
#64bit
[
	not equal? 0 -9223372036854775808
]

#64bit
[
	not equal? 0 -9223372036854775807
]

[
	not equal? 0 -1
]

[
	not equal? 0 1
]

#64bit
[
	not equal? 0 9223372036854775806
]

#64bit
[
	not equal? 0 9223372036854775807
]

; 1 not equal?
#64bit
[
	not equal? 1 -9223372036854775808
]

#64bit
[
	not equal? 1 -9223372036854775807
]

[
	not equal? 1 -1
]

[
	not equal? 1 0
]

#64bit
[
	not equal? 1 9223372036854775806
]

#64bit
[
	not equal? 1 9223372036854775807
]

; 9223372036854775806 not equal?
#64bit
[
	not equal? 9223372036854775806 -9223372036854775808
]

#64bit
[
	not equal? 9223372036854775806 -9223372036854775807
]

#64bit
[
	not equal? 9223372036854775806 -1
]

#64bit
[
	not equal? 9223372036854775806 0
]

#64bit
[
	not equal? 9223372036854775806 1
]

#64bit
[
	not equal? 9223372036854775806 9223372036854775807
]

; 9223372036854775807 not equal?
#64bit
[
	not equal? 9223372036854775807 -9223372036854775808
]

#64bit
[
	not equal? 9223372036854775807 -9223372036854775807
]

#64bit
[
	not equal? 9223372036854775807 -1
]

#64bit
[
	not equal? 9223372036854775807 0
]

#64bit
[
	not equal? 9223372036854775807 1
]

#64bit
[
	not equal? 9223372036854775807 9223372036854775806
]

; "decimal tolerance"
[
	equal? 0.3 0.1 + 0.1 + 0.1
]

; symmetry
[
	equal? equal? 0.3 0.1 + 0.1 + 0.1 equal? 0.1 + 0.1 + 0.1 0.3
]

[
	equal? 0.15 - 0.05 0.1
]

; symmetry
[
	equal? equal? 0.15 - 0.05 0.1 equal? 0.1 0.15 - 0.05
]

[
	equal? -0.5 cosine 120
]

; symmetry
[
	equal? equal? -0.5 cosine 120 equal? cosine 120 -0.5
]

[
	equal? 0.5 * square-root 2.0 sine 45
]

; symmetry
[
	equal? equal? 0.5 * square-root 2.0 sine 45 equal? sine 45 0.5 * square-root 2.0
]

[
	equal? 0.5 sine 30
]

; symmetry
[
	equal? equal? 0.5 sine 30 equal? sine 30 0.5
]

[
	equal? 0.5 cosine 60
]

; symmetry
[
	equal? equal? 0.5 cosine 60 equal? cosine 60 0.5
]

[
	equal? 0.5 * square-root 3.0 sine 60
]

; symmetry
[
	equal? equal? 0.5 * square-root 3.0 sine 60 equal? sine 60 0.5 * square-root 3.0
]

[
	equal? 0.5 * square-root 3.0 cosine 30
]

; symmetry
[
	equal? equal? 0.5 * square-root 3.0 cosine 30 equal? cosine 30 0.5 * square-root 3.0
]

[
	equal? square-root 3.0 tangent 60
]

; symmetry
[
	equal? equal? square-root 3.0 tangent 60 equal? tangent 60 square-root 3.0
]

[
	equal? (square-root 3.0) / 3.0 tangent 30
]

; symmetry
[
	equal? equal? (square-root 3.0) / 3.0 tangent 30 equal? tangent 30 (square-root 3.0) / 3.0
]

[
	equal? 1.0 tangent 45
]

; symmetry
[
	equal? equal? 1.0 tangent 45 equal? tangent 45 1.0
]

[
	num: square-root 2.0
	equal? 2.0 num * num
]

; symmetry
[
	num: square-root 2.0
	equal? equal? 2.0 num * num equal? num * num 2.0
]

[
	num: square-root 3.0
	equal? 3.0 num * num
]

; symmetry
[
	num: square-root 3.0
	equal? equal? 3.0 num * num equal? num * num 3.0
]

; ignores datatype differences
[
	equal? 0 0.0
]

; ignores datatype differences
[
	equal? 0 $0
]

; ignores datatype differences
[
	equal? 0 0%
]

; ignores datatype differences
[
	equal? 0.0 $0
]

; ignores datatype differences
[
	equal? 0.0 0%
]

; ignores datatype differences
[
	equal? $0 0%
]

; symmetry
[
	equal? equal? 1 1.0 equal? 1.0 1
]

; symmetry
[
	equal? equal? 1 $1 equal? $1 1
]

; symmetry
[
	equal? equal? 1 100% equal? 100% 1
]

; symmetry
[
	equal? equal? 1.0 $1 equal? $1 1.0
]

; symmetry
[
	equal? equal? 1.0 100% equal? 100% 1.0
]

; symmetry
[
	equal? equal? $1 100% equal? 100% $1
]

; approximate equality
[
	equal? 10% + 10% + 10% 30%
]

; symmetry
[
	equal? equal? 10% + 10% + 10% 30% equal? 30% 10% + 10% + 10%
]

; date!
; reflexivity
[
	equal? 2-Jul-2009 2-Jul-2009
]
; date! doesn't ignore time portion
[
	not equal? 2-Jul-2009 2-Jul-2009/22:20
]
; symmetry
[
	equal? equal? 2-Jul-2009 2-Jul-2009/22:20 equal? 2-Jul-2009/22:20 2-Jul-2009
]

; missing time and zone = 00:00:00+00:00
[
	equal? 2-Jul-2009 2-Jul-2009/00:00:00+00:00
]
; symmetry
[
	equal? equal? 2-Jul-2009 2-Jul-2009/00:00 equal? 2-Jul-2009/00:00 2-Jul-2009
]

; timezone math in date!
[
	equal? 2-Jul-2009/22:20 2-Jul-2009/20:20-2:00
]

; time!
; reflexivity
[
	equal? 00:00 00:00
]

; missing components are 0
[
	equal? 0:00 00:00:00.0000000000
]
; symmetry
[
	equal? equal? 0:00 00:00:00.0000000000 equal? 00:00:00.0000000000 0:00
]

; char!
; reflexivity
[
	equal? #"a" #"a"
]

; no implicit TO char! from integer!
[
	not equal? #"a" 97
]

; symmetry
[
	equal? equal? #"a" 97 equal? 97 #"a"
]

; no implicit TO char! from decimal!
[
	not equal? #"a" 97.0
]
; symmetry
[
	equal? equal? #"a" 97.0 equal? 97.0 #"a"
]

; case
[
	equal? #"a" #"A"
]

; case
[
	equal? "a" "A"
]

; words
; reflexivity
[
	equal? 'a 'a
]

; aliases
[
	equal? 'a 'A
]

; symmetry
[
	equal? equal? 'a 'A equal? 'A 'a
]

; binding
[
	equal? 'a use [a] ['a]
]

; symmetry
[
	equal? equal? 'a use [a] ['a] equal? use [a] ['a] 'a
]

; different word types
[
	equal? 'a first [:a]
]

; symmetry
[
	equal? equal? 'a first [:a] equal? first [:a] 'a
]

; different word types
[
	equal? 'a first ['a]
]

; symmetry
[
	equal? equal? 'a first ['a] equal? first ['a] 'a
]

; different word types
[
	equal? 'a /a
]

; symmetry
[
	equal? equal? 'a /a equal? /a 'a
]

; different word types
[
	equal? 'a first [a:]
]

; symmetry
[
	equal? equal? 'a first [a:] equal? first [a:] 'a
]

; reflexivity
[
	equal? first [:a] first [:a]
]

; different word types
[
	equal? first [:a] first ['a]
]

; symmetry
[
	equal? equal? first [:a] first ['a] equal? first ['a] first [:a]
]

; different word types
[
	equal? first [:a] /a
]

; symmetry
[
	equal? equal? first [:a] /a equal? /a first [:a]
]

; different word types
[
	equal? first [:a] first [a:]
]

; symmetry
[
	equal? equal? first [:a] first [a:] equal? first [a:] first [:a]
]

; reflexivity
[
	equal? first ['a] first ['a]
]

; different word types
[
	equal? first ['a] /a
]

; symmetry
[
	equal? equal? first ['a] /a equal? /a first ['a]
]

; different word types
[
	equal? first ['a] first [a:]
]

; symmetry
[
	equal? equal? first ['a] first [a:] equal? first [a:] first ['a]
]

; reflexivity
[
	equal? /a /a
]

; different word types
[
	equal? /a first [a:]
]

; symmetry
[
	equal? equal? /a first [a:] equal? first [a:] /a
]

; reflexivity
[
	equal? first [a:] first [a:]
]

; logic! values
[
	equal? true true
]

[
	equal? false false
]

[
	not equal? true false
]

[
	not equal? false true
]

; error in R2, no error in R3
[
	p: make port! http://
	equal? p p
]

; no structural equivalence for port!
[
	not equal? make port! http:// make port! http://
]
Clone this wiki locally