Skip to content

[Bug] Integration tests fail due to bash arithmetic and leftover database files #978

@Scanf-s

Description

@Scanf-s

Description

  • make integration-test command fails immediately after the first passing test due to two issues in the test runner script.
  • db.ez test fails on second run. But success on first run.

Environment

  • OS: Linux (Ubuntu/WSL)
  • Branch: SchoolyB/main

Steps to Reproduce

git clone https://github.com/SchoolyB/EZ.git
cd EZ
make install
make integration-test

### Actual Result

```bash
sullung@DESKTOP-1MJVMNK:~/Development/EZ$ make integration-test 
Building EZ...
go build -ldflags "-X main.Version=9254fcd -X main.BuildTime=2026-01-10_10:41:38" -o ez ./cmd/ez
Build complete! Binary: ./ez
./integration-tests/run_tests.sh
========================================
  EZ Integration Test Suite
========================================

Running PASS tests...
----------------------------------------
  core/arrays... PASS
make: *** [Makefile:61: integration-test] Error 

sullung@DESKTOP-1MJVMNK:~/Development/EZ$ ./ez integration-tests/pass/stdlib/db.ez 
warning[W2009]: accessing member 'message' on error type which may be nil - consider checking for nil first
  --> integration-tests/pass/stdlib/db.ez:193:18
   |
193 |         println("Failed: ${save_err.message}")
   |                  ^ accessing member on potentially nil value
   |

summary: generated 1 warning
=== @db Standard Library Test ===
  -- Opening --
   [PASS] db.open(string)
  -- Setting --
   [PASS] db.set(database, string, string)
  -- Getting --
   [PASS] db.get(database, string)
   [PASS] db.get(database, string)
  -- db.has --
   [PASS] db.has(database, string)
   [PASS] db.has(database, string)
  -- db.keys --
   [PASS] db.keys(database)
  -- db.prefix --
   [PASS] db.prefix(database,string)
  -- db.count --
   [PASS] db.count(database)
  -- db.delete --
   [PASS] db.delete(database, string)
   [PASS] db.delete(database, string)
  -- db.save --
   [PASS] db.save(database)
  -- db.exists --
   [PASS] db.exists(string) returns false for missing file
   [PASS] db.exists(string) returns true for existing file
  -- db.update_key_name --
   [PASS] db.update_key_name() returns true
   [PASS] db.update_key_name() old key removed
   [PASS] db.update_key_name() new key has value
   [PASS] db.update_key_name() returns false for missing key
  -- db.sort --
   [PASS] db.sort(db.ALPHA)
   [PASS] db.sort(db.ALPHA_DESC)
   [PASS] db.sort(db.VALUE_ALPHA)
   [PASS] db.sort(db.KEY_LEN)
   [PASS] db.sort(db.VALUE_LEN)
   [PASS] db.sort(db.NUMERIC)
   [PASS] db.sort(db.NUMERIC_DESC)
  -- db.close --
   [PASS] db.close(database)

=== Summary ===
  Passed: 26
  Failed: 0

ALL TESTS PASSED
sullung@DESKTOP-1MJVMNK:~/Development/EZ$ ./ez integration-tests/pass/stdlib/db.ez 
warning[W2009]: accessing member 'message' on error type which may be nil - consider checking for nil first
  --> integration-tests/pass/stdlib/db.ez:193:18
   |
193 |         println("Failed: ${save_err.message}")
   |                  ^ accessing member on potentially nil value
   |

summary: generated 1 warning
=== @db Standard Library Test ===
  -- Opening --
   [PASS] db.open(string)
  -- Setting --
   [PASS] db.set(database, string, string)
  -- Getting --
   [PASS] db.get(database, string)
   [PASS] db.get(database, string)
  -- db.has --
   [PASS] db.has(database, string)
   [PASS] db.has(database, string)
  -- db.keys --
   [FAIL] db.keys(database): unknown key found in database
  -- db.prefix --
   [PASS] db.prefix(database,string)
  -- db.count --
   [PASS] db.count(database)
  -- db.delete --
   [PASS] db.delete(database, string)
   [PASS] db.delete(database, string)
  -- db.save --
   [PASS] db.save(database)
  -- db.exists --
   [PASS] db.exists(string) returns false for missing file
   [PASS] db.exists(string) returns true for existing file
  -- db.update_key_name --
   [PASS] db.update_key_name() returns true
   [PASS] db.update_key_name() old key removed
   [PASS] db.update_key_name() new key has value
   [PASS] db.update_key_name() returns false for missing key
  -- db.sort --
   [PASS] db.sort(db.ALPHA)
   [PASS] db.sort(db.ALPHA_DESC)
   [PASS] db.sort(db.VALUE_ALPHA)
   [PASS] db.sort(db.KEY_LEN)
   [PASS] db.sort(db.VALUE_LEN)
   [PASS] db.sort(db.NUMERIC)
   [PASS] db.sort(db.NUMERIC_DESC)
  -- db.close --
   [PASS] db.close(database)

=== Summary ===
  Passed: 25
  Failed: 1

SOME TESTS FAILED

Root Cause

Post-increment operation

In run_tests.sh, the script uses set -e (exit on error) combined with post-increment ((PASS_COUNT++)).

When PASS_COUNT=0, the expression ((PASS_COUNT++)), which bash treats as false (exit code 1), causing immediate script termination.

Leftover .ezdb files

The db.ez test creates database files that persist between runs, causing subsequent test runs to fail with "unknown key found in database".

Proposal

  1. Change post-increment to pre-increment -> ((++PASS_COUNT)) and ((++FAIL_COUNT))
  2. Add cleanup at the start of the script like, rm -f "$PROJECT_ROOT"/*.ezdb

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmodule-systemRelated to imports, exports, and module loadingtestsRelated to unit tests or test infrastructure

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions