#!/usr/bin/ruby
# Tests for squarefree related functions.
assert_eq(
squarefree(2**64 - 100, 2**64 - 1),
range(2**64 - 100, 2**64 - 1).grep{.is_squarefree}
)
assert_eq(
squarefree(2**64 - 50, 2**64 + 1),
range(2**64 - 50, 2**64 + 1).grep{.is_squarefree}
)
assert_eq(
squarefree(2**65 - 100, 2**65 - 1),
range(2**65 - 100, 2**65 - 1).grep{.is_squarefree}
)
assert_eq(
squarefree(2**63 - 100, 2**63 - 1),
range(2**63 - 100, 2**63 - 1).grep{.is_squarefree}
)
assert_eq(
squarefree(2**32 - 100, 2**32 - 1),
range(2**32 - 100, 2**32 - 1).grep{.is_squarefree}
)
assert_eq(
squarefree(2**31 - 100, 2**31 - 1),
range(2**31 - 100, 2**31 - 1).grep{.is_squarefree}
)
assert_eq(
squarefree(100),
1..100 -> grep{.is_squarefree}
)
assert_eq(
gather {
each_squarefree(2**64 - 100, 2**64 - 1, {|k|
take(k)
}),
},
squarefree(2**64 - 100, 2**64 - 1),
)
assert_eq(
gather {
each_squarefree(2**64 - 100, 2**64 - 50, {|k|
take(k)
}),
},
range(2**64 - 100, 2**64 - 50).grep{.is_squarefree}
)
assert_eq(
gather {
each_squarefree(2**64 - 100, 2**64 - 49, {|k|
take(k)
}),
},
range(2**64 - 100, 2**64 - 49).grep{.is_squarefree}
)
assert_eq(
gather {
each_squarefree(2**64 - 100, 2**64 - 50, {|k|
take(k)
})
},
squarefree(2**64 - 100, 2**64 - 50),
)
assert_eq(
gather {
each_squarefree(2**64 - 50, 2**64 + 1, {|k|
take(k)
}),
},
range(2**64 - 50, 2**64 + 1).grep{.is_squarefree}
)
say "** Test passed!"