pluto-lang 0.5.5

A interpreted programming language made in Rust
/* ==========================================
   Variables and Types
   ========================================== */
print("\nTesting Variables and Types:");

let num = 42;
let float = 3.14;
let str = "Hello";
let bool = true;
let null_val = null;

print("Type of num:", type(num));
print("Type of float:", type(float));
print("Type of str:", type(str));
print("Type of bool:", type(bool));
print("Type of null:", type(null_val));

/* ==========================================
   Arithmetic Operations
   ========================================== */
print("\nTesting Arithmetic:");

print(num, "+", 8, "=", num + 8);
print(num, "-", 8, "=", num - 8);
print(num, "*", 8, "=", num * 8);
print(num, "/", 8, "=", num / 8);
print(num, "%", 8, "=", num % 8);
print(num, "+", float, "=", num + float);

/* ==========================================
   String Operations
   ========================================== */
print("\nTesting Strings:");
print("String methods:");
print("Length:", str.len());
print("Uppercase:", str.to_upper());
print("Lowercase:", str.to_lower());
print("Character at 1:", str.char_at(1));
print("String + Number:", "Answer: " + num.to_string());

/* ==========================================
   Array Operations (Immutable)
   ========================================== */
print("\nTesting Arrays:");

let arr = [1, 2, 3, 4, 5];
print("Original array:", arr);
print("Length:", arr.len());
print("Sum:", arr.sum());

/* Test array immutability */
let arr_push = arr.push(6);
print("Original array after push:", arr);
print("New array from push:", arr_push);

let arr_pop = arr.pop();
print("Original array after pop:", arr);
print("New array from pop:", arr_pop);

let arr_remove = arr.remove(2);
print("Original array after remove:", arr);
print("New array from remove:", arr_remove);

/* Test array map */
let doubled = arr.map((x) -> x * 2);
print("Original array after map:", arr);
print("New array from map (doubled):", doubled);

let squared = arr.map((x) -> x * x);
print("New array from map (squared):", squared);

/* ==========================================
   HashMaps
   ========================================== */
print("\nTesting HashMaps:");

let map = {"name": "John", "age": 30};
print("Original map:", map);
print("Length:", map.len());
print("Get name:", map.get("name"));

let new_map = map.set("city", "New York");
print("After set:", new_map);

/* ==========================================
   Functions with Default Parameters
   ========================================== */
print("\nTesting Functions:");

let greet = (name="World", greeting="Hello") -> {
    print(greeting + ", " + name + "!");
};

greet();                    /* Hello, World! */
greet("Alice");            /* Hello, Alice! */
greet("Bob", "Hi");        /* Hi, Bob! */
greet(greeting="Hola");    /* Hola, World! */
greet(name="Charlie", greeting="Hey"); /* Hey, Charlie! */

/* Function with named parameters */
let power = (x, n=2) -> {
    return Math.pow(x, n);
};

print("2^3 =", power(2, 3));    /* 8 */
print("3^2 =", power(3));       /* 9 (using default) */
print("4^2 =", power(x=4));     /* 16 (using named arg) */

/* ==========================================
   Control Flow
   ========================================== */
print("\nTesting Control Flow:");

/* If-else */
let test_num = 42;
if (test_num > 50) {
    print("Greater than 50");
} else if (test_num > 40) {
    print("Greater than 40");
} else {
    print("Less than or equal to 40");
}

/* While loop with continue and break */
print("While loop with continue/break:");
let i = 0;
while (i < 5) {
    i++;
    if (i == 2) {
        continue;
    }
    if (i == 4) {
        break;
    }
    print("i =", i);
}

/* For loop */
print("For loop:");
for (let i = 0; i < 3; i++) {
    print("i =", i);
}

/* ==========================================
   Built-in Modules
   ========================================== */
print("\nTesting Modules:");

/* Math module */
print("PI =", Math.pi);
print("2^3 =", Math.pow(2, 3));

/* Time module */
print("Current time (s):", Time.now());
print("Current time (ms):", Time.now_ms());

/* Random module */
print("\nTesting Random Module:");
print("Random int (1-100):", Random.int(1, 100));
print("Random float:", Random.float());
print("Random bool (50%):", Random.bool(0.5));

let test_arr = [1, 2, 3, 4, 5];
print("Original array:", test_arr);
let shuffled = Random.shuffle(test_arr);
print("Shuffled array:", shuffled);

/* ==========================================
   Monte Carlo Pi Estimation
   ========================================== */
print("\nEstimating Pi:");

let points = 10000;
let inside = 0;

for (let i = 0; i < points; i++) {
    let x = Random.float();
    let y = Random.float();
    if (x * x + y * y <= 1.0) {
        inside++;
    }
}

let pi = 4.0 * inside / points;
print("Estimated Pi:", pi);

print("\nAll tests completed!");