Skip to content

set intersection_update, difference_update, symmetric_difference_update should check self is equal to given arg #3881

@Snowapril

Description

@Snowapril

Feature

They are also relevant to inplace operations( iand, isub, ixor ).
CPython checks whether given argument and selfobject are equal and then returns.

  • intersection_update : If self == arg, returns self.copy()
  • difference_update : If self == arg, returns self.clear(); Ok(())
  • symmetric_difference_update : If self == arg, returns self.clear(); Ok(())

At the current implementation, they get a parameter as SetIterable which is converted from PyObjectRef before entering each method.
For checking self == arg, we should convert it after checking.

Python Documentation

Relevant Test Case

  • test_set.py test_inplace_on_self

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-designAbout RustPython's own implementationC-compatA discrepancy between RustPython and CPythongood first issueGood for newcomers

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions