Bug #21290
La mécanique d'intervalle ne marche pas quand on cherche un intervalle totalement inclu dans un autre
0%
Description
Si on stcoke [1, 10[ et qu'on cherche [2, 3] on ne récupère pas [1, 10].
Fichiers
Révisions associées
fix interval sets when overlap is contained completely in an interval (#21290)
Also add more documentations and tests.
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0001-fix-interval-sets-when-overlap-is-contained-complete.patch 0001-fix-interval-sets-when-overlap-is-contained-complete.patch ajouté
- Patch proposed changé de Non à Oui
J'ai corrigé et j'ai ajouté un peu plus de doc qui explique comment ça marche, la correction consiste à stocker l'intervalle aussi dans les points intérieurs, et pas seulement aux extrémités puis quand on recherche à regarder un point plus loin, i.e. relâcher la contrainte self.points[i] <= end
et ne la testant qu'en sortie de boucle de recherche, car si un interval est totalement inclu il le sera dans un intervalle qui sera lié à un point juste après l'intervalle qu'on cherche.
Mis à jour par Frédéric Péters il y a plus de 6 ans
Ça correspond à un moment particulier/visible dans Chrono ?
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
Non justement je n'avais pas vu le problème jusqu'à présent, mais comme je ne peux exclure que ça puisse arriver j'ai préféré prendre les devants, en l'état actuelle des choses le code est ncohérent, remove_overlap() ne faisant pas ce qu'elle dit faire dans le cas que je décrits. En tentant d'imaginer un cas concret j'imagine deux types de rendez vous (sans savoir si c'est possible) pour un même guichet de 45 minutes et 15 minutes, on a un RDV de 45 minutes de 10h à 10h45 possible mais on a un RDV déjà booké de 10h15 à 10h30, dans ce cas là le RDV de 10h ne sera pas retiré de la liste des possibles.
Mis à jour par Frédéric Péters il y a plus de 6 ans
Je n'avais pas regardé davantage, merci pour l'explication de la situation possible.
"Maintain a list of mostly non overlapping intervals, allow removing overlap.
Fait tout de suite,
"Maintain a list of mostly non overlapping intervals, allow removing overlap. ^ SyntaxError: EOL while scanning string literal
Ensuite, à corriger ça l'exécution de différents tests échoue, sur :
def __insert_point(self, point, interval): i = bisect.bisect_left(self.points, point) > if i >= len(self.container) or self.points[i] != point: E IndexError: list index out of range chrono/interval.py:72: IndexError
(ex: test_booking_api_meeting_different_durations_book_short)
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Patch proposed changé de Oui à Non
Et en relisant je vois encore d'autres problèmes au niveau de search() notamment qu'un interval va pouvoir être renvoyé plusieurs fois contrairement à ce que dit le commentaire à cet endroit. je reviens avec du mieux.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0001-tests-remove-warning-21290.patch 0001-tests-remove-warning-21290.patch ajouté
- Fichier 0002-fix-interval-sets-when-overlap-is-contained-complete.patch 0002-fix-interval-sets-when-overlap-is-contained-complete.patch ajouté
- Patch proposed changé de Non à Oui
Lancez sur la totalité des tests ça passe, j'ai aussi corrigé le souci de retour multiple d'un même intervalle par les itérateurs. Au passage je corrige 3 warnings dans les tests.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Statut changé de En cours à Résolu (à déployer)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
tests: remove warning (#21290)