File 1904-Add-comprehension-assignment-tests-to-lc_SUITE.patch of Package erlang

From ba6bedac30e2438179ad8a9483708c6f41447742 Mon Sep 17 00:00:00 2001
From: Richard Carlsson <carlsson.richard@gmail.com>
Date: Wed, 7 Jan 2026 16:51:55 +0100
Subject: [PATCH 4/8] Add comprehension assignment tests to lc_SUITE

---
 lib/compiler/test/lc_SUITE.erl | 48 +++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/lib/compiler/test/lc_SUITE.erl b/lib/compiler/test/lc_SUITE.erl
index 00b162a202..77bb3a8fb6 100644
--- a/lib/compiler/test/lc_SUITE.erl
+++ b/lib/compiler/test/lc_SUITE.erl
@@ -21,12 +21,14 @@
 %%
 -module(lc_SUITE).
 
+-feature(compr_assign, enable).
+
 -export([all/0, suite/0, groups/0, init_per_suite/1, end_per_suite/1,
 	 init_per_group/2,end_per_group/2,
 	 init_per_testcase/2,end_per_testcase/2,
 	 basic/1,deeply_nested/1,no_generator/1,
 	 empty_generator/1,no_export/1,shadow/1,
-	 effect/1,singleton_generator/1,gh10020/1]).
+	 effect/1,singleton_generator/1,assignment_generator/1,gh10020/1]).
 
 -include_lib("stdlib/include/assert.hrl").
 -include_lib("common_test/include/ct.hrl").
@@ -48,6 +50,7 @@ groups() ->
        shadow,
        effect,
        singleton_generator,
+       assignment_generator,
        gh10020
       ]}].
 
@@ -307,6 +310,30 @@ singleton_generator(_Config) ->
 
     ok.
 
+%% requires compr_assign feature for now
+assignment_generator(_Config) ->
+    Seq = lists:seq(1, 100),
+    Mixed = [<<I:32>> || I <- Seq] ++ Seq,
+    Bin = << <<E:16>> || E <- Seq >>,
+
+    ?assertEqual(singleton_generator_1a(Seq), assignment_generator_1(Seq)),
+    ?assertEqual(singleton_generator_2a(Seq), assignment_generator_2(Seq)),
+    ?assertEqual(singleton_generator_3a(Seq), assignment_generator_3(Seq)),
+    ?assertEqual(singleton_generator_4a(Seq), assignment_generator_4(Seq)),
+
+    ?assertEqual(singleton_generator_5a(Mixed),
+                 assignment_generator_5(Mixed)),
+
+    ?assertEqual(singleton_generator_bin_1a(Bin),
+                 assignment_generator_bin_1(Bin)),
+
+    ok.
+
+assignment_generator_1(L) ->
+    [{H,E} || E <- L,
+              H = erlang:phash2(E),
+              H rem 10 =:= 0].
+
 singleton_generator_1a(L) ->
     [{H,E} || E <- L,
               H <- [erlang:phash2(E)],
@@ -317,6 +344,10 @@ singleton_generator_1b(L) ->
         E <- L,
         erlang:phash2(E) rem 10 =:= 0].
 
+assignment_generator_2(L) ->
+    [true = B || E <- L,
+                 B = is_integer(E)].
+
 singleton_generator_2a(L) ->
     [true = B || E <- L,
                  B <- [is_integer(E)]].
@@ -324,6 +355,12 @@ singleton_generator_2a(L) ->
 singleton_generator_2b(L) ->
     lists:duplicate(length(L), true).
 
+assignment_generator_3(L) ->
+    [if
+         Sqr > 500 -> Sqr;
+         true -> 500
+     end || E <- L, Sqr = E*E].
+
 singleton_generator_3a(L) ->
     [if
          Sqr > 500 -> Sqr;
@@ -336,18 +373,27 @@ singleton_generator_3b(L) ->
          true -> 500
      end || E <- L].
 
+assignment_generator_4(L) ->
+    [Res1 + Res2 || E <- L, EE <- L, Res1 = 3*EE, Res2 = 7*E].
+
 singleton_generator_4a(L) ->
     [Res1 + Res2 || E <- L, EE <- L, Res1 <- [3*EE], Res2 <- [7*E]].
 
 singleton_generator_4b(L) ->
     [7*E + 3*EE || E <- L, EE <- L].
 
+assignment_generator_5(L) ->
+    [Sqr || E <- L, is_integer(E), Sqr = E*E, Sqr < 100].
+
 singleton_generator_5a(L) ->
     [Sqr || E <- L, is_integer(E), Sqr <- [E*E], Sqr < 100].
 
 singleton_generator_5b(L) ->
     [E*E || E <- L, is_integer(E), E*E < 100].
 
+assignment_generator_bin_1(Bin) ->
+    << <<N:8>> || <<B:16>> <= Bin, N = B * 7, N < 256 >>.
+
 singleton_generator_bin_1a(Bin) ->
     << <<N:8>> || <<B:16>> <= Bin, N <- [B * 7], N < 256 >>.
 
-- 
2.51.0

openSUSE Build Service is sponsored by