Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increase std-lib test coverage #6038

Closed
42 of 73 tasks
bitzoic opened this issue May 21, 2024 · 0 comments · Fixed by #6087
Closed
42 of 73 tasks

Increase std-lib test coverage #6038

bitzoic opened this issue May 21, 2024 · 0 comments · Fixed by #6087
Assignees
Labels
big this task is hard and will take a while lib: std Standard library testing General testing

Comments

@bitzoic
Copy link
Member

bitzoic commented May 21, 2024

The std-lib currently is missing tests for many implementations.

For SDK tests:

  1. If external context is needed(for example an address's balance), a test using SDK should be used.

For in language tests:

  1. Inline tests should be used if the type is not contract-dependent i.e. a struct or data structure
  2. A contract should exist using the type with inline tests calling the contract if a function is contract-dependent

Cross Contract Tests:

  1. This should be handled in another PR

In Language Tests:

  • array_conversion
    • b256
    • u16
    • u256
    • u32
    • u64
  • bytes_conversions
    • b256
    • u16
    • u256
    • u32
    • u64
  • primitive_converisons
    • b256
    • str
    • u16
    • u256
    • u32
    • u64
    • u8
  • storage
    • storable_slice
    • storage_api
    • storage_bytes
    • stroage_key
    • storage_map
    • storage_string
    • storage_vec
  • VM
    • evm_address
  • address
  • alloc
  • assert
  • asset_id
  • b512
  • block
  • bytes
  • contract_id
  • ecr
  • flags
  • hash
  • identity
  • intrinsics
  • math
  • option
  • result
  • revert
  • string
  • u128
  • vec

SDK tests:

  • storage
    • storable_slice
    • storage_api
    • storage_bytes
    • stroage_key
    • storage_map
    • storage_string
    • storage_vec
  • asset
  • auth
  • block
  • call_frames
  • context
  • execution
  • external
  • inputs
  • logging
  • low_level_call
  • message
  • outputs
  • registers
  • revert
  • tx
@bitzoic bitzoic added lib: std Standard library testing General testing labels May 21, 2024
@bitzoic bitzoic self-assigned this May 21, 2024
@bitzoic bitzoic added the big this task is hard and will take a while label May 22, 2024
@bitzoic bitzoic linked a pull request Jun 4, 2024 that will close this issue
8 tasks
IGI-111 added a commit that referenced this issue Jun 11, 2024
## Description

Completes in-language tests for
#6038.

Any tests in the std-lib have been moved into the
`test/src/in_language_tests` folder. This has been done to ensure
imports behave as expected and fields that should be public are.

While many of the functions that have new tests are used elsewhere in
the tests, there were no tests to explicitly check that it is behaving
as expected.

# The following tests have been added:

## Address: 
- bits()
- Eq
- Neq
- b256.into()
- b256::from()
- Hash
- is_zero()

## Assert
- Assert revert when not true
- Assert_eq revert when not true
- Assert_ne revert when not false

## Asset Id
- Eq
- Neq
- b256.into()
- b256::from()
- new()
- default()
- bits()
- is_zero()

## B512
- Eq
- Neq
- Into
- b256::from
- b256.into()
- new()
- bits()
- is_zero()

## Bytes
- with_capacity()
- capacity()
- is_empty()
- ptr()
- b256.into()
- b256::from()
- clone()

## ContractId
- bits()
- Eq
- Neq
- b256.into()
- b256::from()
- is_zero()

## Hash
- write_str_array()
- Hash for 2, 3, 4, 5 tuple
- Hash 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 arrays
- sha256()
- sha256_str_array()
-  kekkack()

## Identity
- Eq
- Neq
- Hash

## Option
- Neq
- ok_or()
- expect()

## Result
- Neq
- expect()

## String
- ptr()
- Bytes::from()
- Bytes.into()
- as_raw_slice()

## U128
- into u8
- into u16
- into u32
- into u64
- From (u64, u64)
- Into (u64, u64)
- (u64, u64)::from
- (u64, u64).into()
- Eq
- Neq
- Ord
- new()
- min()
- max()
- bits()
- upper()
- lower()
- log2
- u8.into()
- u8::from()
- u16.into()
- u16::from()
- u32.into()
- u32::from()
- u64.into()
- u64::from()
- u256.into()
- u256::from()

## Primitive Conversions
### b256
- into u256
### u16
- into u8
### u32
- into u8
- into u16
### u64
- into u8
- into u16
- into u32
### u256
- into u8
- into u16
- into u32
- into u64
- into b256
- into u256
- into tuple

## EvmAddrsss
- bits()
- Eq
- Neq
- is_zero()
- b256::from()
- b256.into()

# Additional Edge cases have been added:
 
## Address
- Min & max edge cases

## Alloc
- Check alloc() does not exceed bounds
- Check realloc() same size
- Check realloc() less size does nothing
- Check realloc() excludes values if less than current
- realloc() reverts on unallocated memory
- alloc_bytes() does not exceed bounds
- realloc_bytes() same size
- realloc_bytes() less size does nothing
- realloc_bytes() excludes values if less than current
- realloc_bytes() reverts on unallocated memory

## Assert
- No tests for array

## AssetId
- Min & max edge cases

## B512
- Min & max edge cases

## Bytes
- Push increases capacity
- Pop does not change capacity
- Check get result when out of bounds
- Set front
- Set back
- Set does not change capacity
- Set twice
- Set behavior when out of bounds
- Insert front
- Insert back
- Insert changes capacity
- Insert behavior when out of bounds
- Remove front
- Remove back
- Remove does not change capacity
- Remove all
- Remove behavior when out of bounds
- Swap front
- Swap back
- Swap does not change capacity
- Swap behavior when out of bounds
- len() updates 
- Split twice
- Split capacity checks
- Split behavior when out of bounds
- Append changes capacity 

## ContractId
- Min & max edge cases

## Hash
- Min & max edge cases

## Identity
-  Min & max edge cases

## Option
- Coverage on all primitive types

## Result
- Coverage on all primitive types

## Revert
- Require reverts on false

## U128
- Revert on add when overflow
- Revert on sub when negative
- Revert on mul when overflow
- Revert on divide by zero
- Min & max edge cases

## Primitive Conversions
### b256
- Min & max edge cases
### u8
- Min & max edge cases
### u16
- Min & max edge cases
### u32
- Min & max edge cases
### u64
- Min & max edge cases
### u256
- Min & max edge cases

## EvmAddress
- Min & max edge cases 

## evm ecr recover
- Result error when failed to recover

The following issue have been discovered by writing these tests:
- #6085
- #6077
- #6086
- #6073
- #6037
- #6088
- #6104
- Addtional changes made in this PR. These include docs updates and a
private enum that should be public

## Checklist

- [x] I have linked to any relevant issues.
- [x] I have commented my code, particularly in hard-to-understand
areas.
- [ ] I have updated the documentation where relevant (API docs, the
reference, and the Sway book).
- [ ] If my change requires substantial documentation changes, I have
[requested support from the DevRel
team](https://github.com/FuelLabs/devrel-requests/issues/new/choose)
- [x] I have added tests that prove my fix is effective or that my
feature works.
- [x] I have added (or requested a maintainer to add) the necessary
`Breaking*` or `New Feature` labels where relevant.
- [x] I have done my best to ensure that my PR adheres to [the Fuel Labs
Code Review
Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md).
- [x] I have requested a review from the relevant team or maintainers.

---------

Co-authored-by: IGI-111 <igi-111@protonmail.com>
Co-authored-by: K1-R1 <77465250+K1-R1@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
big this task is hard and will take a while lib: std Standard library testing General testing
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant