From 7918d2f0251e971c971dfa923c517be92c21384d Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 27 Apr 2024 10:02:39 -0300 Subject: [PATCH 1/2] fix --- vlib/datatypes/set.v | 2 +- vlib/datatypes/set_test.v | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/vlib/datatypes/set.v b/vlib/datatypes/set.v index 26b8854b057a6c..a864f5ae6fafa5 100644 --- a/vlib/datatypes/set.v +++ b/vlib/datatypes/set.v @@ -110,7 +110,7 @@ pub fn (l Set[T]) intersection(r Set[T]) Set[T] { // - returns the difference of sets. pub fn (l Set[T]) - (r Set[T]) Set[T] { - mut set := l + mut set := l.copy() for e, _ in l.elements { if r.exists(e) { set.remove(e) diff --git a/vlib/datatypes/set_test.v b/vlib/datatypes/set_test.v index 36a680d6e761ca..53baf560c803a7 100644 --- a/vlib/datatypes/set_test.v +++ b/vlib/datatypes/set_test.v @@ -108,6 +108,20 @@ fn test_difference() { assert third_set.exists('boo') } +fn test_diff() { + m := ['a', 'b', 'c'] + n := ['a', 'b', 'c'] + assert m == n + mut set_m := Set[string]{} + mut set_n := Set[string]{} + set_m.add_all(m) + set_n.add_all(n) + assert set_m == set_n + diff1 := set_m - set_n + diff2 := set_n - set_m + assert diff1 == diff2 +} + fn test_subset() { mut set := Set[string]{} set.add_all(['a', 'b', 'c']) From 9e27a38390811555cc2191aaa5d3f4f1af355662 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 1 May 2024 10:04:54 -0300 Subject: [PATCH 2/2] fix --- vlib/datatypes/set.v | 4 ++-- vlib/datatypes/set_test.v | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/vlib/datatypes/set.v b/vlib/datatypes/set.v index a864f5ae6fafa5..c6ca0b67baa172 100644 --- a/vlib/datatypes/set.v +++ b/vlib/datatypes/set.v @@ -85,7 +85,7 @@ pub fn (mut set Set[T]) add_all(elements []T) { // @union returns the union of the two sets. pub fn (l Set[T]) @union(r Set[T]) Set[T] { - mut set := l + mut set := l.copy() for e, _ in r.elements { set.add(e) } @@ -94,7 +94,7 @@ pub fn (l Set[T]) @union(r Set[T]) Set[T] { // intersection returns the intersection of sets. pub fn (l Set[T]) intersection(r Set[T]) Set[T] { - mut set := l + mut set := l.copy() for e, _ in l.elements { if !r.exists(e) { set.remove(e) diff --git a/vlib/datatypes/set_test.v b/vlib/datatypes/set_test.v index 53baf560c803a7..bf7b008084e7c8 100644 --- a/vlib/datatypes/set_test.v +++ b/vlib/datatypes/set_test.v @@ -67,6 +67,7 @@ fn test_union() { first_set.add_all(['b', 'c', 'd']) second_set.add_all(['a', 'e']) mut third_set := first_set.@union(second_set) + assert first_set.elements.len == 3 assert third_set.exists('a') assert third_set.exists('b') assert third_set.exists('c') @@ -80,6 +81,7 @@ fn test_intersection() { mut second_set := Set[string]{} second_set.add_all(['bar', 'baz', 'boo']) mut third_set := first_set.intersection(second_set) + assert first_set.exists('foo') == true assert third_set.exists('foo') == false assert third_set.exists('bar') assert third_set.exists('baz')