diff options
author | Rickard Green <[email protected]> | 2018-08-09 14:21:41 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2018-08-09 14:21:41 +0200 |
commit | 659481f79549258e20a6137cbe9d48beb5b1017a (patch) | |
tree | 8cbfc7f723be10d6f3c9128b5681cdc4fa363035 /erts/emulator/test | |
parent | 60eefb225ac90dadd6afaf116a1ca572e53aa6fd (diff) | |
parent | 709679eb60a6e2b8065f48d1974810fd51110a2c (diff) | |
download | otp-659481f79549258e20a6137cbe9d48beb5b1017a.tar.gz otp-659481f79549258e20a6137cbe9d48beb5b1017a.tar.bz2 otp-659481f79549258e20a6137cbe9d48beb5b1017a.zip |
Merge branch 'maint'
* maint:
Fixed #Ref ordering bug
Test #Ref ordering in lists and ets
Diffstat (limited to 'erts/emulator/test')
-rw-r--r-- | erts/emulator/test/ref_SUITE.erl | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/erts/emulator/test/ref_SUITE.erl b/erts/emulator/test/ref_SUITE.erl index 5f519d522e..74df857c65 100644 --- a/erts/emulator/test/ref_SUITE.erl +++ b/erts/emulator/test/ref_SUITE.erl @@ -22,6 +22,7 @@ -export([all/0, suite/0]). -export([wrap_1/1]). +-export([compare_list/1, compare_ets/1]). -export([loop_ref/1]). @@ -32,7 +33,7 @@ suite() -> {timetrap, {minutes, 2}}]. all() -> - [wrap_1]. + [wrap_1, compare_list, compare_ets]. %% Check that refs don't wrap around easily. wrap_1(Config) when is_list(Config) -> @@ -53,3 +54,28 @@ loop_ref(Parent) -> loop_ref(R, R, _) -> ok; loop_ref(R0, _, N) -> loop_ref(R0, make_ref(), N+1). + +%% Check that ref ordering works +compare_list(Config) when is_list(Config) -> + %% Although this test uses external refs, it would apply the same to plain refs + ExtRef1 = <<131,114,0,3,100,0,3,110,64,98,3, 0,0,173,156, 0,216,0,4, 0,0,0,0>>, + ExtRef2 = <<131,114,0,3,100,0,3,110,64,98,3, 0,1,31,27, 129,4,0,1, 0,0,0,0>>, + + Ref1 = binary_to_term(ExtRef1), %% #Ref<[email protected]> + Ref2 = binary_to_term(ExtRef2), %% #Ref<[email protected]> + OrderedList = [Ref1, Ref2], + OrderedList = lists:sort(OrderedList), + ok. + +%% This is the scarier case since it makes terms "invisible" in ets or Mnesia +%% (the underlying fault cause is the same as compare_list/1) +compare_ets(Config) when is_list(Config) -> + W2s = [610350147,899574699,2994196869,686384822,2397690439, 923302211], + ExtRefBase = <<131,114,0,3,100,0,3,110,64,98,3>>, + ExtRefs = [<<ExtRefBase/binary, 1:32, W2:32, 0:32>> || W2 <- W2s], + Refs = [binary_to_term(Bin) || Bin <- ExtRefs], + + Ets = ets:new(refbug, [ordered_set]), + ets:insert(Ets, [{Ref,Ref} || Ref <- Refs]), + 0 = length([R || R <- ets:tab2list(Ets), ets:lookup(Ets, element(1,R)) == []]), + ok. |