1-module(is_rec). 2 3-export([ri1/0, ri11/0, ri13/0, ri14/0, ri2/0, ri3/0, ri4/0, ri5/0, 4 ri6/0, ri7/0, ri8/0]). 5 6-record(r, {f1 :: integer()}). 7 8ri1() -> 9 A = simple1_adt:d1(), 10 is_record(A, r). % opaque term 1 11 12ri11() -> 13 A = simple1_adt:d1(), 14 I = '1-3'(), 15 is_record(A, r, I). % opaque term 1 16 17ri13() -> 18 A = simple1_adt:d1(), 19 if is_record(A, r) -> true end. % breaks the opacity 20 21ri14() -> 22 A = simple1_adt:d1(), 23 if is_record({A, 1}, r) -> true end. % breaks the opacity 24 25-type '1-3-t'() :: 1..3. 26 27-spec '1-3'() -> '1-3-t'(). 28 29'1-3'() -> 30 random:uniform(3). 31 32 33-spec 'Atom'() -> atom(). 34 35'Atom'() -> 36 a. 37 38ri2() -> 39 A = simple1_adt:d1(), 40 R = 'Atom'(), 41 is_record(A, R). % opaque term 1 42 43ri3() -> 44 A = simple1_adt:d1(), 45 is_record(A, A, 1). % opaque term 2 46 47ri4() -> 48 A = simple1_adt:d1(), 49 is_record(A, hipp:hopp(), 1). % opaque term 1 50 51ri5() -> 52 A = simple1_adt:d1(), 53 is_record(A, A, hipp:hopp()). % opaque term 2 54 55ri6() -> 56 A = simple1_adt:d1(), 57 if is_record(A, r) -> true end. % breaks opacity 58 59ri7() -> 60 A = simple1_adt:d1(), 61 if is_record({r, A}, r) -> true end. % A violates #r{} 62 63ri8() -> 64 A = simple1_adt:d1(), 65 is_record({A, 1}, r). % opaque term 1 66