mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2026-04-30 19:09:26 +08:00
* Fix #472: Add Emscripten/WebAssembly build for browser-based ChaiScript Port Rob Loach's ChaiScript.js work (https://github.com/RobLoach/ChaiScript.js) into the main repository as an Emscripten build target. Adds a GitHub Actions workflow that builds ChaiScript to WebAssembly and publishes artifacts (JS, WASM, HTML) for embedding in the official ChaiScript.com website. Includes an HTML interactive playground frontend and a native test validating the eval API surface. Co-Authored-By: Rob Loach <robloach@gmail.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review: publish WASM assets as release under wasm-latest tag Add a publish job to the emscripten workflow that creates a prerelease tagged wasm-latest with chaiscript.js, chaiscript.wasm, and chaiscript.html as downloadable assets. Runs only on pushes to the develop branch. The website repo can fetch these via the public GitHub Releases API on a daily cron without any cross-repo auth. Requested by @lefticus in PR #662 review. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: leftibot <leftibot@users.noreply.github.com> Co-authored-by: Rob Loach <robloach@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
// Test that validates the eval patterns used by the Emscripten wrapper.
|
|
// Based on work by Rob Loach (https://github.com/RobLoach/ChaiScript.js)
|
|
|
|
#ifndef CHAISCRIPT_NO_THREADS
|
|
#define CHAISCRIPT_NO_THREADS
|
|
#endif
|
|
|
|
#ifndef CHAISCRIPT_NO_DYNLOAD
|
|
#define CHAISCRIPT_NO_DYNLOAD
|
|
#endif
|
|
|
|
#include <chaiscript/chaiscript.hpp>
|
|
#include "../emscripten/chaiscript_eval.hpp"
|
|
#include <cassert>
|
|
#include <cmath>
|
|
#include <string>
|
|
|
|
int main() {
|
|
// Test eval (void return) - same as Emscripten eval()
|
|
chaiscript_eval("var x = 42");
|
|
|
|
// Test evalString - same as Emscripten evalString()
|
|
std::string s = chaiscript_eval_string("to_string(x)");
|
|
assert(s == "42");
|
|
|
|
// Test evalInt - same as Emscripten evalInt()
|
|
int i = chaiscript_eval_int("1 + 2");
|
|
assert(i == 3);
|
|
|
|
// Test evalBool - same as Emscripten evalBool()
|
|
bool b = chaiscript_eval_bool("true");
|
|
assert(b == true);
|
|
|
|
b = chaiscript_eval_bool("false");
|
|
assert(b == false);
|
|
|
|
// Test evalFloat - same as Emscripten evalFloat()
|
|
float f = chaiscript_eval_float("1.5f");
|
|
assert(std::abs(f - 1.5f) < 0.001f);
|
|
|
|
// Test evalDouble - same as Emscripten evalDouble()
|
|
double d = chaiscript_eval_double("3.14");
|
|
assert(std::abs(d - 3.14) < 0.001);
|
|
|
|
// Test a more complex expression
|
|
chaiscript_eval("def square(n) { return n * n; }");
|
|
int sq = chaiscript_eval_int("square(7)");
|
|
assert(sq == 49);
|
|
|
|
return 0;
|
|
}
|