2 % Module de test de euphorik.
3 % Crée un certain nombre d'utilisateur et post des messages aléatoire.
6 -module(euphorik_test
).
9 -include("../include/euphorik_bd.hrl").
12 % N est le nombre d'utilisateur
21 random:seed(A1
, A2
, A3
),
30 lists:foreach(fun(Pid
) -> exit(Pid
, kill
) end, Pids
).
33 % Crée N user avec des noms aléatoires et renvoie la liste des id.
36 creer_users(0, Ids
) -> lists:map(fun(#user
{id
= Id
}) -> Id
end, Ids
);
37 creer_users(N
, Ids
) ->
38 creer_users(N
- 1, [euphorik_bd:nouveau_user(mot_rand(random:uniform(4) + 4), "", "") | Ids
]).
41 % crée un message aléatoire et le renvoie
43 lists:flatten(message_rand(random:uniform(10), [])).
44 message_rand(0, Mots
) -> Mots
;
45 message_rand(N
, Mots
) ->
46 message_rand(N
- 1, [mot_rand(random:uniform(2) + 5), $
| Mots
]).
49 % Renvoie une succession de lettre aléatoire
52 mot_rand(0, Mot
) -> Mot
;
54 mot_rand(L
- 1, [random:uniform($z
- $a
+ 1) + $a
- 1 | Mot
]).
57 % Tire au hasard de 0 à 3 messages sur les 10 derniers postés, renvoie une liste de int()
64 Messages
= lists:map(fun(#minichat
{id
= Id
}) -> Id
end, euphorik_bd:messages(30)),
67 R
> 0.5 andalso R
=< 0.8 ->
68 tire_element_rand(1, Messages
);
69 R
> 0.8 andalso R
=< 0.95 ->
70 tire_element_rand(2, Messages
);
72 tire_element_rand(3, Messages
)
76 % tire N element distinct parmis la liste L proposée
77 tire_element_rand(N
, L
) when N
=< length(L
) ->
78 tire_element_rand(N
, L
, []).
79 tire_element_rand(0, _
, Elements
) -> Elements
;
80 tire_element_rand(N
, L
, Elements
) ->
81 E
= lists:nth(random:uniform(length(L
)), L
),
82 E_se_trouve_dans_Elements
= lists:any(fun(E2
) -> E2
=:= E
end, Elements
),
83 if E_se_trouve_dans_Elements
-> % si E a déjà été tiré on recommence sans rien changer
84 tire_element_rand(N
, L
, Elements
);
86 tire_element_rand(N
-1, L
, [E
| Elements
])
91 % attend un temp aléatoire compris entre 1 sec et 5 sec
92 timer:sleep(1000 * random:uniform(5)),
93 % poste un message aléatoire par une personne aléatoire répondant à des messages aléatoires
94 {Message
, Repond_a
} = {message_rand(), messages_id_rand()},
95 io:format("~p poste ~p et repond a ~w~n", [User_id
, Message
, Repond_a
]),
96 euphorik_bd:nouveau_message(Message
, User_id
, Repond_a
),